diff --git a/racket/collects/db/base.rkt b/racket/collects/db/base.rkt index b18af40c73..52e00b5a86 100644 --- a/racket/collects/db/base.rkt +++ b/racket/collects/db/base.rkt @@ -8,8 +8,8 @@ ;; ============================================================ -(require "private/generic/interfaces.rkt" - "private/generic/sql-data.rkt") +(require db/private/generic/interfaces + db/private/generic/sql-data) (provide (struct-out simple-result) (struct-out rows-result) @@ -77,7 +77,7 @@ ;; ============================================================ -(require "private/generic/functions.rkt") +(require db/private/generic/functions) (define fetch-size/c (or/c exact-positive-integer? +inf.0)) diff --git a/racket/collects/db/private/generic/connect-util.rkt b/racket/collects/db/private/generic/connect-util.rkt index 6b5390424c..f00dcec8d1 100644 --- a/racket/collects/db/private/generic/connect-util.rkt +++ b/racket/collects/db/private/generic/connect-util.rkt @@ -1,7 +1,7 @@ #lang racket/base (require racket/class - "interfaces.rkt" - "common.rkt") + db/private/generic/interfaces + db/private/generic/common) (provide kill-safe-connection virtual-connection connection-pool diff --git a/racket/collects/db/private/generic/dsn.rkt b/racket/collects/db/private/generic/dsn.rkt index 3bc341d071..dd10a673e3 100644 --- a/racket/collects/db/private/generic/dsn.rkt +++ b/racket/collects/db/private/generic/dsn.rkt @@ -16,13 +16,11 @@ sqlite3-data-source odbc-data-source) -(lazy-require - [db/sqlite3 (sqlite3-connect)]) - (lazy-require [db (postgresql-connect mysql-connect - odbc-connect)]) + odbc-connect + sqlite3-connect)]) #| DSN v0.1 format diff --git a/racket/collects/db/private/generic/place-client.rkt b/racket/collects/db/private/generic/place-client.rkt index 6de93b5d1f..239f95a599 100644 --- a/racket/collects/db/private/generic/place-client.rkt +++ b/racket/collects/db/private/generic/place-client.rkt @@ -7,9 +7,9 @@ racket/runtime-path (for-syntax (only-in racket/base quote)) ffi/unsafe/atomic - "interfaces.rkt" - "common.rkt" - "prepared.rkt") + db/private/generic/interfaces + db/private/generic/common + db/private/generic/prepared) (provide place-connect place-proxy-connection%) diff --git a/racket/collects/db/private/generic/place-server.rkt b/racket/collects/db/private/generic/place-server.rkt index 6b1a249e46..2a7f5b919d 100644 --- a/racket/collects/db/private/generic/place-server.rkt +++ b/racket/collects/db/private/generic/place-server.rkt @@ -5,8 +5,8 @@ racket/place racket/serialize racket/lazy-require - "interfaces.rkt" - "prepared.rkt") + db/private/generic/interfaces + db/private/generic/prepared) (provide connection-server) (define (pchan-put chan datum) diff --git a/racket/collects/db/private/sqlite3/main.rkt b/racket/collects/db/private/sqlite3/main.rkt index cfa65b7628..0d3f677f75 100644 --- a/racket/collects/db/private/sqlite3/main.rkt +++ b/racket/collects/db/private/sqlite3/main.rkt @@ -1,7 +1,6 @@ #lang racket/base (require racket/class ffi/file - "../generic/place-client.rkt" "connection.rkt" "dbsystem.rkt" "ffi.rkt") @@ -12,48 +11,38 @@ #:mode [mode 'read/write] #:busy-retry-delay [busy-retry-delay 0.1] #:busy-retry-limit [busy-retry-limit 10] - #:debug? [debug? #f] - #:use-place [use-place #f]) - (let ([path - (case path - ((memory temporary) path) - (else - (let ([path (cleanse-path (path->complete-path path))]) - (security-guard-check-file 'sqlite3-connect - path - (case mode - ((read-only) '(read)) - (else '(read write)))) - path)))]) - (cond [use-place - (place-connect (list 'sqlite3 path mode busy-retry-delay busy-retry-limit) - sqlite-place-proxy%)] - [else - (let ([path-bytes - (case path - ((memory) #":memory:") - ((temporary) #"") - (else (path->bytes path)))]) - (let-values ([(db open-status) - (sqlite3_open_v2 path-bytes - (case mode - ((read-only) SQLITE_OPEN_READONLY) - ((read/write) SQLITE_OPEN_READWRITE) - ((create) - (+ SQLITE_OPEN_READWRITE SQLITE_OPEN_CREATE))))]) - (handle-status* 'sqlite3-connect open-status db) - (let ([c - (new connection% - (db db) - (busy-retry-limit busy-retry-limit) - (busy-retry-delay busy-retry-delay))]) - (when debug? (send c debug #t)) - c)))]))) - -(define sqlite-place-proxy% - (class place-proxy-connection% - (super-new) - (define/override (get-dbsystem) dbsystem))) + #:debug? [debug? #f]) + (let* ([path + (case path + ((memory temporary) path) + (else + (let ([path (cleanse-path (path->complete-path path))]) + (security-guard-check-file 'sqlite3-connect + path + (case mode + ((read-only) '(read)) + (else '(read write)))) + path)))] + [path-bytes + (case path + ((memory) #":memory:") + ((temporary) #"") + (else (path->bytes path)))]) + (let-values ([(db open-status) + (sqlite3_open_v2 path-bytes + (case mode + ((read-only) SQLITE_OPEN_READONLY) + ((read/write) SQLITE_OPEN_READWRITE) + ((create) + (+ SQLITE_OPEN_READWRITE SQLITE_OPEN_CREATE))))]) + (handle-status* 'sqlite3-connect open-status db) + (let ([c + (new connection% + (db db) + (busy-retry-limit busy-retry-limit) + (busy-retry-delay busy-retry-delay))]) + (when debug? (send c debug #t)) + c)))) (define (sqlite3-available?) (and sqlite-lib #t)) diff --git a/racket/collects/db/private/sqlite3/place.rkt b/racket/collects/db/private/sqlite3/place.rkt new file mode 100644 index 0000000000..1ebeb7af5e --- /dev/null +++ b/racket/collects/db/private/sqlite3/place.rkt @@ -0,0 +1,32 @@ +#lang racket/base +(require racket/contract/base + racket/class + db/base + db/private/generic/place-client + (rename-in db/private/sqlite3/main + [sqlite3-connect pre:sqlite3-connect]) + db/private/sqlite3/dbsystem) + +(define (sqlite3-connect #:database path + #:mode [mode 'read/write] + #:busy-retry-delay [busy-retry-delay 0.1] + #:busy-retry-limit [busy-retry-limit 10] + #:debug? [debug? #f] + #:use-place [use-place #f]) + (cond [use-place + (place-connect (list 'sqlite3 path mode busy-retry-delay busy-retry-limit) + sqlite-place-proxy%)] + [else + (pre:sqlite3-connect #:database path + #:mode mode + #:busy-retry-delay busy-retry-delay + #:busy-retry-limit busy-retry-limit + #:debug? debug?)])) + +(define sqlite-place-proxy% + (class place-proxy-connection% + (super-new) + (define/override (get-dbsystem) dbsystem))) + +(provide sqlite3-connect + sqlite3-available?) diff --git a/racket/collects/db/sqlite3.rkt b/racket/collects/db/sqlite3.rkt index b1029b29b4..4d40958e13 100644 --- a/racket/collects/db/sqlite3.rkt +++ b/racket/collects/db/sqlite3.rkt @@ -1,7 +1,7 @@ #lang racket/base (require racket/contract/base - "base.rkt" - "private/sqlite3/main.rkt") + db/base + db/private/sqlite3/place) ;; FIXME: Contracts duplicated at main.rkt (provide/contract