;;;; sqlite3-test.scm (use testbase testbase-output-human) (use sqlite3) ;;; #| TestBase |# ;;; ;; SQL Source (define *mak-source-table-sql* (MULTILINE-STRING "CREATE TABLE IF NOT EXISTS source (" " oid INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL," " dir VARCHAR," " fil VARCHAR NOT NULL," " ext VARCHAR," " cnt INTEGER," " foo INTEGER," " UNIQUE (dir, fil, ext) ON CONFLICT ROLLBACK" ");")) (define *ins-source-entry-sql* (MULTILINE-STRING "INSERT INTO source (oid, dir, fil, ext, cnt, foo)" " VALUES (NULL, ?001, ?002, ?003, ?004, ?005);")) (define *sel-maximum-dir-length-sql* (MULTILINE-STRING "SELECT Max(length(source.dir)) FROM source;")) (define *db-name* "sqlit3test.db") ;;; ;; (define-test string-queries-test "String Queries" (initial (define dbpn "sqlite3test-strq.db") (define db) ) (setup (delete-file* *db-name*)) #; ; Leave so "sqlite3" command can be used (teardown (delete-file* *db-name*)) (expect-set! db (sqlite3:open *db-name*)) (expect-success (sqlite3:exec db *mak-source-table-sql*)) (expect-success (sqlite3:exec db *ins-source-entry-sql* "directory1" "file1" "ext1" 1 )) (expect-success (sqlite3:exec db *ins-source-entry-sql* "directory10" "file10" "ext10" 2 )) (expect-success (sqlite3:exec db *ins-source-entry-sql* "directory1000" "file1000" "ext1000" 3 )) (expect-success (sqlite3:exec db *ins-source-entry-sql* "" "" "" 4 )) (expect-eqv 13 (sqlite3:first-result db *sel-maximum-dir-length-sql*)) (expect-success (sqlite3:finalize! db)) ) ;; (define-test statement-queries-test "Statement Queries" (initial (define dbpn "sqlite3test-stmtq.db") (define db) (define mak-source-table) (define ins-source-entry) (define sel-maximum-dir-length) ) (setup (delete-file* dbpn)) #; ; Leave so "sqlite3" command can be used (teardown (delete-file* dbpn)) (expect-set! db (sqlite3:open dbpn)) (expect-set! mak-source-table (sqlite3:prepare db *mak-source-table-sql*)) (expect-success (sqlite3:exec mak-source-table)) (expect-set! ins-source-entry (sqlite3:prepare db *ins-source-entry-sql*)) (expect-eqv 5 (sqlite3:bind-parameter-count ins-source-entry)) (expect-set! sel-maximum-dir-length (sqlite3:prepare db *sel-maximum-dir-length-sql*)) (expect-eqv 0 (sqlite3:bind-parameter-count sel-maximum-dir-length)) ;# (expect-failure (warn "This shouldn't occur: should be an arity error") (sqlite3:exec ins-source-entry "directory1" "file1" "ext1" 11)) (expect-success (sqlite3:exec ins-source-entry "directory1" "file1" "ext1" 11 )) (expect-success (sqlite3:exec ins-source-entry "directory10" "file10" "ext10" 12 )) (expect-success (sqlite3:exec ins-source-entry "directory1000" "file1000" "ext1000" 13 )) (expect-success (sqlite3:exec ins-source-entry "" "" "" 14 )) (expect-eqv 13 (sqlite3:first-result sel-maximum-dir-length)) (expect-success (sqlite3:finalize! mak-source-table)) (expect-success (sqlite3:finalize! ins-source-entry)) (expect-success (sqlite3:finalize! sel-maximum-dir-length)) (expect-success (sqlite3:finalize! db)) ) ;;; (test::for-each (cut test::styler-set! <> test::output-style-human)) (run-test "Test sqlite3") (test::forget!)