Index: datashare.scm ================================================================== --- datashare.scm +++ datashare.scm @@ -150,15 +150,16 @@ (next-iteration 0)) (dbi:with-transaction db (lambda () (dbi:for-each-row + (lambda (output) (lambda (iteration) - (if (and (number? iteration) + (if (and (number? (vector-refiteration) (>= iteration next-iteration)) (set! next-iteration (+ iteration 1)))) - iter-qry area version-name) + iter-qry area version-name)) ;; now store the data (dbi:exec db "INSERT INTO pkgs (area,version_name,iteration,store_type,submitter,source_path,quality,comment) VALUES (?,?,?,?,?,?,?,?);" area version-name next-iteration (conc store-type) submitter source-path quality comment))) (dbi:close iter-qry) @@ -166,11 +167,11 @@ (define (datashare:get-id db area version-name iteration) (let ((res #f)) (dbi:for-each-row (lambda (id) - (set! res id)) + (set! res (vector-ref id 0))) db "SELECT id FROM pkgs WHERE area=? AND version_name=? AND iteration=?;" area version-name iteration) res)) @@ -181,12 +182,12 @@ (dbi:exec db "UPDATE pkgs SET copied=? WHERE id=?;" value id)) (define (datashare:get-pkg-record db area version-name iteration) (let ((res #f)) (dbi:for-each-row - (lambda (a . b) - (set! res (apply vector a b))) + (lambda (output) + (set! res output)) db "SELECT * FROM pkgs WHERE area=? AND version_name=? AND iteration=?;" area version-name iteration) @@ -214,11 +215,11 @@ (define (datashare:count-refs db pkg-id) (let ((res 0)) (dbi:for-each-row (lambda (count) - (set! res count)) + (set! res (vector-ref count 0)) db "SELECT count(id) FROM refs WHERE pkg_id=?;" pkg-id) res)) @@ -281,12 +282,12 @@ (define open-run-close open-run-close-no-exception-handling) (define (datashare:get-pkgs db area-filter version-filter iter-filter) (let ((res '())) (dbi:for-each-row ;; replace with fold ... - (lambda (a . b) - (set! res (cons (list->vector (cons a b)) res))) + (lambda (output) + (set! res (cons output res))) db (conc "SELECT id,area,version_name,store_type,copied,source_path,iteration,submitter,datetime,storegrp,datavol,quality,disk_id,comment,stored_path " " FROM pkgs WHERE area like ? AND version_name LIKE ? AND iteration " iter-filter ";") area-filter version-filter) (reverse res))) @@ -293,12 +294,12 @@ (define (datashare:get-pkg db area-name version-name #!key (iteration #f)) (let ((dat '()) (res #f)) (dbi:for-each-row ;; replace with fold ... - (lambda (a . b) - (set! dat (cons (list->vector (cons a b)) dat))) + (lambda (output) + (set! dat (cons output dat))) db (conc "SELECT id,area,version_name,store_type,copied,source_path,iteration,submitter,datetime,storegrp,datavol,quality,disk_id,comment,stored_path " " FROM pkgs WHERE area=? AND version_name=? ORDER BY iteration ASC;") area-name version-name) ;; now filter for iteration, either max if #f or specific one @@ -316,13 +317,14 @@ (define (datashare:get-versions-for-area db area-name #!key (version-patt #f)) (let ((res '()) (data (make-hash-table))) (dbi:for-each-row + (lambda (output) (lambda (version-name submitter iteration submitted-time comment) ;; 0 1 2 3 4 - (hash-table-set! data version-name (vector version-name submitter iteration submitted-time comment))) + (hash-table-set! data version-name (vector version-name submitter iteration submitted-time comment)))) db "SELECT version_name,submitter,iteration,datetime,comment FROM pkgs WHERE area='megatest' AND version_name != 'latest' AND version_name LIKE ? ORDER BY datetime asc;" (or version-patt "%")) (map (lambda (x)(hash-table-ref data x))(sort (hash-table-keys data) string-ci>=)))) Index: filedb.scm ================================================================== --- filedb.scm +++ filedb.scm @@ -59,22 +59,22 @@ (define (filedb:get-current-time-string) (string-chomp (time->string (seconds->local-time (current-seconds))))) (define (filedb:get-base-id db path) - (let ((stmt (sqlite3:prepare db "SELECT id FROM bases WHERE base=?;")) + (let ((stmt (dbi:prepare db "SELECT id FROM bases WHERE base=?;")) (id-num #f)) (dbi:for-each-row - (lambda (num) (set! id-num num)) stmt path) + (lambda (num) (set! id-num (vector-ref num 0))) stmt path) (dbi:close stmt) id-num)) (define (filedb:get-path-id db path parent) - (let ((stmt (sqlite3:prepare db "SELECT id FROM paths WHERE path=? AND parent_id=?;")) + (let ((stmt (dbi:prepare db "SELECT id FROM paths WHERE path=? AND parent_id=?;")) (id-num #f)) (dbi:for-each-row - (lambda (num) (set! id-num num)) stmt path parent) + (lambda (num) (set! id-num (vector-ref num 0))) stmt path parent) (dbi:close stmt) id-num)) (define (filedb:add-base db path) (let ((existing (filedb:get-base-id db path))) @@ -109,11 +109,11 @@ (vector-ref statinfo 8) ;; mtime ) (dbi:close stmt))) ;; (filedb:get-current-time-string)))) (define (filedb:add-path db path parent) - (let ((stmt (sqlite3:prepare db "INSERT INTO paths (path,parent_id) VALUES (?,?);"))) + (let ((stmt (dbi:prepare db "INSERT INTO paths (path,parent_id) VALUES (?,?);"))) (dbi:exec stmt path parent) (dbi:close stmt))) (define (filedb:register-path fdb path #!key (save-stat #f)) (let* ((db (filedb:fdb-get-db fdb)) @@ -175,28 +175,28 @@ (define (filedb:drop-base fdb path) (print "Sorry, I don't do anything yet")) (define (filedb:find-all fdb pattern action) (let* ((db (filedb:fdb-get-db fdb)) - (stmt (sqlite3:prepare db "SELECT id FROM paths WHERE path like ?;")) + (stmt (dbi:prepare db "SELECT id FROM paths WHERE path like ?;")) (result '())) (dbi:for-each-row (lambda (num) - (action num) + (action (vector-ref num 0)) (set! result (cons num result))) stmt pattern) (dbi:close stmt) result)) (define (filedb:get-path-record fdb id) (let* ((db (filedb:fdb-get-db fdb)) (partcache (filedb:fdb-get-partcache fdb)) (dat (hash-table-ref/default partcache id #f))) (if dat dat - (let ((stmt (sqlite3:prepare db "SELECT path,parent_id FROM paths WHERE id=?;")) + (let ((stmt (dbi:prepare db "SELECT path,parent_id FROM paths WHERE id=?;")) (result #f)) (dbi:for-each-row - (lambda (path parent_id)(set! result (list path parent_id))) stmt id) + (lambda (output) (lambda (path parent_id)(set! result (list path parent_id)))) stmt id) (hash-table-set! partcache id result) (dbi:close stmt) result)))) (define (filedb:get-children fdb parent-id) @@ -214,12 +214,13 @@ (define (filedb:get-children-patt fdb parent-id search-patt) (let* ((db (filedb:fdb-get-db fdb)) (res '())) ;; first get the children that have no children (dbi:for-each-row + (lambda (output) (lambda (id path parent-id) - (set! res (cons (vector id path parent-id) res))) + (set! res (cons (vector id path parent-id) res)))) db "SELECT id,path,parent_id FROM paths WHERE parent_id=? AND (id IN (SELECT parent_id FROM paths) OR path LIKE ?);" parent-id search-patt) res)) Index: lock-queue.scm ================================================================== --- lock-queue.scm +++ lock-queue.scm @@ -103,24 +103,25 @@ (begin (debug:print-error 0 *default-log-port* " Failed to find younger locks for test with id " test-id ", error: " ((condition-property-accessor 'exn 'message) exn) ", giving up.") #f)) (let ((res #f)) (dbi:for-each-row + (lambda (output) (lambda (tid) ;; Actually this should not be needed as mystart cannot be simultaneously less than and test-id same as (if (not (equal? tid test-id)) - (set! res tid))) + (set! res tid)))) (lock-queue:db-dat-get-db dbdat) "SELECT test_id FROM queue WHERE start_time > ?;" mystart) res))) (define (lock-queue:get-lock dbdat test-id #!key (count 10)(waiting-msg #f)) (tasks:wait-on-journal (lock-queue:db-dat-get-path dbdat) 1200 remove: #t waiting-msg: "lock-queue:get-lock, waiting on journal") (let* ((res #f) (db (lock-queue:db-dat-get-db dbdat)) - (lckqry (sqlite3:prepare db "SELECT test_id,run_lock FROM runlocks WHERE run_lock='locked';")) - (mklckqry (sqlite3:prepare db "INSERT INTO runlocks (test_id,run_lock) VALUES (?,'locked');"))) + (lckqry (dbi:prepare db "SELECT test_id,run_lock FROM runlocks WHERE run_lock='locked';")) + (mklckqry (dbi:prepare db "INSERT INTO runlocks (test_id,run_lock) VALUES (?,'locked');"))) (let ((result (handle-exceptions exn (begin (debug:print 0 *default-log-port* "WARNING: failed to get queue lock. Removing lock db and returning fail") ;; Will try again in a few seconds") @@ -132,12 +133,12 @@ (lock-queue:delete-lock-db dbdat) #f) (dbi:with-transaction db (lambda () - (dbi:for-each-row (lambda (tid lockstate) - (set! res (list tid lockstate))) + (dbi:for-each-row (lambda (output) (lambda (tid lockstate) + (set! res (list tid lockstate)))) lckqry) (if res (if (equal? (car res) test-id) #t ;; already have the lock #f) Index: portlogger.scm ================================================================== --- portlogger.scm +++ portlogger.scm @@ -10,10 +10,11 @@ (require-extension (srfi 18) extras tcp s11n) (use sqlite3 srfi-1 posix srfi-69 hostinfo dot-locking z3) (import (prefix sqlite3 sqlite3:)) +(include "/nfs/site/disks/icf_fdk_cw_gwa002/srehman/fossil/dbi/dbi.scm") (import (prefix dbi dbi:)) (declare (unit portlogger)) (declare (uses db)) @@ -64,43 +65,43 @@ (if (file-exists? fname)(delete-file fname)) ;; brutally get rid of it (print-call-chain (current-error-port))) (let* (;; (lock (obtain-dot-lock fname 2 9 10)) (db (portlogger:open-db fname)) (res (apply proc db params))) - (sqlite3:finalize! db) + (dbi:close db) ;; (release-dot-lock fname) res)))) ;; (fold-row PROC INIT DATABASE SQL . PARAMETERS) (define (portlogger:take-port db portnum) - (let* ((qry1 (sqlite3:prepare db "INSERT INTO ports (port,state) VALUES (?,?);")) - (qry2 (sqlite3:prepare db "UPDATE ports SET state=?,update_time=strftime('%s','now') WHERE port=?;")) - (qry3 (sqlite3:prepare db "SELECT state FROM ports WHERE port=?;")) - (res (sqlite3:with-transaction + (let* ((qry1 (dbi:prepare db "INSERT INTO ports (port,state) VALUES (?,?);")) + (qry2 (dbi:prepare db "UPDATE ports SET state=?,update_time=strftime('%s','now') WHERE port=?;")) + (qry3 (dbi:prepare db "SELECT state FROM ports WHERE port=?;")) + (res (dbi:with-transaction db (lambda () ;; (fold-row (lambda (var curr) (or var curr)) #f db "SELECT var FROM foo WHERE id=100;") (let* ((curr #f) (res #f)) - (set! curr (sqlite3:fold-row + (set! curr (dbi:fold-row (lambda (var curr) (or curr var curr)) "not-tried" qry3 portnum)) ;; (print "curr=" curr) (set! res (case (string->symbol curr) - ((released) (sqlite3:execute qry2 "taken" portnum) 'taken) - ((not-tried) (sqlite3:execute qry1 portnum "taken") 'taken) + ((released) (dbi:execute qry2 "taken" portnum) 'taken) + ((not-tried) (dbi:execute qry1 portnum "taken") 'taken) ((taken) 'already-taken) ((failed) 'failed) (else 'error))) ;; (print "res=" res) res))))) - (sqlite3:finalize! qry1) - (sqlite3:finalize! qry2) - (sqlite3:finalize! qry3) + (dbi:close qry1) + (dbi:close qry2) + (dbi:close qry3) res)) (define (portlogger:get-prev-used-port db) (handle-exceptions exn @@ -109,11 +110,11 @@ (debug:print 0 *default-log-port* " message: " ((condition-property-accessor 'exn 'message) exn)) (debug:print 0 *default-log-port* "exn=" (condition->list exn)) (print-call-chain (current-error-port)) (debug:print 0 *default-log-port* "Continuing anyway.") #f) - (sqlite3:fold-row + (dbi:fold-row (lambda (var curr) (or curr var curr)) #f db "SELECT (port) FROM ports WHERE state='released' LIMIT 1;"))) @@ -139,16 +140,16 @@ portnum)) ;; set port to "released", "failed" etc. ;; (define (portlogger:set-port db portnum value) - (sqlite3:execute db "UPDATE ports SET state=?,update_time=strftime('%s','now') WHERE port=?;" value portnum)) + (dbi:execute db "UPDATE ports SET state=?,update_time=strftime('%s','now') WHERE port=?;" value portnum)) ;; set port to failed (attempted to take but got error) ;; (define (portlogger:set-failed db portnum) - (sqlite3:execute db "UPDATE ports SET state='failed',fail_count=fail_count+1,update_time=strftime('%s','now') WHERE port=?;" portnum)) + (dbi:execute db "UPDATE ports SET state='failed',fail_count=fail_count+1,update_time=strftime('%s','now') WHERE port=?;" portnum)) ;;====================================================================== ;; MAIN ;;====================================================================== @@ -174,9 +175,9 @@ (portlogger:set-port db (if (number? port) port (string->number port)) state) state)) ((failed)(portlogger:set-failed db (string->number (cadr args))) 'failed))))) - (sqlite3:finalize! db) + (dbi:close db) result)) ;; (print (apply portlogger:main (cdr (argv)))) Index: sdb.scm ================================================================== --- sdb.scm +++ sdb.scm @@ -55,11 +55,11 @@ (define (sdb:string->id sdb str-cache str) (let ((id (hash-table-ref/default str-cache str #f))) (if (not id) (dbi:for-each-row (lambda (sid) - (set! id sid) + (set! id (vector-ref sid 0)) (hash-table-set! str-cache str id)) sdb "SELECT id FROM strs WHERE str=?;" str)) id)) @@ -66,11 +66,11 @@ (define (sdb:id->string sdb id-cache id) (let ((str (hash-table-ref/default id-cache id #f))) (if (not str) (dbi:for-each-row (lambda (istr) - (set! str istr) + (set! str (vector-ref istr 0)) (hash-table-set! id-cache id str)) sdb "SELECT str FROM strs WHERE id=?;" id)) str)) Index: tests.scm ================================================================== --- tests.scm +++ tests.scm @@ -13,10 +13,13 @@ ;; Tests ;;====================================================================== (use sqlite3 srfi-1 posix regex regex-case srfi-69 dot-locking tcp directory-utils) (import (prefix sqlite3 sqlite3:)) +(include "/nfs/site/disks/icf_fdk_cw_gwa002/srehman/fossil/dbi/dbi.scm") +(import (prefix dbi dbi:)) + (require-library stml) (declare (unit tests)) (declare (uses lock-queue)) (declare (uses db)) @@ -1329,13 +1332,13 @@ (equal? (test:get-state testdat) "KILLREQ")))) (define (test:tdb-get-rundat-count tdb) (if tdb (let ((res 0)) - (sqlite3:for-each-row + (dbi:for-each-row (lambda (count) - (set! res count)) + (set! res (vector-ref count 0))) tdb "SELECT count(id) FROM test_rundat;") res)) 0)