Improved postgres docs and added untestable tests.

This commit is contained in:
Dominik Picheta 2015-10-26 21:10:21 +01:00
commit 82f3cab1ac
2 changed files with 46 additions and 44 deletions

View file

@ -10,60 +10,56 @@
## A higher level `PostgreSQL`:idx: database wrapper. This interface ## A higher level `PostgreSQL`:idx: database wrapper. This interface
## is implemented for other databases also. ## is implemented for other databases also.
## ##
## **Note**: There are two approaches to **parameter substitution** in this module ## Parameter substitution
## 1. ``SqlQuery`` using ``?,?,?,...`` (same as the other db_xxxx modules) ## ----------------------
## ##
## .. code-block:: Nim ## All ``db_*`` modules support the same form of parameter substitution.
## sql"INSERT INTO myTable (colA,colB,colC) VALUES (?,?,?)" ## That is, using the ``?`` (question mark) to signify the place where a
## 2. ``SqlPrepared`` using ``$1,$2,$3,...`` (the Postgres way, using numbered parameters) ## value should be placed. For example:
##
## .. code-block:: Nim
## prepare(theDb, "MyExampleInsert",
## sql"""INSERT INTO myTable
## (colA,colB,colC)
## VALUES ($1,$2,$3)""",
## 3)
##
## Example:
## ##
## .. code-block:: Nim ## .. code-block:: Nim
## sql"INSERT INTO myTable (colA, colB, colC) VALUES (?, ?, ?)"
## ##
## import db_postgres, math ## **Note**: There are two approaches to parameter substitution support by
## this module.
## ##
## let theDb = open("localhost", "nim", "nim", "test") ## 1. ``SqlQuery`` using ``?, ?, ?, ...`` (same as all the ``db_*`` modules)
## ##
## theDb.exec(sql"Drop table if exists myTestTbl") ## 2. ``SqlPrepared`` using ``$1, $2, $3, ...``
## theDb.exec(sql("""create table myTestTbl (
## Id SERIAL PRIMARY KEY,
## Name VARCHAR(50) NOT NULL,
## i INTEGER,
## f NUMERIC(18,10))"""))
## ##
## var psql: SqlPrepared = theDb.prepare("testSql", ## .. code-block:: Nim
## sql"""INSERT INTO myTestTbl (name,i,f) ## prepare(db, "myExampleInsert",
## VALUES ($1,$2,$3)""", 3) ## sql"""INSERT INTO myTable
## theDb.exec(sql"START TRANSACTION") ## (colA, colB, colC)
## for i in 1..1000: ## VALUES ($1, $2, $3)""",
## if i %% 2 == 0: ## 3)
## # using Postgres prepared statement (SqlPrepare)
## theDb.exec(psql, "Item#" & $i, $i, $sqrt(i.float))
## else:
## # using SqlQuery
## 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"): ## Examples
## echo x ## --------
## ##
## let id = theDb.tryInsertId(sql"""INSERT INTO myTestTbl ## Opening a connection to a database
## (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() ## .. code-block:: Nim
## import 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)"""))
##
## Inserting data
## ==============
##
## .. code-block:: Nim
## db.exec(sql"INSERT INTO myTable (id, name) VALUES (0, ?)",
## "Dominik")
import strutils, postgres import strutils, postgres
type type
@ -382,3 +378,6 @@ proc setEncoding*(connection: DbConn, encoding: string): bool {.
## sets the encoding of a database connection, returns true for ## sets the encoding of a database connection, returns true for
## success, false for failure. ## success, false for failure.
return pqsetClientEncoding(connection, encoding) == 0 return pqsetClientEncoding(connection, encoding) == 0
# Tests are in ../../tests/untestable/tpostgres.

View file

@ -394,6 +394,9 @@ proc processCategory(r: var TResults, cat: Category, options: string, fileGlob:
testNimblePackages(r, cat, pfExtraOnly) testNimblePackages(r, cat, pfExtraOnly)
of "nimble-all": of "nimble-all":
testNimblePackages(r, cat, pfAll) testNimblePackages(r, cat, pfAll)
of "untestable":
# We can't test it because it depends on a third party.
discard # TODO: Move untestable tests to someplace else, i.e. nimble repo.
else: else:
for name in os.walkFiles("tests" & DirSep &.? cat.string / fileGlob): for name in os.walkFiles("tests" & DirSep &.? cat.string / fileGlob):
testSpec r, makeTest(name, options, cat) testSpec r, makeTest(name, options, cat)