summary refs log tree commit diff stats
path: root/lib/impure/db_postgres.nim
diff options
context:
space:
mode:
authorJamesP <jlp765@gmail.com>2015-09-17 14:15:33 +1000
committerDominik Picheta <dominikpicheta@gmail.com>2015-10-27 11:05:59 +0100
commit02d882cfbe8def0e421e310208f7a095aabe9b20 (patch)
tree6cfb6b8308672d8e4d61f03b93367db096b27758 /lib/impure/db_postgres.nim
parent033c461a873a0ab3a20842738a5120a91faaad71 (diff)
downloadNim-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.nim56
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