mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 09:24:36 +00:00
* deprecate unsafeAddr; extend addr
addr is now available for all addressable locations, unsafeAddr is deprecated and become an alias for addr
* follow @Vindaar's advice
* change the signature of addr
* unsafeAddr => addr (stdlib)
* Update changelog.md
* unsafeAddr => addr (tests)
* Revert "unsafeAddr => addr (stdlib)"
This reverts commit ab83c99c50.
* doc changes; thanks to @konsumlamm
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
79 lines
2.1 KiB
Nim
79 lines
2.1 KiB
Nim
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(addr(dbuf[0]), addr(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(addr(res[0]), addr(dataTest[0]), dataTest.len)
|
|
doAssert res.len == orig.len
|
|
doAssert res == orig
|
|
|
|
db.close()
|
|
doAssert tryRemoveFile(dbName)
|
|
|
|
|
|
block:
|
|
block:
|
|
const dbName = buildDir / "db.sqlite3"
|
|
var db = db_sqlite.open(dbName, "", "", "")
|
|
var witness = false
|
|
try:
|
|
db.exec(sql("CREATE TABLE table1 (url TEXT, other_field INT);"))
|
|
db.exec(sql("REPLACE INTO table (url, another_field) VALUES (?, '123');"))
|
|
except DbError as e:
|
|
witness = true
|
|
doAssert e.msg == "The number of \"?\" given exceeds the number of parameters present in the query."
|
|
finally:
|
|
db.close()
|
|
removeFile(dbName)
|
|
|
|
doAssert witness
|
|
|
|
block:
|
|
const dbName = buildDir / "db.sqlite3"
|
|
var db = db_sqlite.open(dbName, "", "", "")
|
|
try:
|
|
db.exec(sql("CREATE TABLE table1 (url TEXT, other_field INT);"))
|
|
db.exec(sql("INSERT INTO table1 (url, other_field) VALUES (?, ?);"), "http://domain.com/test?param=1", 123)
|
|
finally:
|
|
db.close()
|
|
removeFile(dbName)
|