Changeset 14723 in project


Ignore:
Timestamp:
05/21/09 16:59:08 (10 years ago)
Author:
sjamaan
Message:

Add final result info procedures; inserted OID and affected rows

Location:
release/4/postgresql/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • release/4/postgresql/trunk/postgresql.scm

    r14721 r14723  
    2525  result-table-oid result-table-column-index result-column-format
    2626  result-column-type result-column-type-modifier result-value
     27  result-affected-rows result-inserted-oid
    2728  invalid-oid
    2829  query-fold-left query-for-each query-tuples named-tuples)
     
    105106(define PQftype (foreign-lambda oid PQftype (const pgresult*) int))
    106107(define PQfmod (foreign-lambda int PQfmod (const pgresult*) int))
    107 (define PQcmdTuples (foreign-lambda nonnull-c-string PQcmdTuples pgresult*))
    108 
    109108(define PQgetvalue (foreign-lambda (c-pointer char) PQgetvalue (const pgresult*) int int))
    110109(define PQgetisnull (foreign-lambda bool PQgetisnull (const pgresult*) int int))
    111 (define PQgetlength (foreign-lambda int PQgetlength (const pgresult*) int int))
     110(define PQcmdTuples (foreign-lambda nonnull-c-string PQcmdTuples pgresult*))
     111(define PQoidValue (foreign-lambda oid PQoidValue pgresult*))
    112112
    113113;; TODO: Create a real callback system?
     
    321321        "C_return(C_string(&fin, len, val));")
    322322       (pg-result-ptr result) row column)))
     323
     324;;; TODO: Do we want/need PQnparams and PQparamtype bindings?
     325
     326(define (result-affected-rows result)
     327  (string->number (PQcmdTuples (pg-result-ptr result))))
     328
     329(define (result-inserted-oid result)
     330  (let ((oid (PQoidValue (pg-result-ptr result))))
     331    (and (not (= oid invalid-oid)) oid)))
    323332
    324333;; Buffer all available input, yielding if nothing is available:
     
    476485                      (sql-null)
    477486                      (let ([value (PQgetvalue result row column)]
    478                             [value-length
    479                              (PQgetlength result row column)])
     487                            [value-length (void)
     488                             #;(PQgetlength result row column)])
    480489                        ((vector-ref value-parsers column)
    481490                         value value-length))))
  • release/4/postgresql/trunk/tests/run.scm

    r14722 r14723  
    3030(define conn (connect '((dbname . test))))
    3131
    32 (test-group "low-level query support"
     32(test-group "low-level interface"
    3333  (test "simple query returns one result"
    3434        1
     
    141141  (test-error "Result value error for out of bounds row"
    142142              (result-value
    143                (car (exec-query conn "SELECT NULL")) 1 0)))
     143               (car (exec-query conn "SELECT NULL")) 1 0))
     144  (test "Number of affected rows false with SELECT"
     145        #f
     146        (result-affected-rows
     147         (car (exec-query conn "SELECT 1"))))
     148  (test "Number of affected rows 1 with INSERT"
     149        1
     150        (result-affected-rows
     151         (third (exec-query conn (conc "BEGIN;"
     152                                       "CREATE TEMP TABLE foo "
     153                                       "( bar integer ) ON COMMIT DROP;"
     154                                       "INSERT INTO foo (bar) VALUES (1);"
     155                                       "COMMIT;")))))
     156  (test "Number of affected rows 2 with UPDATE of two rows"
     157        2
     158        (result-affected-rows
     159         (fifth (exec-query conn (conc "BEGIN;"
     160                                       "CREATE TEMP TABLE foo "
     161                                       "( bar integer ) ON COMMIT DROP;"
     162                                       "INSERT INTO foo (bar) VALUES (100);"
     163                                       "INSERT INTO foo (bar) VALUES (101);"
     164                                       "UPDATE foo SET bar=102;"
     165                                       "COMMIT;")))))
     166  (test "Inserted OID false on SELECT"
     167        #f
     168        (result-inserted-oid
     169         (car (exec-query conn "SELECT 1"))))
     170  (test "Inserted OID false on OID-less table"
     171        #f
     172        (result-inserted-oid
     173         (third (exec-query conn (conc "BEGIN;"
     174                                       "CREATE TEMP TABLE foo "
     175                                       "( bar integer ) ON COMMIT DROP;"
     176                                       "INSERT INTO foo (bar) VALUES (1);"
     177                                       "COMMIT;")))))
     178  (test-assert
     179   "Inserted OID number on table with OID"
     180   (number?
     181    (result-inserted-oid
     182     (third (exec-query conn (conc "BEGIN;"
     183                                   "CREATE TEMP TABLE foo (bar integer) "
     184                                   "WITH (OIDS=true) ON COMMIT DROP;"
     185                                   "INSERT INTO foo (bar) VALUES (1);"
     186                                   "COMMIT;")))))))
Note: See TracChangeset for help on using the changeset viewer.