Show
Ignore:
Timestamp:
05/24/09 21:58:38 (16 months ago)
Author:
sjamaan
Message:

Rename result-values to result-row, and add result-column to the API
Make args rest-lists in the high-level API. I decided that the keywords "raw" and "format" are exclusive to the low-level API. You won't need them usually anyway.

Files:
1 modified

Legend:

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

    r14759 r14760  
    3030   
    3131  result? clear-result! result-row-count result-column-count 
    32   result-column-index result-column result-column-format 
    33   result-column-type result-column-type-modifier result-columns 
     32  result-column-index result-column-name result-column-names 
     33  result-column-format result-column-type result-column-type-modifier 
    3434  result-table-oid result-table-column-index 
    35   result-value result-values result-alist result-affected-rows 
    36   result-inserted-oid invalid-oid 
     35  result-value result-row result-row-alist result-column 
     36  result-affected-rows result-inserted-oid 
     37 
     38  invalid-oid 
    3739   
    3840  escape-string escape-bytea unescape-bytea 
     
    389391     location (sprintf "Result row ~A out of bounds" index) result index))) 
    390392 
    391 (define (result-column result index) 
     393(define (result-column-name result index) 
    392394  (check-result-column-index! result index 'result-column) 
    393395  (string->symbol (PQfname (pg-result-ptr result) index))) 
    394396 
    395 (define (result-columns result) 
     397(define (result-column-names result) 
    396398  (let loop ((ptr (pg-result-ptr result)) 
    397399             (row '()) 
     
    470472  (result-value* result row column raw: raw)) 
    471473 
    472 (define (result-values result row #!key raw) 
     474(define (result-row result row #!key raw) 
    473475  (check-result-row-index! result row 'result-list) 
    474476  (let loop ((list '()) 
     
    479481              (sub1 column))))) 
    480482 
     483(define (result-column result column #!key raw) 
     484  (check-result-column-index! result column 'result-list) 
     485  (let loop ((list '()) 
     486             (row (result-row-count result))) 
     487    (if (= row 0) 
     488        list 
     489        (loop (cons (result-value* result (sub1 row) column raw: raw) list) 
     490              (sub1 row))))) 
     491 
    481492;; (define (result-alist result row) 
    482 ;;   (map cons (result-columns result row) (result-values result row))) 
    483 (define (result-alist result row) 
     493;;   (map cons (result-columns result row) (result-row result row))) 
     494(define (result-row-alist result row) 
    484495  (check-result-row-index! result row 'result-alist) 
    485496  (let loop ((alist '()) 
     
    542553           ((member (PQresultStatus result) (list PGRES_BAD_RESPONSE 
    543554                                                  PGRES_FATAL_ERROR)) 
    544             (let* ((msg (string-trim-right (PQresultErrorMessage result))) 
    545                    (get-error-field (lambda (diag) 
    546                                       (PQresultErrorField result diag))) 
     555            (let* ((get-error-field (lambda (d) (PQresultErrorField result d))) 
    547556                   (sqlstate (get-error-field PG_DIAG_SQLSTATE)) 
    548557                   (maybe-severity (get-error-field PG_DIAG_SEVERITY)) 
     
    552561                    (make-pg-condition 
    553562                     'collect-results 
    554                      (conc "PQgetResult: " msg) 
    555                      args:               (list conn) 
     563                     (PQresultErrorMessage result) 
    556564                     severity:           (and maybe-severity 
    557565                                              (string->symbol 
     
    684692                     "        C_return(NULL);" 
    685693                     "}" 
    686                      "C_return(to);" 
    687                      )) 
     694                     "C_return(to);")) 
    688695  (or (%escape-string-conn conn str (string-length str)) 
    689696      (postgresql-error 'escape-string 
     
    706713                     "res = C_string(&fin, tolen - 1, (char *)esc);" 
    707714                     "PQfreemem(esc);" 
    708                      "C_return(res);" 
    709                      )) 
     715                     "C_return(res);")) 
    710716  (or (%escape-bytea-conn conn str (string-length str)) 
    711717      (postgresql-error 'escape-bytea 
     
    735741;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
    736742 
    737 (define (query-fold kons knil conn query #!optional (params '())) 
     743(define (%query-fold kons knil conn query params) 
    738744  (let* ((result (exec-query conn query params)) 
    739745         (rows (result-row-count result))) 
     
    742748      (if (= row rows) 
    743749          seed 
    744           (loop (kons (result-values result row) seed) (add1 row)))))) 
    745  
    746 (define (query-fold-right kons knil conn query #!optional (params '())) 
     750          (loop (kons (result-row result row) seed) (add1 row)))))) 
     751 
     752(define (%query-fold-right kons knil conn query params) 
    747753  (let* ((result (exec-query conn query params)) 
    748754         (rows (result-row-count result))) 
     
    751757      (if (= row rows) 
    752758          seed 
    753           (kons (result-values result row) (loop seed (add1 row))))))) 
    754  
    755 (define (query-fold* kons knil conn query #!optional (params '())) 
    756   (query-fold (lambda (values seed) (apply kons (append values (list seed)))) 
    757               knil conn query params)) 
    758 (define (query-fold-right* kons knil conn query #!optional (params '())) 
    759   (query-fold-right (lambda (val seed) (apply kons (append val (list seed)))) 
    760               knil conn query params)) 
    761  
    762 (define (query-for-each proc conn query #!optional (params '())) 
    763   (query-fold (lambda (values seed) (proc values)) #f conn query params) 
     759          (kons (result-row result row) (loop seed (add1 row))))))) 
     760 
     761(define (query-fold kons knil conn query . params) 
     762  (%query-fold kons knil conn query params)) 
     763(define (query-fold* kons knil conn query . params) 
     764  (%query-fold (lambda (values seed) (apply kons (append values (list seed)))) 
     765               knil conn query params)) 
     766(define (query-fold-right kons knil conn query . params) 
     767  (%query-fold-right kons knil conn query params)) 
     768(define (query-fold-right* kons knil conn query . params) 
     769  (%query-fold-right (lambda (val seed) (apply kons (append val (list seed)))) 
     770                     knil conn query params)) 
     771 
     772(define (query-for-each proc conn query . params) 
     773  (%query-fold (lambda (values seed) (proc values)) #f conn query params) 
    764774  (void)) 
    765775 
    766 (define (query-for-each* proc conn query #!optional (params '())) 
    767   (query-fold (lambda (values seed) (apply proc values)) #f conn query params) 
     776(define (query-for-each* proc conn query . params) 
     777  (%query-fold (lambda (values seed) (apply proc values)) #f conn query params) 
    768778  (void)) 
    769779 
     
    771781;; undefined.  We make good use of that by traversing the resultset from 
    772782;; the end back to the beginning, thereby avoiding a reverse! on the result. 
    773 (define (query-map proc conn query #!optional (params '())) 
     783(define (%query-map proc conn query params) 
    774784  (let ((result (exec-query conn query params))) 
    775     (let loop ((output '()) 
     785    (let loop ((ans '()) 
    776786               (row (result-row-count result))) 
    777787      (if (= row 0) 
    778           output 
    779           (loop (cons (proc (result-values result (sub1 row))) output) 
    780                 (sub1 row)))))) 
    781  
    782 (define (query-map* proc conn query #!optional (params '())) 
    783   (query-map (lambda (values seed) (apply proc values)) #f conn query params)) 
     788          ans 
     789          (loop (cons (proc (result-row result (sub1 row))) ans) (sub1 row)))))) 
     790(define (query-map proc conn query . params) 
     791  (%query-map proc conn query params)) 
     792 
     793(define (query-map* proc conn query . params) 
     794  (%query-map (lambda (values seed) (apply proc values)) conn query params)) 
    784795 
    785796)