Changeset 14767 for release/4/postgresql/trunk/postgresql.scm
- Timestamp:
- 05/25/09 01:12:16 (16 months ago)
- Files:
-
- 1 modified
-
release/4/postgresql/trunk/postgresql.scm (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
release/4/postgresql/trunk/postgresql.scm
r14766 r14767 27 27 connect reset-connection disconnect connection? 28 28 29 simple-queriesquery query*29 multi-query query query* 30 30 31 31 result? clear-result! row-count column-count … … 39 39 40 40 row-fold row-fold* row-fold-right row-fold-right* 41 row-for-each row-for-each* row-map row-map*) 41 row-for-each row-for-each* row-map row-map* 42 column-fold column-fold* column-fold-right column-fold-right* 43 column-for-each column-for-each* column-map column-map*) 42 44 43 45 (import chicken scheme foreign) … … 534 536 (reverse! results))))) 535 537 536 (define ( simple-queries conn query)538 (define (multi-query conn queries) 537 539 (if ((foreign-lambda bool PQsendQuery pgconn* (const c-string)) 538 (pg-connection-ptr conn) quer y)540 (pg-connection-ptr conn) queries) 539 541 (collect-results conn) 540 (postgresql-error ' exec-simple-queries541 (conc "Unable to send query to server. "542 (postgresql-error 'multi-query 543 (conc "Unable to send multi-query to server. " 542 544 (PQerrorMessage (pg-connection-ptr conn))) 543 conn quer y)))545 conn queries))) 544 546 545 547 (define (query conn query . params) … … 686 688 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 687 689 688 (define (row-fold kons knil result) 689 (let ((rows (row-count result))) 690 (let loop ((seed knil) 691 (row 0)) 692 (if (= row rows) 693 seed 694 (loop (kons (row-values result row) seed) (add1 row)))))) 690 (define (make-result-fold item-count extract-item) 691 (lambda (kons knil result) 692 (let ((items (item-count result))) 693 (let loop ((seed knil) 694 (item 0)) 695 (if (= item items) 696 seed 697 (loop (kons (extract-item result item) seed) (add1 item))))))) 698 699 (define row-fold (make-result-fold row-count row-values)) 695 700 (define (row-fold* kons knil result) 696 701 (row-fold (lambda (values seed) 697 702 (apply kons (append values (list seed)))) knil result)) 698 703 699 (define (row-fold-right kons knil result) 700 (let ((rows (row-count result))) 701 (let loop ((seed knil) 702 (row 0)) 703 (if (= row rows) 704 seed 705 (kons (row-values result row) (loop seed (add1 row))))))) 704 (define column-fold (make-result-fold column-count column-values)) 705 (define (column-fold* kons knil result) 706 (column-fold (lambda (values seed) 707 (apply kons (append values (list seed)))) knil result)) 708 709 710 (define (make-result-fold-right item-count extract-item) 711 (lambda (kons knil result) 712 (let ((items (item-count result))) 713 (let loop ((seed knil) 714 (item 0)) 715 (if (= item items) 716 seed 717 (kons (extract-item result item) (loop seed (add1 item)))))))) 718 719 (define row-fold-right (make-result-fold-right row-count row-values)) 706 720 (define (row-fold-right* kons knil result) 707 721 (row-fold-right (lambda (val seed) 708 722 (apply kons (append val (list seed)))) knil result)) 723 724 (define column-fold-right (make-result-fold-right column-count column-values)) 725 (define (column-fold-right* kons knil result) 726 (column-fold-right (lambda (values seed) 727 (apply kons (append values (list seed)))) knil result)) 728 709 729 710 730 (define (row-for-each proc result) … … 715 735 (void)) 716 736 737 (define (column-for-each proc result) 738 (column-fold (lambda (values seed) (proc values)) #f result) 739 (void)) 740 (define (column-for-each* proc result) 741 (column-fold (lambda (values seed) (apply proc values)) #f result) 742 (void)) 743 744 717 745 ;; Like regular Scheme map, the order in which the procedure is applied is 718 746 ;; undefined. We make good use of that by traversing the resultset from 719 747 ;; the end back to the beginning, thereby avoiding a reverse! on the result. 720 (define (row-map proc result) 721 (let loop ((lst '()) 722 (row (row-count result))) 723 (if (= row 0) 724 lst 725 (loop (cons (proc (row-values result (sub1 row))) lst) (sub1 row))))) 748 (define (make-result-map item-count extract-item) 749 (lambda (proc result) 750 (let loop ((lst '()) 751 (item (item-count result))) 752 (if (= item 0) 753 lst 754 (loop (cons (proc (extract-item result (sub1 item))) lst) (sub1 item)))))) 755 (define row-map (make-result-map row-count row-values)) 726 756 (define (row-map* proc result) 727 757 (row-map (lambda (values) (apply proc values)) result)) 758 (define column-map (make-result-map column-count column-values)) 759 (define (column-map* proc result) 760 (row-map (lambda (values) (apply proc values)) result)) 728 761 729 762 )
