mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 01:14:41 +00:00
83 lines
2.6 KiB
Nim
83 lines
2.6 KiB
Nim
import db_postgres, strutils
|
|
|
|
|
|
let db = open("localhost", "dom", "", "test")
|
|
db.exec(sql"DROP TABLE IF EXISTS myTable")
|
|
db.exec(sql("""CREATE TABLE myTable (
|
|
id integer PRIMARY KEY,
|
|
name varchar(50) not null)"""))
|
|
let name = "Dom"
|
|
db.exec(sql"INSERT INTO myTable (id, name) VALUES (0, ?)",
|
|
name)
|
|
doAssert db.getValue(sql"SELECT name FROM myTable") == name
|
|
# Check issue #3513
|
|
doAssert db.getValue(sql"SELECT name FROM myTable") == name
|
|
|
|
|
|
# issue #3560
|
|
proc addToDb(conn: DbConn, fileId: int, fileName: string): int64 =
|
|
result = conn.insertId(sql("INSERT into files (id, filename) VALUES (?, ?)"), fileId, fileName)
|
|
|
|
db.exec(sql"DROP TABLE IF EXISTS files")
|
|
db.exec(sql"DROP TABLE IF EXISTS fileobjects")
|
|
db.exec(sql("""CREATE TABLE FILEOBJECTS(
|
|
ID SERIAL PRIMARY KEY,
|
|
FILE_SIZE INT,
|
|
MD5 CHAR(32) NOT NULL UNIQUE
|
|
);"""))
|
|
|
|
db.exec(sql("""CREATE TABLE FILES(
|
|
ID SERIAL PRIMARY KEY,
|
|
OBJECT_ID INT,
|
|
FILENAME TEXT NOT NULL,
|
|
URI TEXT,
|
|
SCHEME CHAR(10),
|
|
PUBLIC BOOLEAN DEFAULT FALSE,
|
|
CONSTRAINT fk1_fileobjs FOREIGN KEY (object_id)
|
|
REFERENCES fileobjects (id) MATCH SIMPLE
|
|
ON DELETE CASCADE
|
|
);"""))
|
|
|
|
let f1 = db.addToDb(1, "hello.tmp")
|
|
doAssert f1 == 1
|
|
let f2 = db.addToDb(2, "hello2.tmp")
|
|
doAssert f2 == 2
|
|
|
|
# PreparedStmt vs. normal query
|
|
try:
|
|
echo db.getValue(sql("select * from files where id = $1"), 1)
|
|
doAssert false, "Exception expected"
|
|
except DbError:
|
|
let msg = getCurrentExceptionMsg().normalize
|
|
doAssert "expects" in msg
|
|
doAssert "?" in msg
|
|
doAssert "parameter substitution" in msg
|
|
|
|
doAssert db.getValue(sql("select filename from files where id = ?"), 1) == "hello.tmp"
|
|
|
|
var first = prepare(db, "one", sql"select filename from files where id = $1", 1)
|
|
doAssert db.getValue(first, 1) == "hello.tmp"
|
|
|
|
try:
|
|
var second = prepare(db, "two", sql"select filename from files where id = ?", 1)
|
|
doAssert false, "Exception expected"
|
|
except:
|
|
let msg = getCurrentExceptionMsg().normalize
|
|
doAssert "expects" in msg
|
|
doAssert "$1" in msg
|
|
doAssert "parameter substitution" in msg
|
|
|
|
# issue #3569
|
|
db.exec(SqlQuery("DROP TABLE IF EXISTS tags"))
|
|
db.exec(SqlQuery("CREATE TABLE tags(id serial UNIQUE, name varchar(255))"))
|
|
|
|
for i in 1..10:
|
|
var name = "t" & $i
|
|
echo(name)
|
|
discard db.getRow(
|
|
SqlQuery("INSERT INTO tags(name) VALUES(\'$1\') RETURNING id" % [name]))
|
|
|
|
echo("All tests succeeded!")
|
|
|
|
db.close()
|