diff options
author | JamesP <jlp765@gmail.com> | 2015-09-17 14:15:33 +1000 |
---|---|---|
committer | Dominik Picheta <dominikpicheta@gmail.com> | 2015-10-27 11:05:59 +0100 |
commit | 02d882cfbe8def0e421e310208f7a095aabe9b20 (patch) | |
tree | 6cfb6b8308672d8e4d61f03b93367db096b27758 /lib/impure/db_postgres.nim | |
parent | 033c461a873a0ab3a20842738a5120a91faaad71 (diff) | |
download | Nim-02d882cfbe8def0e421e310208f7a095aabe9b20.tar.gz |
add doco outlining the two SQL parameter substitution mechanisms for the db_postgres module
adjust doco note: indent by one space shorten doco example lines, by splitting across multiple lines shorten doco line widths by splitting long lines into multi-lines fix to prepare() example in doco "Note:" section
Diffstat (limited to 'lib/impure/db_postgres.nim')
-rw-r--r-- | lib/impure/db_postgres.nim | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/lib/impure/db_postgres.nim b/lib/impure/db_postgres.nim index 0bd0678a5..aee20e096 100644 --- a/lib/impure/db_postgres.nim +++ b/lib/impure/db_postgres.nim @@ -9,7 +9,61 @@ ## A higher level `PostgreSQL`:idx: database wrapper. This interface ## is implemented for other databases too. - +## +## **Note**: There are two approaches to **parameter substitution** in this module +## 1. ``SqlQuery`` using ``?,?,?,...`` (same as the other db_xxxx modules) +## +## .. code-block:: Nim +## ``sql"INSERT INTO myTable (colA,colB,colC) VALUES (?,?,?)"`` +## 2. ``SqlPrepared`` using ``$1,$2,$3,...`` (the Postgres way, using numbered parameters) +## +## .. code-block:: Nim +## ``prepare(theDb, "MyExampleInsert", +## sql"""INSERT INTO myTable +## (colA,colB,colC) +## VALUES ($1,$2,$3)""", +## 3)`` +## +## Example: +## +## .. code-block:: Nim +## +## import db_postgres, math +## +## let theDb = open("localhost", "nim", "nim", "test") +## +## theDb.exec(sql"Drop table if exists myTestTbl") +## 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", +## sql"""INSERT INTO myTestTbl (name,i,f) +## VALUES ($1,$2,$3)""", 3) +## theDb.exec(sql"START TRANSACTION") +## for i in 1..1000: +## if i %% 2 == 0: +## # 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"): +## 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) +## +## theDb.close() import strutils, postgres type |