rename db symbol -> db-connection
parent
4329578b2f
commit
2c678e64dc
|
@ -1,20 +1,20 @@
|
|||
! Copyright (C) 2008 Doug Coleman.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: classes kernel help.markup help.syntax sequences
|
||||
alien assocs strings math multiline quotations ;
|
||||
alien assocs strings math multiline quotations db.private ;
|
||||
IN: db
|
||||
|
||||
HELP: db
|
||||
{ $description "The " { $snippet "db" } " class is the superclass of all other database classes. It stores a " { $snippet "handle" } " to the database as well as insert, update, and delete queries." } ;
|
||||
HELP: db-connection
|
||||
{ $description "The " { $snippet "db-connection" } " class is the superclass of all other database classes. It stores a " { $snippet "handle" } " to the database as well as insert, update, and delete queries. Stores the current database object as a dynamic variable." } ;
|
||||
|
||||
HELP: new-db
|
||||
{ $values { "class" class } { "obj" object } }
|
||||
HELP: new-db-connection
|
||||
{ $values { "class" class } { "obj" db-connection } }
|
||||
{ $description "Creates a new database object from a given class with caches for prepared statements. Does not actually connect to the database until " { $link db-open } " or " { $link with-db } " is called." }
|
||||
{ $notes "User-defined databases must call this constructor word instead of " { $link new } "." } ;
|
||||
|
||||
HELP: db-open
|
||||
{ $values { "db" db } { "db" db } }
|
||||
{ $description "Opens a database using the configuration data stored in a " { $link db } " tuple. The database object now references a database handle that must be cleaned up. Therefore, it is better to use the " { $link with-db } " combinator than calling this word directly." } ;
|
||||
{ $values { "db" "a database configuration object" } { "db-connection" db-connection } }
|
||||
{ $description "Opens a database using the configuration data stored in a " { $snippet "database configuration object" } "tuple. The database object now references a database handle that must be cleaned up. Therefore, it is better to use the " { $link with-db } " combinator than calling this word directly." } ;
|
||||
|
||||
HELP: db-close
|
||||
{ $values { "handle" alien } }
|
||||
|
@ -141,13 +141,13 @@ HELP: rollback-transaction
|
|||
HELP: sql-command
|
||||
{ $values
|
||||
{ "sql" string } }
|
||||
{ $description "Executes a SQL string using the databse in the " { $link db } " symbol." } ;
|
||||
{ $description "Executes a SQL string using the databse in the " { $link db-connection } " symbol." } ;
|
||||
|
||||
HELP: sql-query
|
||||
{ $values
|
||||
{ "sql" string }
|
||||
{ "rows" "an array of arrays of strings" } }
|
||||
{ $description "Runs a SQL query of raw text in the database in the " { $link db } " symbol. Each row is returned as an array of strings; no type-conversions are done on the resulting data." } ;
|
||||
{ $description "Runs a SQL query of raw text in the database in the " { $link db-connection } " symbol. Each row is returned as an array of strings; no type-conversions are done on the resulting data." } ;
|
||||
|
||||
{ sql-command sql-query } related-words
|
||||
|
||||
|
@ -167,8 +167,8 @@ HELP: sql-row-typed
|
|||
|
||||
HELP: with-db
|
||||
{ $values
|
||||
{ "db" db } { "quot" quotation } }
|
||||
{ $description "Calls the quotation with a database bound to the " { $link db } " symbol. See " { $link "db-custom-database-combinators" } " for help setting up database access." } ;
|
||||
{ "db" "a database configuration object" } { "quot" quotation } }
|
||||
{ $description "Calls the quotation with a database bound to the " { $link db-connection } " symbol. See " { $link "db-custom-database-combinators" } " for help setting up database access." } ;
|
||||
|
||||
HELP: with-transaction
|
||||
{ $values
|
||||
|
|
|
@ -5,8 +5,6 @@ namespaces sequences classes.tuple words strings
|
|||
tools.walker accessors combinators fry ;
|
||||
IN: db
|
||||
|
||||
SYMBOL: db
|
||||
|
||||
<PRIVATE
|
||||
|
||||
TUPLE: db-connection
|
||||
|
@ -23,13 +21,13 @@ TUPLE: db-connection
|
|||
|
||||
PRIVATE>
|
||||
|
||||
GENERIC: db-open ( db -- db )
|
||||
HOOK: db-close db ( handle -- )
|
||||
GENERIC: db-open ( db -- db-connection )
|
||||
HOOK: db-close db-connection ( handle -- )
|
||||
|
||||
: dispose-statements ( assoc -- ) values dispose-each ;
|
||||
|
||||
M: db-connection dispose ( db -- )
|
||||
dup db [
|
||||
M: db-connection dispose ( db-connection -- )
|
||||
dup db-connection [
|
||||
[ dispose-statements H{ } clone ] change-insert-statements
|
||||
[ dispose-statements H{ } clone ] change-update-statements
|
||||
[ dispose-statements H{ } clone ] change-delete-statements
|
||||
|
@ -69,8 +67,8 @@ TUPLE: prepared-statement < statement ;
|
|||
swap >>in-params
|
||||
swap >>sql ;
|
||||
|
||||
HOOK: <simple-statement> db ( string in out -- statement )
|
||||
HOOK: <prepared-statement> db ( string in out -- statement )
|
||||
HOOK: <simple-statement> db-connection ( string in out -- statement )
|
||||
HOOK: <prepared-statement> db-connection ( string in out -- statement )
|
||||
GENERIC: prepare-statement ( statement -- )
|
||||
GENERIC: bind-statement* ( statement -- )
|
||||
GENERIC: low-level-bind ( statement -- )
|
||||
|
@ -113,8 +111,8 @@ M: object execute-statement* ( statement type -- )
|
|||
accumulator [ query-each ] dip { } like ; inline
|
||||
|
||||
: with-db ( db quot -- )
|
||||
[ db-open db ] dip
|
||||
'[ db get [ drop @ ] with-disposal ] with-variable ; inline
|
||||
[ db-open db-connection ] dip
|
||||
'[ db-connection get [ drop @ ] with-disposal ] with-variable ; inline
|
||||
|
||||
! Words for working with raw SQL statements
|
||||
: default-query ( query -- result-set )
|
||||
|
@ -132,9 +130,9 @@ M: object execute-statement* ( statement type -- )
|
|||
! Transactions
|
||||
SYMBOL: in-transaction
|
||||
|
||||
HOOK: begin-transaction db ( -- )
|
||||
HOOK: commit-transaction db ( -- )
|
||||
HOOK: rollback-transaction db ( -- )
|
||||
HOOK: begin-transaction db-connection ( -- )
|
||||
HOOK: commit-transaction db-connection ( -- )
|
||||
HOOK: rollback-transaction db-connection ( -- )
|
||||
|
||||
M: db-connection begin-transaction ( -- ) "BEGIN" sql-command ;
|
||||
M: db-connection commit-transaction ( -- ) "COMMIT" sql-command ;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
! Copyright (C) 2008 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors kernel arrays namespaces sequences continuations
|
||||
io.pools db fry ;
|
||||
io.pools db fry db.private ;
|
||||
IN: db.pools
|
||||
|
||||
TUPLE: db-pool < pool db ;
|
||||
|
@ -17,4 +17,4 @@ M: db-pool make-connection ( pool -- )
|
|||
db>> db-open ;
|
||||
|
||||
: with-pooled-db ( pool quot -- )
|
||||
'[ db _ with-variable ] with-pooled-connection ; inline
|
||||
'[ db-connection _ with-variable ] with-pooled-connection ; inline
|
||||
|
|
|
@ -6,7 +6,7 @@ db.types tools.walker ascii splitting math.parser combinators
|
|||
libc shuffle calendar.format byte-arrays destructors prettyprint
|
||||
accessors strings serialize io.encodings.binary io.encodings.utf8
|
||||
alien.strings io.streams.byte-array summary present urls
|
||||
specialized-arrays.uint specialized-arrays.alien ;
|
||||
specialized-arrays.uint specialized-arrays.alien db.private ;
|
||||
IN: db.postgresql.lib
|
||||
|
||||
: postgresql-result-error-message ( res -- str/f )
|
||||
|
@ -24,7 +24,7 @@ IN: db.postgresql.lib
|
|||
"\n" split [ [ blank? ] trim ] map "\n" join ;
|
||||
|
||||
: postgresql-error-message ( -- str )
|
||||
db get handle>> (postgresql-error-message) ;
|
||||
db-connection get handle>> (postgresql-error-message) ;
|
||||
|
||||
: postgresql-error ( res -- res )
|
||||
dup [ postgresql-error-message throw ] unless ;
|
||||
|
@ -44,7 +44,7 @@ M: postgresql-result-null summary ( obj -- str )
|
|||
dup PQstatus zero? [ (postgresql-error-message) throw ] unless ;
|
||||
|
||||
: do-postgresql-statement ( statement -- res )
|
||||
db get handle>> swap sql>> PQexec dup postgresql-result-ok? [
|
||||
db-connection get handle>> swap sql>> PQexec dup postgresql-result-ok? [
|
||||
[ postgresql-result-error-message ] [ PQclear ] bi throw
|
||||
] unless ;
|
||||
|
||||
|
@ -99,7 +99,7 @@ M: postgresql-result-null summary ( obj -- str )
|
|||
|
||||
: do-postgresql-bound-statement ( statement -- res )
|
||||
[
|
||||
[ db get handle>> ] dip
|
||||
[ db-connection get handle>> ] dip
|
||||
{
|
||||
[ sql>> ]
|
||||
[ bind-params>> length ]
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
USING: kernel db.postgresql alien continuations io classes
|
||||
prettyprint sequences namespaces tools.test db
|
||||
prettyprint sequences namespaces tools.test db db.private
|
||||
db.tuples db.types unicode.case accessors system ;
|
||||
IN: db.postgresql.tests
|
||||
|
||||
|
@ -92,7 +92,3 @@ os windows? cpu x86.64? and [
|
|||
] with-db
|
||||
] unit-test
|
||||
] unless
|
||||
|
||||
|
||||
: with-dummy-db ( quot -- )
|
||||
[ T{ postgresql-db } db ] dip with-variable ;
|
||||
|
|
|
@ -38,8 +38,7 @@ M: postgresql-db db-open ( db -- db-connection )
|
|||
[ password>> ]
|
||||
} cleave connect-postgres <postgresql-db-connection> ;
|
||||
|
||||
M: postgresql-db-connection db-close ( handle -- )
|
||||
PQfinish ;
|
||||
M: postgresql-db-connection db-close ( handle -- ) PQfinish ;
|
||||
|
||||
M: postgresql-statement bind-statement* ( statement -- ) drop ;
|
||||
|
||||
|
@ -106,7 +105,7 @@ M: postgresql-result-set dispose ( result-set -- )
|
|||
|
||||
M: postgresql-statement prepare-statement ( statement -- )
|
||||
dup
|
||||
[ db get handle>> f ] dip
|
||||
[ db-connection get handle>> f ] dip
|
||||
[ sql>> ] [ in-params>> ] bi
|
||||
length f PQprepare postgresql-error
|
||||
>>handle drop ;
|
||||
|
|
|
@ -5,7 +5,8 @@ namespaces sequences db.sqlite.ffi db combinators
|
|||
continuations db.types calendar.format serialize
|
||||
io.streams.byte-array byte-arrays io.encodings.binary
|
||||
io.backend db.errors present urls io.encodings.utf8
|
||||
io.encodings.string accessors shuffle io prettyprint ;
|
||||
io.encodings.string accessors shuffle io prettyprint
|
||||
db.private ;
|
||||
IN: db.sqlite.lib
|
||||
|
||||
ERROR: sqlite-error < db-error n string ;
|
||||
|
@ -16,7 +17,7 @@ ERROR: sqlite-sql-error < sql-error n string ;
|
|||
|
||||
: sqlite-statement-error ( -- * )
|
||||
SQLITE_ERROR
|
||||
db get handle>> sqlite3_errmsg sqlite-sql-error ;
|
||||
db-connection get handle>> sqlite3_errmsg sqlite-sql-error ;
|
||||
|
||||
: sqlite-check-result ( n -- )
|
||||
{
|
||||
|
|
|
@ -42,7 +42,7 @@ M: sqlite-db-connection <prepared-statement> ( str in out -- obj )
|
|||
|
||||
: sqlite-maybe-prepare ( statement -- statement )
|
||||
dup handle>> [
|
||||
db get handle>> over sql>> sqlite-prepare
|
||||
db-connection get handle>> over sql>> sqlite-prepare
|
||||
>>handle
|
||||
] unless ;
|
||||
|
||||
|
@ -99,7 +99,7 @@ M: sqlite-statement bind-tuple ( tuple statement -- )
|
|||
ERROR: sqlite-last-id-fail ;
|
||||
|
||||
: last-insert-id ( -- id )
|
||||
db get handle>> sqlite3_last_insert_rowid
|
||||
db-connection get handle>> sqlite3_last_insert_rowid
|
||||
dup zero? [ sqlite-last-id-fail ] when ;
|
||||
|
||||
M: sqlite-db-connection insert-tuple-set-key ( tuple statement -- )
|
||||
|
|
|
@ -4,7 +4,7 @@ USING: io.files io.files.temp kernel tools.test db db.tuples classes
|
|||
db.types continuations namespaces math math.ranges
|
||||
prettyprint calendar sequences db.sqlite math.intervals
|
||||
db.postgresql accessors random math.bitwise system
|
||||
math.ranges strings urls fry db.tuples.private ;
|
||||
math.ranges strings urls fry db.tuples.private db.private ;
|
||||
IN: db.tuples.tests
|
||||
|
||||
: sqlite-db ( -- sqlite-db )
|
||||
|
@ -33,10 +33,10 @@ IN: db.tuples.tests
|
|||
|
||||
! These words leak resources, but are useful for interactivel testing
|
||||
: sqlite-test-db ( -- )
|
||||
sqlite-db db-open db set ;
|
||||
sqlite-db db-open db-connection set ;
|
||||
|
||||
: postgresql-test-db ( -- )
|
||||
postgresql-db db-open db set ;
|
||||
postgresql-db db-open db-connection set ;
|
||||
|
||||
TUPLE: person the-id the-name the-number the-real
|
||||
ts date time blob factor-blob url ;
|
||||
|
|
|
@ -3,20 +3,20 @@
|
|||
USING: arrays assocs classes db kernel namespaces
|
||||
classes.tuple words sequences slots math accessors
|
||||
math.parser io prettyprint db.types continuations
|
||||
destructors mirrors sets db.types ;
|
||||
destructors mirrors sets db.types db.private ;
|
||||
IN: db.tuples
|
||||
|
||||
HOOK: create-sql-statement db ( class -- object )
|
||||
HOOK: drop-sql-statement db ( class -- object )
|
||||
HOOK: create-sql-statement db-connection ( class -- object )
|
||||
HOOK: drop-sql-statement db-connection ( class -- object )
|
||||
|
||||
HOOK: <insert-db-assigned-statement> db ( class -- object )
|
||||
HOOK: <insert-user-assigned-statement> db ( class -- object )
|
||||
HOOK: <update-tuple-statement> db ( class -- object )
|
||||
HOOK: <delete-tuples-statement> db ( tuple class -- object )
|
||||
HOOK: <select-by-slots-statement> db ( tuple class -- tuple )
|
||||
HOOK: <count-statement> db ( query -- statement )
|
||||
HOOK: query>statement db ( query -- statement )
|
||||
HOOK: insert-tuple-set-key db ( tuple statement -- )
|
||||
HOOK: <insert-db-assigned-statement> db-connection ( class -- object )
|
||||
HOOK: <insert-user-assigned-statement> db-connection ( class -- object )
|
||||
HOOK: <update-tuple-statement> db-connection ( class -- object )
|
||||
HOOK: <delete-tuples-statement> db-connection ( tuple class -- object )
|
||||
HOOK: <select-by-slots-statement> db-connection ( tuple class -- tuple )
|
||||
HOOK: <count-statement> db-connection ( query -- statement )
|
||||
HOOK: query>statement db-connection ( query -- statement )
|
||||
HOOK: insert-tuple-set-key db-connection ( tuple statement -- )
|
||||
|
||||
<PRIVATE
|
||||
|
||||
|
@ -52,12 +52,14 @@ GENERIC: eval-generator ( singleton -- object )
|
|||
|
||||
: insert-db-assigned-statement ( tuple -- )
|
||||
dup class
|
||||
db get insert-statements>> [ <insert-db-assigned-statement> ] cache
|
||||
db-connection get insert-statements>>
|
||||
[ <insert-db-assigned-statement> ] cache
|
||||
[ bind-tuple ] 2keep insert-tuple-set-key ;
|
||||
|
||||
: insert-user-assigned-statement ( tuple -- )
|
||||
dup class
|
||||
db get insert-statements>> [ <insert-user-assigned-statement> ] cache
|
||||
db-connection get insert-statements>>
|
||||
[ <insert-user-assigned-statement> ] cache
|
||||
[ bind-tuple ] keep execute-statement ;
|
||||
|
||||
: do-select ( exemplar-tuple statement -- tuples )
|
||||
|
@ -117,7 +119,7 @@ M: tuple >query <query> swap >>tuple ;
|
|||
|
||||
: update-tuple ( tuple -- )
|
||||
dup class
|
||||
db get update-statements>> [ <update-tuple-statement> ] cache
|
||||
db-connection get update-statements>> [ <update-tuple-statement> ] cache
|
||||
[ bind-tuple ] keep execute-statement ;
|
||||
|
||||
: delete-tuples ( tuple -- )
|
||||
|
|
|
@ -4,11 +4,11 @@ USING: arrays assocs db kernel math math.parser
|
|||
sequences continuations sequences.deep prettyprint
|
||||
words namespaces slots slots.private classes mirrors
|
||||
classes.tuple combinators calendar.format symbols
|
||||
classes.singleton accessors quotations random ;
|
||||
classes.singleton accessors quotations random db.private ;
|
||||
IN: db.types
|
||||
|
||||
HOOK: persistent-table db ( -- hash )
|
||||
HOOK: compound db ( string obj -- hash )
|
||||
HOOK: persistent-table db-connection ( -- hash )
|
||||
HOOK: compound db-connection ( string obj -- hash )
|
||||
|
||||
TUPLE: sql-spec class slot-name column-name type primary-key modifiers ;
|
||||
|
||||
|
@ -158,8 +158,8 @@ ERROR: no-sql-type type ;
|
|||
modifiers>> [ lookup-modifier ] map " " join
|
||||
[ "" ] [ " " prepend ] if-empty ;
|
||||
|
||||
HOOK: bind% db ( spec -- )
|
||||
HOOK: bind# db ( spec obj -- )
|
||||
HOOK: bind% db-connection ( spec -- )
|
||||
HOOK: bind# db-connection ( spec obj -- )
|
||||
|
||||
ERROR: no-column column ;
|
||||
|
||||
|
|
Loading…
Reference in New Issue