Markdown code blocks migration part 7 (#20547)
This commit is contained in:
parent
13b3ea71da
commit
19ff746916
17 changed files with 426 additions and 411 deletions
|
|
@ -26,8 +26,9 @@
|
|||
## That is, using the `?` (question mark) to signify the place where a
|
||||
## value should be placed. For example:
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
## sql"INSERT INTO myTable (colA, colB, colC) VALUES (?, ?, ?)"
|
||||
## ```Nim
|
||||
## sql"INSERT INTO myTable (colA, colB, colC) VALUES (?, ?, ?)"
|
||||
## ```
|
||||
##
|
||||
##
|
||||
## Examples
|
||||
|
|
@ -36,57 +37,60 @@
|
|||
## Opening a connection to a database
|
||||
## ----------------------------------
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
## import std/db_odbc
|
||||
## var db = open("localhost", "user", "password", "dbname")
|
||||
## db.close()
|
||||
## ```Nim
|
||||
## import std/db_odbc
|
||||
## var db = open("localhost", "user", "password", "dbname")
|
||||
## db.close()
|
||||
## ```
|
||||
##
|
||||
## Creating a table
|
||||
## ----------------
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
## db.exec(sql"DROP TABLE IF EXISTS myTable")
|
||||
## db.exec(sql("""CREATE TABLE myTable (
|
||||
## id integer,
|
||||
## name varchar(50) not null)"""))
|
||||
## ```Nim
|
||||
## db.exec(sql"DROP TABLE IF EXISTS myTable")
|
||||
## db.exec(sql("""CREATE TABLE myTable (
|
||||
## id integer,
|
||||
## name varchar(50) not null)"""))
|
||||
## ```
|
||||
##
|
||||
## Inserting data
|
||||
## --------------
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
## db.exec(sql"INSERT INTO myTable (id, name) VALUES (0, ?)",
|
||||
## "Andreas")
|
||||
## ```Nim
|
||||
## db.exec(sql"INSERT INTO myTable (id, name) VALUES (0, ?)",
|
||||
## "Andreas")
|
||||
## ```
|
||||
##
|
||||
## Large example
|
||||
## -------------
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
## ```Nim
|
||||
## import std/[db_odbc, math]
|
||||
##
|
||||
## import std/[db_odbc, math]
|
||||
## var theDb = open("localhost", "nim", "nim", "test")
|
||||
##
|
||||
## var theDb = open("localhost", "nim", "nim", "test")
|
||||
## theDb.exec(sql"Drop table if exists myTestTbl")
|
||||
## theDb.exec(sql("create table myTestTbl (" &
|
||||
## " Id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, " &
|
||||
## " Name VARCHAR(50) NOT NULL, " &
|
||||
## " i INT(11), " &
|
||||
## " f DECIMAL(18,10))"))
|
||||
##
|
||||
## theDb.exec(sql"Drop table if exists myTestTbl")
|
||||
## theDb.exec(sql("create table myTestTbl (" &
|
||||
## " Id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, " &
|
||||
## " Name VARCHAR(50) NOT NULL, " &
|
||||
## " i INT(11), " &
|
||||
## " f DECIMAL(18,10))"))
|
||||
## theDb.exec(sql"START TRANSACTION")
|
||||
## for i in 1..1000:
|
||||
## theDb.exec(sql"INSERT INTO myTestTbl (name,i,f) VALUES (?,?,?)",
|
||||
## "Item#" & $i, i, sqrt(i.float))
|
||||
## theDb.exec(sql"COMMIT")
|
||||
##
|
||||
## theDb.exec(sql"START TRANSACTION")
|
||||
## for i in 1..1000:
|
||||
## theDb.exec(sql"INSERT INTO myTestTbl (name,i,f) VALUES (?,?,?)",
|
||||
## "Item#" & $i, i, sqrt(i.float))
|
||||
## theDb.exec(sql"COMMIT")
|
||||
## for x in theDb.fastRows(sql"select * from myTestTbl"):
|
||||
## echo x
|
||||
##
|
||||
## for x in theDb.fastRows(sql"select * from myTestTbl"):
|
||||
## echo x
|
||||
## let id = theDb.tryInsertId(sql"INSERT INTO myTestTbl (name,i,f) VALUES (?,?,?)",
|
||||
## "Item#1001", 1001, sqrt(1001.0))
|
||||
## echo "Inserted item: ", theDb.getValue(sql"SELECT name FROM myTestTbl WHERE id=?", id)
|
||||
##
|
||||
## let id = theDb.tryInsertId(sql"INSERT INTO myTestTbl (name,i,f) VALUES (?,?,?)",
|
||||
## "Item#1001", 1001, sqrt(1001.0))
|
||||
## echo "Inserted item: ", theDb.getValue(sql"SELECT name FROM myTestTbl WHERE id=?", id)
|
||||
##
|
||||
## theDb.close()
|
||||
## theDb.close()
|
||||
## ```
|
||||
|
||||
import strutils, odbcsql
|
||||
import db_common
|
||||
|
|
|
|||
|
|
@ -20,8 +20,9 @@
|
|||
## That is, using the `?` (question mark) to signify the place where a
|
||||
## value should be placed. For example:
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
## sql"INSERT INTO myTable (colA, colB, colC) VALUES (?, ?, ?)"
|
||||
## ```Nim
|
||||
## sql"INSERT INTO myTable (colA, colB, colC) VALUES (?, ?, ?)"
|
||||
## ```
|
||||
##
|
||||
## **Note**: There are two approaches to parameter substitution support by
|
||||
## this module.
|
||||
|
|
@ -30,12 +31,13 @@
|
|||
##
|
||||
## 2. `SqlPrepared` using `$1, $2, $3, ...`
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
## ```Nim
|
||||
## prepare(db, "myExampleInsert",
|
||||
## sql"""INSERT INTO myTable
|
||||
## (colA, colB, colC)
|
||||
## VALUES ($1, $2, $3)""",
|
||||
## 3)
|
||||
## ```
|
||||
##
|
||||
##
|
||||
## Unix Socket
|
||||
|
|
@ -46,11 +48,12 @@
|
|||
##
|
||||
## To use Unix sockets with `db_postgres`, change the server address to the socket file path:
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
## ```Nim
|
||||
## import std/db_postgres ## Change "localhost" or "127.0.0.1" to the socket file path
|
||||
## let db = db_postgres.open("/run/postgresql", "user", "password", "database")
|
||||
## echo db.getAllRows(sql"SELECT version();")
|
||||
## db.close()
|
||||
## ```
|
||||
##
|
||||
## The socket file path is operating system specific and distribution specific,
|
||||
## additional configuration may or may not be needed on your `postgresql.conf`.
|
||||
|
|
@ -63,26 +66,29 @@
|
|||
## Opening a connection to a database
|
||||
## ----------------------------------
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
## import std/db_postgres
|
||||
## let db = open("localhost", "user", "password", "dbname")
|
||||
## db.close()
|
||||
## ```Nim
|
||||
## import std/db_postgres
|
||||
## let db = open("localhost", "user", "password", "dbname")
|
||||
## db.close()
|
||||
## ```
|
||||
##
|
||||
## Creating a table
|
||||
## ----------------
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
## db.exec(sql"DROP TABLE IF EXISTS myTable")
|
||||
## db.exec(sql("""CREATE TABLE myTable (
|
||||
## id integer,
|
||||
## name varchar(50) not null)"""))
|
||||
## ```Nim
|
||||
## db.exec(sql"DROP TABLE IF EXISTS myTable")
|
||||
## db.exec(sql("""CREATE TABLE myTable (
|
||||
## id integer,
|
||||
## name varchar(50) not null)"""))
|
||||
## ```
|
||||
##
|
||||
## Inserting data
|
||||
## --------------
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
## db.exec(sql"INSERT INTO myTable (id, name) VALUES (0, ?)",
|
||||
## "Dominik")
|
||||
## ```Nim
|
||||
## db.exec(sql"INSERT INTO myTable (id, name) VALUES (0, ?)",
|
||||
## "Dominik")
|
||||
## ```
|
||||
import strutils, postgres
|
||||
|
||||
import db_common
|
||||
|
|
@ -609,10 +615,9 @@ proc open*(connection, user, password, database: string): DbConn {.
|
|||
## connect.
|
||||
##
|
||||
## Example:
|
||||
##
|
||||
## .. code-block:: nim
|
||||
##
|
||||
## con = open("", "", "", "host=localhost port=5432 dbname=mydb")
|
||||
## ```nim
|
||||
## con = open("", "", "", "host=localhost port=5432 dbname=mydb")
|
||||
## ```
|
||||
##
|
||||
## See http://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING
|
||||
## for more information.
|
||||
|
|
|
|||
|
|
@ -26,79 +26,78 @@
|
|||
## That is, using the `?` (question mark) to signify the place where a
|
||||
## value should be placed. For example:
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
##
|
||||
## sql"INSERT INTO my_table (colA, colB, colC) VALUES (?, ?, ?)"
|
||||
## ```Nim
|
||||
## sql"INSERT INTO my_table (colA, colB, colC) VALUES (?, ?, ?)"
|
||||
## ```
|
||||
##
|
||||
## Opening a connection to a database
|
||||
## ----------------------------------
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
## ```Nim
|
||||
## import std/db_sqlite
|
||||
##
|
||||
## import std/db_sqlite
|
||||
##
|
||||
## # user, password, database name can be empty.
|
||||
## # These params are not used on db_sqlite module.
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## db.close()
|
||||
## # user, password, database name can be empty.
|
||||
## # These params are not used on db_sqlite module.
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## db.close()
|
||||
## ```
|
||||
##
|
||||
## Creating a table
|
||||
## ----------------
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
##
|
||||
## db.exec(sql"DROP TABLE IF EXISTS my_table")
|
||||
## db.exec(sql"""CREATE TABLE my_table (
|
||||
## id INTEGER,
|
||||
## name VARCHAR(50) NOT NULL
|
||||
## )""")
|
||||
## ```Nim
|
||||
## db.exec(sql"DROP TABLE IF EXISTS my_table")
|
||||
## db.exec(sql"""CREATE TABLE my_table (
|
||||
## id INTEGER,
|
||||
## name VARCHAR(50) NOT NULL
|
||||
## )""")
|
||||
## ```
|
||||
##
|
||||
## Inserting data
|
||||
## --------------
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
##
|
||||
## db.exec(sql"INSERT INTO my_table (id, name) VALUES (0, ?)",
|
||||
## "Jack")
|
||||
## ```Nim
|
||||
## db.exec(sql"INSERT INTO my_table (id, name) VALUES (0, ?)",
|
||||
## "Jack")
|
||||
## ```
|
||||
##
|
||||
## Larger example
|
||||
## --------------
|
||||
##
|
||||
## .. code-block:: nim
|
||||
## ```Nim
|
||||
## import std/[db_sqlite, math]
|
||||
##
|
||||
## import std/[db_sqlite, math]
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
##
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## db.exec(sql"DROP TABLE IF EXISTS my_table")
|
||||
## db.exec(sql"""CREATE TABLE my_table (
|
||||
## id INTEGER PRIMARY KEY,
|
||||
## name VARCHAR(50) NOT NULL,
|
||||
## i INT(11),
|
||||
## f DECIMAL(18, 10)
|
||||
## )""")
|
||||
##
|
||||
## db.exec(sql"DROP TABLE IF EXISTS my_table")
|
||||
## db.exec(sql"""CREATE TABLE my_table (
|
||||
## id INTEGER PRIMARY KEY,
|
||||
## name VARCHAR(50) NOT NULL,
|
||||
## i INT(11),
|
||||
## f DECIMAL(18, 10)
|
||||
## )""")
|
||||
## db.exec(sql"BEGIN")
|
||||
## for i in 1..1000:
|
||||
## db.exec(sql"INSERT INTO my_table (name, i, f) VALUES (?, ?, ?)",
|
||||
## "Item#" & $i, i, sqrt(i.float))
|
||||
## db.exec(sql"COMMIT")
|
||||
##
|
||||
## db.exec(sql"BEGIN")
|
||||
## for i in 1..1000:
|
||||
## db.exec(sql"INSERT INTO my_table (name, i, f) VALUES (?, ?, ?)",
|
||||
## "Item#" & $i, i, sqrt(i.float))
|
||||
## db.exec(sql"COMMIT")
|
||||
## for x in db.fastRows(sql"SELECT * FROM my_table"):
|
||||
## echo x
|
||||
##
|
||||
## for x in db.fastRows(sql"SELECT * FROM my_table"):
|
||||
## echo x
|
||||
## let id = db.tryInsertId(sql"""INSERT INTO my_table (name, i, f)
|
||||
## VALUES (?, ?, ?)""",
|
||||
## "Item#1001", 1001, sqrt(1001.0))
|
||||
## echo "Inserted item: ", db.getValue(sql"SELECT name FROM my_table WHERE id=?", id)
|
||||
##
|
||||
## let id = db.tryInsertId(sql"""INSERT INTO my_table (name, i, f)
|
||||
## VALUES (?, ?, ?)""",
|
||||
## "Item#1001", 1001, sqrt(1001.0))
|
||||
## echo "Inserted item: ", db.getValue(sql"SELECT name FROM my_table WHERE id=?", id)
|
||||
##
|
||||
## db.close()
|
||||
## db.close()
|
||||
## ```
|
||||
##
|
||||
## Storing binary data example
|
||||
##----------------------------
|
||||
##
|
||||
## .. code-block:: nim
|
||||
##
|
||||
## ```nim
|
||||
## import std/random
|
||||
##
|
||||
## ## Generate random float datas
|
||||
|
|
@ -144,6 +143,7 @@
|
|||
## doAssert res == orig
|
||||
##
|
||||
## db.close()
|
||||
## ```
|
||||
##
|
||||
##
|
||||
## Note
|
||||
|
|
@ -187,13 +187,12 @@ proc dbError*(db: DbConn) {.noreturn.} =
|
|||
## Raises a `DbError` exception.
|
||||
##
|
||||
## **Examples:**
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
##
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## if not db.tryExec(sql"SELECT * FROM not_exist_table"):
|
||||
## dbError(db)
|
||||
## db.close()
|
||||
## ```Nim
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## if not db.tryExec(sql"SELECT * FROM not_exist_table"):
|
||||
## dbError(db)
|
||||
## db.close()
|
||||
## ```
|
||||
var e: ref DbError
|
||||
new(e)
|
||||
e.msg = $sqlite3.errmsg(db)
|
||||
|
|
@ -227,13 +226,12 @@ proc tryExec*(db: DbConn, query: SqlQuery,
|
|||
## Tries to execute the query and returns `true` if successful, `false` otherwise.
|
||||
##
|
||||
## **Examples:**
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
##
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## if not db.tryExec(sql"SELECT * FROM my_table"):
|
||||
## dbError(db)
|
||||
## db.close()
|
||||
## ```Nim
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## if not db.tryExec(sql"SELECT * FROM my_table"):
|
||||
## dbError(db)
|
||||
## db.close()
|
||||
## ```
|
||||
assert(not db.isNil, "Database not connected.")
|
||||
var q = dbFormat(query, args)
|
||||
var stmt: sqlite3.PStmt
|
||||
|
|
@ -259,17 +257,16 @@ proc exec*(db: DbConn, query: SqlQuery, args: varargs[string, `$`]) {.
|
|||
## Executes the query and raises a `DbError` exception if not successful.
|
||||
##
|
||||
## **Examples:**
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
##
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## try:
|
||||
## db.exec(sql"INSERT INTO my_table (id, name) VALUES (?, ?)",
|
||||
## 1, "item#1")
|
||||
## except:
|
||||
## stderr.writeLine(getCurrentExceptionMsg())
|
||||
## finally:
|
||||
## db.close()
|
||||
## ```Nim
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## try:
|
||||
## db.exec(sql"INSERT INTO my_table (id, name) VALUES (?, ?)",
|
||||
## 1, "item#1")
|
||||
## except:
|
||||
## stderr.writeLine(getCurrentExceptionMsg())
|
||||
## finally:
|
||||
## db.close()
|
||||
## ```
|
||||
if not tryExec(db, query, args): dbError(db)
|
||||
|
||||
proc newRow(L: int): Row =
|
||||
|
|
@ -310,24 +307,24 @@ iterator fastRows*(db: DbConn, query: SqlQuery,
|
|||
##
|
||||
## **Examples:**
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
## ```Nim
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
##
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## # Records of my_table:
|
||||
## # | id | name |
|
||||
## # |----|----------|
|
||||
## # | 1 | item#1 |
|
||||
## # | 2 | item#2 |
|
||||
##
|
||||
## # Records of my_table:
|
||||
## # | id | name |
|
||||
## # |----|----------|
|
||||
## # | 1 | item#1 |
|
||||
## # | 2 | item#2 |
|
||||
## for row in db.fastRows(sql"SELECT id, name FROM my_table"):
|
||||
## echo row
|
||||
##
|
||||
## for row in db.fastRows(sql"SELECT id, name FROM my_table"):
|
||||
## echo row
|
||||
## # Output:
|
||||
## # @["1", "item#1"]
|
||||
## # @["2", "item#2"]
|
||||
##
|
||||
## # Output:
|
||||
## # @["1", "item#1"]
|
||||
## # @["2", "item#2"]
|
||||
##
|
||||
## db.close()
|
||||
## db.close()
|
||||
## ```
|
||||
var stmt = setupQuery(db, query, args)
|
||||
var L = (column_count(stmt))
|
||||
var result = newRow(L)
|
||||
|
|
@ -359,8 +356,7 @@ iterator instantRows*(db: DbConn, query: SqlQuery,
|
|||
##
|
||||
## **Examples:**
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
##
|
||||
## ```Nim
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
##
|
||||
## # Records of my_table:
|
||||
|
|
@ -383,6 +379,7 @@ iterator instantRows*(db: DbConn, query: SqlQuery,
|
|||
## # length:2
|
||||
##
|
||||
## db.close()
|
||||
## ```
|
||||
var stmt = setupQuery(db, query, args)
|
||||
try:
|
||||
while step(stmt) == SQLITE_ROW:
|
||||
|
|
@ -429,28 +426,28 @@ iterator instantRows*(db: DbConn; columns: var DbColumns; query: SqlQuery,
|
|||
##
|
||||
## **Examples:**
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
## ```Nim
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
##
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## # Records of my_table:
|
||||
## # | id | name |
|
||||
## # |----|----------|
|
||||
## # | 1 | item#1 |
|
||||
## # | 2 | item#2 |
|
||||
##
|
||||
## # Records of my_table:
|
||||
## # | id | name |
|
||||
## # |----|----------|
|
||||
## # | 1 | item#1 |
|
||||
## # | 2 | item#2 |
|
||||
## var columns: DbColumns
|
||||
## for row in db.instantRows(columns, sql"SELECT * FROM my_table"):
|
||||
## discard
|
||||
## echo columns[0]
|
||||
##
|
||||
## var columns: DbColumns
|
||||
## for row in db.instantRows(columns, sql"SELECT * FROM my_table"):
|
||||
## discard
|
||||
## echo columns[0]
|
||||
## # Output:
|
||||
## # (name: "id", tableName: "my_table", typ: (kind: dbNull,
|
||||
## # notNull: false, name: "INTEGER", size: 0, maxReprLen: 0, precision: 0,
|
||||
## # scale: 0, min: 0, max: 0, validValues: @[]), primaryKey: false,
|
||||
## # foreignKey: false)
|
||||
##
|
||||
## # Output:
|
||||
## # (name: "id", tableName: "my_table", typ: (kind: dbNull,
|
||||
## # notNull: false, name: "INTEGER", size: 0, maxReprLen: 0, precision: 0,
|
||||
## # scale: 0, min: 0, max: 0, validValues: @[]), primaryKey: false,
|
||||
## # foreignKey: false)
|
||||
##
|
||||
## db.close()
|
||||
## db.close()
|
||||
## ```
|
||||
var stmt = setupQuery(db, query, args)
|
||||
setColumns(columns, stmt)
|
||||
try:
|
||||
|
|
@ -490,28 +487,28 @@ proc getRow*(db: DbConn, query: SqlQuery,
|
|||
##
|
||||
## **Examples:**
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
## ```Nim
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
##
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## # Records of my_table:
|
||||
## # | id | name |
|
||||
## # |----|----------|
|
||||
## # | 1 | item#1 |
|
||||
## # | 2 | item#2 |
|
||||
##
|
||||
## # Records of my_table:
|
||||
## # | id | name |
|
||||
## # |----|----------|
|
||||
## # | 1 | item#1 |
|
||||
## # | 2 | item#2 |
|
||||
## doAssert db.getRow(sql"SELECT id, name FROM my_table"
|
||||
## ) == Row(@["1", "item#1"])
|
||||
## doAssert db.getRow(sql"SELECT id, name FROM my_table WHERE id = ?",
|
||||
## 2) == Row(@["2", "item#2"])
|
||||
##
|
||||
## doAssert db.getRow(sql"SELECT id, name FROM my_table"
|
||||
## ) == Row(@["1", "item#1"])
|
||||
## doAssert db.getRow(sql"SELECT id, name FROM my_table WHERE id = ?",
|
||||
## 2) == Row(@["2", "item#2"])
|
||||
##
|
||||
## # Returns empty.
|
||||
## doAssert db.getRow(sql"INSERT INTO my_table (id, name) VALUES (?, ?)",
|
||||
## 3, "item#3") == @[]
|
||||
## doAssert db.getRow(sql"DELETE FROM my_table WHERE id = ?", 3) == @[]
|
||||
## doAssert db.getRow(sql"UPDATE my_table SET name = 'ITEM#1' WHERE id = ?",
|
||||
## 1) == @[]
|
||||
## db.close()
|
||||
## # Returns empty.
|
||||
## doAssert db.getRow(sql"INSERT INTO my_table (id, name) VALUES (?, ?)",
|
||||
## 3, "item#3") == @[]
|
||||
## doAssert db.getRow(sql"DELETE FROM my_table WHERE id = ?", 3) == @[]
|
||||
## doAssert db.getRow(sql"UPDATE my_table SET name = 'ITEM#1' WHERE id = ?",
|
||||
## 1) == @[]
|
||||
## db.close()
|
||||
## ```
|
||||
var stmt = setupQuery(db, query, args)
|
||||
var L = (column_count(stmt))
|
||||
result = newRow(L)
|
||||
|
|
@ -525,18 +522,18 @@ proc getAllRows*(db: DbConn, query: SqlQuery,
|
|||
##
|
||||
## **Examples:**
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
## ```Nim
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
##
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## # Records of my_table:
|
||||
## # | id | name |
|
||||
## # |----|----------|
|
||||
## # | 1 | item#1 |
|
||||
## # | 2 | item#2 |
|
||||
##
|
||||
## # Records of my_table:
|
||||
## # | id | name |
|
||||
## # |----|----------|
|
||||
## # | 1 | item#1 |
|
||||
## # | 2 | item#2 |
|
||||
##
|
||||
## doAssert db.getAllRows(sql"SELECT id, name FROM my_table") == @[Row(@["1", "item#1"]), Row(@["2", "item#2"])]
|
||||
## db.close()
|
||||
## doAssert db.getAllRows(sql"SELECT id, name FROM my_table") == @[Row(@["1", "item#1"]), Row(@["2", "item#2"])]
|
||||
## db.close()
|
||||
## ```
|
||||
result = @[]
|
||||
for r in fastRows(db, query, args):
|
||||
result.add(r)
|
||||
|
|
@ -554,24 +551,24 @@ iterator rows*(db: DbConn, query: SqlQuery,
|
|||
##
|
||||
## **Examples:**
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
## ```Nim
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
##
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## # Records of my_table:
|
||||
## # | id | name |
|
||||
## # |----|----------|
|
||||
## # | 1 | item#1 |
|
||||
## # | 2 | item#2 |
|
||||
##
|
||||
## # Records of my_table:
|
||||
## # | id | name |
|
||||
## # |----|----------|
|
||||
## # | 1 | item#1 |
|
||||
## # | 2 | item#2 |
|
||||
## for row in db.rows(sql"SELECT id, name FROM my_table"):
|
||||
## echo row
|
||||
##
|
||||
## for row in db.rows(sql"SELECT id, name FROM my_table"):
|
||||
## echo row
|
||||
## ## Output:
|
||||
## ## @["1", "item#1"]
|
||||
## ## @["2", "item#2"]
|
||||
##
|
||||
## ## Output:
|
||||
## ## @["1", "item#1"]
|
||||
## ## @["2", "item#2"]
|
||||
##
|
||||
## db.close()
|
||||
## db.close()
|
||||
## ```
|
||||
for r in fastRows(db, query, args): yield r
|
||||
|
||||
iterator rows*(db: DbConn, stmtName: SqlPrepared): Row
|
||||
|
|
@ -586,22 +583,22 @@ proc getValue*(db: DbConn, query: SqlQuery,
|
|||
##
|
||||
## **Examples:**
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
## ```Nim
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
##
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## # Records of my_table:
|
||||
## # | id | name |
|
||||
## # |----|----------|
|
||||
## # | 1 | item#1 |
|
||||
## # | 2 | item#2 |
|
||||
##
|
||||
## # Records of my_table:
|
||||
## # | id | name |
|
||||
## # |----|----------|
|
||||
## # | 1 | item#1 |
|
||||
## # | 2 | item#2 |
|
||||
## doAssert db.getValue(sql"SELECT name FROM my_table WHERE id = ?",
|
||||
## 2) == "item#2"
|
||||
## doAssert db.getValue(sql"SELECT id, name FROM my_table") == "1"
|
||||
## doAssert db.getValue(sql"SELECT name, id FROM my_table") == "item#1"
|
||||
##
|
||||
## doAssert db.getValue(sql"SELECT name FROM my_table WHERE id = ?",
|
||||
## 2) == "item#2"
|
||||
## doAssert db.getValue(sql"SELECT id, name FROM my_table") == "1"
|
||||
## doAssert db.getValue(sql"SELECT name, id FROM my_table") == "item#1"
|
||||
##
|
||||
## db.close()
|
||||
## db.close()
|
||||
## ```
|
||||
var stmt = setupQuery(db, query, args)
|
||||
if step(stmt) == SQLITE_ROW:
|
||||
let cb = column_bytes(stmt, 0)
|
||||
|
|
@ -643,14 +640,14 @@ proc tryInsertID*(db: DbConn, query: SqlQuery,
|
|||
##
|
||||
## **Examples:**
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
## ```Nim
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## db.exec(sql"CREATE TABLE my_table (id INTEGER, name VARCHAR(50) NOT NULL)")
|
||||
##
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## db.exec(sql"CREATE TABLE my_table (id INTEGER, name VARCHAR(50) NOT NULL)")
|
||||
##
|
||||
## doAssert db.tryInsertID(sql"INSERT INTO not_exist_table (id, name) VALUES (?, ?)",
|
||||
## 1, "item#1") == -1
|
||||
## db.close()
|
||||
## doAssert db.tryInsertID(sql"INSERT INTO not_exist_table (id, name) VALUES (?, ?)",
|
||||
## 1, "item#1") == -1
|
||||
## db.close()
|
||||
## ```
|
||||
assert(not db.isNil, "Database not connected.")
|
||||
var q = dbFormat(query, args)
|
||||
var stmt: sqlite3.PStmt
|
||||
|
|
@ -674,21 +671,21 @@ proc insertID*(db: DbConn, query: SqlQuery,
|
|||
##
|
||||
## **Examples:**
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
## ```Nim
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## db.exec(sql"CREATE TABLE my_table (id INTEGER, name VARCHAR(50) NOT NULL)")
|
||||
##
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## db.exec(sql"CREATE TABLE my_table (id INTEGER, name VARCHAR(50) NOT NULL)")
|
||||
## for i in 0..2:
|
||||
## let id = db.insertID(sql"INSERT INTO my_table (id, name) VALUES (?, ?)", i, "item#" & $i)
|
||||
## echo "LoopIndex = ", i, ", InsertID = ", id
|
||||
##
|
||||
## for i in 0..2:
|
||||
## let id = db.insertID(sql"INSERT INTO my_table (id, name) VALUES (?, ?)", i, "item#" & $i)
|
||||
## echo "LoopIndex = ", i, ", InsertID = ", id
|
||||
## # Output:
|
||||
## # LoopIndex = 0, InsertID = 1
|
||||
## # LoopIndex = 1, InsertID = 2
|
||||
## # LoopIndex = 2, InsertID = 3
|
||||
##
|
||||
## # Output:
|
||||
## # LoopIndex = 0, InsertID = 1
|
||||
## # LoopIndex = 1, InsertID = 2
|
||||
## # LoopIndex = 2, InsertID = 3
|
||||
##
|
||||
## db.close()
|
||||
## db.close()
|
||||
## ```
|
||||
result = tryInsertID(db, query, args)
|
||||
if result < 0: dbError(db)
|
||||
|
||||
|
|
@ -713,19 +710,19 @@ proc execAffectedRows*(db: DbConn, query: SqlQuery,
|
|||
##
|
||||
## **Examples:**
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
## ```Nim
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
##
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## # Records of my_table:
|
||||
## # | id | name |
|
||||
## # |----|----------|
|
||||
## # | 1 | item#1 |
|
||||
## # | 2 | item#2 |
|
||||
##
|
||||
## # Records of my_table:
|
||||
## # | id | name |
|
||||
## # |----|----------|
|
||||
## # | 1 | item#1 |
|
||||
## # | 2 | item#2 |
|
||||
## doAssert db.execAffectedRows(sql"UPDATE my_table SET name = 'TEST'") == 2
|
||||
##
|
||||
## doAssert db.execAffectedRows(sql"UPDATE my_table SET name = 'TEST'") == 2
|
||||
##
|
||||
## db.close()
|
||||
## db.close()
|
||||
## ```
|
||||
exec(db, query, args)
|
||||
result = changes(db)
|
||||
|
||||
|
|
@ -738,11 +735,10 @@ proc close*(db: DbConn) {.tags: [DbEffect].} =
|
|||
## Closes the database connection.
|
||||
##
|
||||
## **Examples:**
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
##
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## db.close()
|
||||
## ```Nim
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## db.close()
|
||||
## ```
|
||||
if sqlite3.close(db) != SQLITE_OK: dbError(db)
|
||||
|
||||
proc open*(connection, user, password, database: string): DbConn {.
|
||||
|
|
@ -753,16 +749,15 @@ proc open*(connection, user, password, database: string): DbConn {.
|
|||
## **Note:** Only the `connection` parameter is used for `sqlite`.
|
||||
##
|
||||
## **Examples:**
|
||||
##
|
||||
## .. code-block:: Nim
|
||||
##
|
||||
## try:
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## ## do something...
|
||||
## ## db.getAllRows(sql"SELECT * FROM my_table")
|
||||
## db.close()
|
||||
## except:
|
||||
## stderr.writeLine(getCurrentExceptionMsg())
|
||||
## ```Nim
|
||||
## try:
|
||||
## let db = open("mytest.db", "", "", "")
|
||||
## ## do something...
|
||||
## ## db.getAllRows(sql"SELECT * FROM my_table")
|
||||
## db.close()
|
||||
## except:
|
||||
## stderr.writeLine(getCurrentExceptionMsg())
|
||||
## ```
|
||||
var db: DbConn
|
||||
if sqlite3.open(connection, db) == SQLITE_OK:
|
||||
result = db
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue