aboutsummaryrefslogtreecommitdiff
path: root/gn/db
diff options
context:
space:
mode:
Diffstat (limited to 'gn/db')
-rw-r--r--gn/db/mysql.scm78
1 files changed, 69 insertions, 9 deletions
diff --git a/gn/db/mysql.scm b/gn/db/mysql.scm
index f6513af..4c6b35e 100644
--- a/gn/db/mysql.scm
+++ b/gn/db/mysql.scm
@@ -13,13 +13,50 @@
#:use-module (dbi dbi)
#:export (
+ ;; DB <- don't export
+ call-with-db
+ db-open
db-check
+ db-check2
+ db-query
+ db-get-row
+ get-row
db-display-rows
db-get-rows
db-get-rows-apply
+ get-rows-apply
))
-(define (db-check db)
+(define DB
+ (begin
+ (display "===> OPENING DB")
+ (newline)
+ (dbi-open "mysql" "webqtlout:webqtlout:db_webqtl:tcp:127.0.0.1:3306")
+ ))
+
+(define (db-open)
+ DB)
+
+(define (db-open2)
+ (begin
+ (display "===> OPENING DB")
+ (newline)
+ (dbi-open "mysql" "webqtlout:webqtlout:db_webqtl:tcp:127.0.0.1:3306")
+ ))
+
+(define (call-with-db thunk)
+ (thunk (db-open2)))
+
+(define (db-check)
+ "Use DBI-style handle to report an error. On error the program will stop."
+ (match (dbi-get_status DB)
+ ((stat . msg) (if (= stat 0)
+ #t
+ (begin
+ (display msg)
+ (newline)
+ (assert stat))))))
+(define (db-check2 db)
"Use DBI-style handle to report an error. On error the program will stop."
(match (dbi-get_status db)
((stat . msg) (if (= stat 0)
@@ -29,16 +66,25 @@
(newline)
(assert stat))))))
-(define (db-display-rows db)
+(define (db-query str)
+ (dbi-query (pk DB) str))
+
+(define (db-get-row)
+ (dbi-get_row DB))
+
+(define (get-row db)
+ (dbi-get_row db))
+
+(define (db-display-rows)
(let [(row (dbi-get_row db))]
(if row
(begin
(display row)
- (get-rows db)
+ (get-rows DB)
)
#t)))
-(define (db-get-rows db list)
+(define (db-get-rows list)
"After running dbi-query we can fetch all rows and return them as a list of records, which are assoc list:
(dbi-query db \"SELECT StrainId,Strain.Name FROM Strain, StrainXRef WHERE StrainXRef.StrainId = Strain.Id AND StrainXRef.InbredSetId = 1 ORDER BY StrainId;\")
@@ -47,18 +93,32 @@
(((StrainId . 4) (Name . BXD1)) ((StrainId . 5) (Name . BXD2))...
"
- (let [(row (dbi-get_row db))]
+ (let [(row (dbi-get_row DB))]
(if row
- (db-get-rows db (append list `(,row)))
+ (db-get-rows (append list `(,row)))
list)))
-(define (db-get-rows-apply db func list)
+(define (db-get-rows-apply func list)
"Similar to db-get-rows with a function that gets applied on every record, e.g.
(define ids (db-get-rows-apply db (lambda (r) `(,(assoc-ref r \"StrainId\") . ,(assoc-ref r \"Name\"))) '()))
"
- (let [(row (dbi-get_row db))]
+ (let [(row (dbi-get_row DB))]
(if row
- (db-get-rows-apply db func (append list `(,(func row))))
+ (db-get-rows-apply func (append list `(,(func row))))
list)))
+
+(define (get-rows-apply db func lst)
+ "Similar to db-get-rows with a function that gets applied on every record, e.g.
+
+ (define ids (db-get-rows-apply db (lambda (r) `(,(assoc-ref r \"StrainId\") . ,(assoc-ref r \"Name\"))) '()))
+
+"
+ (let [(row (dbi-get_row db))]
+ (begin
+ (display row)
+ (if row
+ (get-rows-apply db func (append lst `(,(func row))))
+ lst)))
+)