(define-module (gn data hits) #:use-module (json) #:use-module (ice-9 match) #:use-module (ice-9 format) #:use-module (ice-9 iconv) #:use-module (ice-9 receive) #:use-module (ice-9 string-fun) ;; #:use-module (gn db sparql) #:use-module (dbi dbi) #:use-module (gn db mysql) #:use-module (gn data group) #:use-module (gn util convert) #:use-module (web gn-uri) #:export ( get-precompute-hits get-precompute-hit set-precompute-hit-status! update-precompute! )) (define (get-precompute-hits db prev-id num) (dbi-query db (string-append "select Locus, DataId, ProbeSetId, ProbeSetFreezeId from ProbeSetXRef where DataId>" (int-to-string prev-id) " AND Locus_old is NULL ORDER BY DataId LIMIT " (format #f "~d" num))) (get-rows db '())) (define (get-precompute-hit db prev-id) (car (get-precompute-hits db prev-id 1))) (define (set-precompute-hit-status! db data-id-str status-str) "Set status of precompute record - typically from NULL to 'GEMMA-START' or 'NON-BXD'. On completion it is set to 'GEMMA-DONE'. This is a temporary measure to get precompute going. Note we are counting on automated MariaDB transactions to not compete." (dbi-query db (string-append "UPDATE ProbeSetXRef SET Locus_old=\"" status-str "\" WHERE DataId=" data-id-str)) (ensure db) ) ;; MariaDB [db_webqtl]> UPDATE ProbeSetXRef SET Locus_old=Locus,LRS_old=LRS,Locus="new",LRS=9.9,pValue=1.0,additive=1.0 WHERE ProbeSetFreezeId=1 AND DataId=2 AND Locus_old="GEMMA-START" ; (define (update-precompute! db data-id-str status-str locus lrs pvalue, additive) "Once precompute is run we can update the table moving old values and plugging in the new. " (dbi-query db (string-append "UPDATE ProbeSetXRef SET Locus_old=Locus,LRS_old=LRS,Locus=\"" locus "\",LRS=" lrs ",pValue=" pvalue ",additive=" additive " WHERE DataId=" data-id-str " AND Locus_old is \"GEMMA-START\"")) (ensure db) )