aboutsummaryrefslogtreecommitdiff
path: root/scm/verbop.scm
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2011-06-14 14:20:39 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2011-06-14 14:20:39 +0300
commit8c1de36d1f8b27fb946dac15e725c93ec57c1538 (patch)
tree17babe745cf794a7485fc2bc0b9c9e0c9120d893 /scm/verbop.scm
parentce29f168ed52f08228b99a789785271a4a3c9b0e (diff)
downloadellinika-8c1de36d1f8b27fb946dac15e725c93ec57c1538.tar.gz
ellinika-8c1de36d1f8b27fb946dac15e725c93ec57c1538.tar.bz2
Improve SQL interface.
* src/ellinika/sql.scm (ellinika:sql-verbose) (ellinika:sql-dry-run,ellinika:sql-conn): New public vars. (ellinika:format-sql-query): New function. (ellinika:sql-query): Rewrite. * scm/verbop.scm: Use (ellinika sql). * src/ellinika/conjugator.scm: Likewise. * src/ellinika/test-conjugation.scm: Likewise. * data/irregular-verbs.xml: Update. * src/ellinika/tests/conj/apomenv.scm: New file.
Diffstat (limited to 'scm/verbop.scm')
-rw-r--r--scm/verbop.scm149
1 files changed, 61 insertions, 88 deletions
diff --git a/scm/verbop.scm b/scm/verbop.scm
index ff30892..5192b87 100644
--- a/scm/verbop.scm
+++ b/scm/verbop.scm
@@ -20,14 +20,12 @@
(use-modules (srfi srfi-1)
(xmltools xmltrans)
(ellinika elmorph)
- (gamma sql)
+ (ellinika sql)
(ellinika tenses)
(ice-9 getopt-long))
(define cleanup-option #f)
(define force-option #f)
-(define verbose-option #f)
-(define dry-run-option #f)
(define debug-level 0)
(define input-files '())
(define flect-ident 0)
@@ -38,8 +36,6 @@
(define class-list '()) ; List of defined verb classes.
-(define connection #f) ; SQL connection
-
(define sysconf-dir "=SYSCONFDIR=")
(define config-file-name "ellinika.conf")
@@ -62,31 +58,13 @@
rest)
(newline))))
-(define (sql-val val)
- ;; FIXME: quote
- (if (not val)
- "NULL"
- (string-append "\"" val "\"")))
-
-(define (run-query . rest)
- (debug 100 rest)
- (let ((q (apply format (cons #f rest))))
- (if verbose-option
- (format #t "QUERY: ~A\n" q))
- (cond
- (connection
- (let ((res (sql-query connection q)))
- (if verbose-option
- (format #t "RESULT: ~A\n" res))
- res))
- (else
- #f))))
-
(define (query-number q)
- (let ((res (run-query q)))
- (if (null? res)
- #f
- (string->number (caar res)))))
+ (if ellinika:sql-dry-run
+ 0
+ (let ((res (ellinika:sql-query q)))
+ (if (null? res)
+ #f
+ (string->number (caar res))))))
(define (check-parent elt . rest)
(call-with-current-continuation
@@ -179,9 +157,6 @@
(else
(list-ref verbdef (verbdef:index what)))))
-(define (verb-get-sql what)
- (sql-val (verb-get what)))
-
(define (verb-set what val)
(if (null? verbdef)
(verb-init))
@@ -229,23 +204,25 @@
(return #t))))
(define (insert-individual-verb voice mood tense ident)
- (run-query "INSERT INTO individual_verb (verb,voice,mood,tense,ident) \
-VALUES (~A,~A,~A,~A,~A);~%"
- (verb-get-sql #:verb)
- (sql-val voice)
- (sql-val mood)
- (sql-val tense)
- (number->string ident)))
+ (ellinika:sql-query
+ "INSERT INTO individual_verb (verb,voice,mood,tense,ident) \
+VALUES (~Q,~Q,~Q,~Q,~Q)"
+ (verb-get #:verb)
+ voice
+ mood
+ tense
+ ident))
(define (flush-mood mood vstr)
(if (eq? (car mood) #:root)
(let ((val (cdr mood)))
- (run-query "INSERT INTO irregular_root (verb,voice,thema,root) \
-VALUES (~A,~A,~A,~A)"
- (verb-get-sql #:verb)
- (sql-val vstr)
- (sql-val (car val))
- (sql-val (cdr val))))
+ (ellinika:sql-query
+ "INSERT INTO irregular_root (verb,voice,thema,root) \
+VALUES (~Q,~Q,~Q,~Q)"
+ (verb-get #:verb)
+ vstr
+ (car val)
+ (cdr val)))
(let ((mood-str (car mood)))
(let ((lst (cdr mood)))
(cond
@@ -268,32 +245,30 @@ VALUES (~A,~A,~A,~A)"
(else
(let ((num (next-flect-ident))
(l (cdr p)))
- (run-query
- "INSERT INTO verbflect VALUES (~A,~A,~A,~A,~A,~A,~A)"
+ (ellinika:sql-query
+ "INSERT INTO verbflect VALUES (~Q,~Q,~Q,~Q,~Q,~Q,~Q)"
num
- (sql-val (list-ref l 0))
- (sql-val (list-ref l 1))
- (sql-val (list-ref l 2))
- (sql-val (list-ref l 3))
- (sql-val (list-ref l 4))
- (sql-val (list-ref l 5)))
+ (list-ref l 0)
+ (list-ref l 1)
+ (list-ref l 2)
+ (list-ref l 3)
+ (list-ref l 4)
+ (list-ref l 5))
(insert-individual-verb vstr mood-str tense num) )))
(for-each
(lambda (prop)
; (format #t "PROP ~A~%" prop)
(let ((key (car prop)))
- (cond
- ((string=? key "default"))
- (else
- (run-query
- "INSERT INTO verbtense VALUES (~A,~A,~A,~A,~A,~A)"
- (verb-get-sql #:verb)
- (sql-val vstr)
- (sql-val mood-str)
- (sql-val tense)
- (sql-val (car prop))
- (sql-val (cdr prop)))))))
+ (if (not (string=? key "default"))
+ (ellinika:sql-query
+ "INSERT INTO verbtense VALUES (~Q,~Q,~Q,~Q,~Q,~Q)"
+ (verb-get #:verb)
+ vstr
+ mood-str
+ tense
+ (car prop)
+ (cdr prop)))))
(list-tail p 7))))
lst)))))))
@@ -371,9 +346,10 @@ VALUES (~A,~A,~A,~A)"
;;
(case (verb-get #:action)
((insert)
- (run-query "INSERT INTO verbclass (verb,conj) VALUES (~A,~A)"
- (verb-get-sql #:verb)
- (verb-get-sql #:class))
+ (ellinika:sql-query
+ "INSERT INTO verbclass (verb,conj) VALUES (~Q,~Q)"
+ (verb-get #:verb)
+ (verb-get #:class))
(flush-voice "act"
(preprocess-voice
(verb-get #:act)
@@ -790,10 +766,11 @@ Informational options:
((preserve)
(set! preserve-option #t))
((debug)
- (set! debug-level (string->number (cdr x))))
+ (set! debug-level (string->number (cdr x)))
+ (set! ellinika:sql-verbose #t))
((dry-run)
- (set! verbose-option #t)
- (set! dry-run-option #t))
+ (set! ellinika:sql-dry-run #t)
+ (set! ellinika:sql-verbose #t))
((help)
(usage)
(exit 0))))
@@ -806,31 +783,27 @@ Informational options:
(display "Input files not specified\n" (current-error-port))
(exit 1)))
-(cond
- ((not dry-run-option)
- (set! connection (sql-open-connection ellinika-sql-connection))
- (if (not connection)
- (begin
- (display "Cannot connect to the database\n" (current-error-port))
- (exit 1)))
- (run-query "SET NAMES utf8")
- (set! flect-ident (query-number "SELECT MAX(ident) FROM verbflect"))))
+(if (not (ellinika:sql-connect ellinika-sql-connection))
+ (begin
+ (display "Cannot connect to the database\n" (current-error-port))
+ (exit 1)))
+(set! flect-ident (query-number "SELECT MAX(ident) FROM verbflect"))
(cond
(cleanup-option
- (run-query "DELETE FROM verbflect where ident > 99")
- (run-query "DELETE FROM verbclass")
- (run-query "DELETE FROM verbtense")
- (run-query "DELETE FROM irregular_root")
- (run-query "DELETE FROM individual_verb")))
+ (ellinika:sql-query "DELETE FROM verbflect where ident > 99")
+ (ellinika:sql-query "DELETE FROM verbclass")
+ (ellinika:sql-query "DELETE FROM verbtense")
+ (ellinika:sql-query "DELETE FROM irregular_root")
+ (ellinika:sql-query "DELETE FROM individual_verb")))
(set! class-list
(cons "I"
- (if dry-run-option
+ (if ellinika:sql-dry-run
(list "A" "B1" "B2")
(map
car
- (run-query
+ (ellinika:sql-query
"SELECT DISTINCT conj FROM conjugation ORDER BY 1")))))
@@ -840,8 +813,8 @@ Informational options:
(exit 1)))
input-files)
-(if connection
- (sql-close-connection connection))
+(ellinika:sql-disconnect)
+

Return to:

Send suggestions and report system problems to the System administrator.