diff options
author | Regis Caillaud <35006197+Clonkk@users.noreply.github.com> | 2020-11-02 13:02:55 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-02 13:02:55 +0100 |
commit | 6fa82a5b3afbe644eef3fb41647a341d8e9b21c4 (patch) | |
tree | eef7ff259f34ba4c072ec25e4743f68cf3c9817e /tests/stdlib/tsqlitebindatas.nim | |
parent | 4fe56b56ce2b856ff8fae9051cceb766ab7729e0 (diff) | |
download | Nim-6fa82a5b3afbe644eef3fb41647a341d8e9b21c4.tar.gz |
Handle BLOB column type in SQLite as binary data (#15681)
* Fixed not handling blob correctly in sqlite * Fixed setLen commented by mistake * Added binary example as db_sqlite doc * Added tests for sqlite binary data
Diffstat (limited to 'tests/stdlib/tsqlitebindatas.nim')
-rw-r--r-- | tests/stdlib/tsqlitebindatas.nim | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/stdlib/tsqlitebindatas.nim b/tests/stdlib/tsqlitebindatas.nim new file mode 100644 index 000000000..643f1e2e6 --- /dev/null +++ b/tests/stdlib/tsqlitebindatas.nim @@ -0,0 +1,50 @@ +discard """ + action: "run" + exitcode: 0 +""" +import db_sqlite +import random +import os +from stdtest/specialpaths import buildDir + +block tsqlitebindatas: ## db_sqlite binary data + const dbName = buildDir / "tsqlitebindatas.db" + + let origName = "Bobby" + var orig = newSeq[float64](150) + randomize() + for x in orig.mitems: + x = rand(1.0)/10.0 + + discard tryRemoveFile(dbName) + let db = open(dbName, "", "", "") + let createTableStr = sql"""CREATE TABLE test( + id INTEGER NOT NULL PRIMARY KEY, + name TEXT, + data BLOB + ) + """ + db.exec(createTableStr) + + var dbuf = newSeq[byte](orig.len*sizeof(float64)) + copyMem(unsafeAddr(dbuf[0]), unsafeAddr(orig[0]), dbuf.len) + + var insertStmt = db.prepare("INSERT INTO test (id, name, data) VALUES (?, ?, ?)") + insertStmt.bindParams(1, origName, dbuf) + let bres = db.tryExec(insertStmt) + doAssert(bres) + + finalize(insertStmt) + + var nameTest = db.getValue(sql"SELECT name FROM test WHERE id = ?", 1) + doAssert nameTest == origName + + var dataTest = db.getValue(sql"SELECT data FROM test WHERE id = ?", 1) + let seqSize = int(dataTest.len*sizeof(byte)/sizeof(float64)) + var res: seq[float64] = newSeq[float64](seqSize) + copyMem(unsafeAddr(res[0]), addr(dataTest[0]), dataTest.len) + doAssert res.len == orig.len + doAssert res == orig + + db.close() + doAssert tryRemoveFile(dbName) |