From ee45c8ff20d357bb9fd4d2e15bcf88f3210b144c Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 11 Apr 2009 20:21:04 -0500 Subject: [PATCH] more work on db2 --- extra/db2/connections/connections.factor | 12 +++++++++--- extra/db2/pools/pools-tests.factor | 9 +++++---- extra/db2/pools/pools.factor | 2 +- extra/db2/sqlite/sqlite.factor | 10 +++++++++- extra/db2/transactions/transactions.factor | 4 ++++ 5 files changed, 28 insertions(+), 9 deletions(-) diff --git a/extra/db2/connections/connections.factor b/extra/db2/connections/connections.factor index c622f9a4b4..faea6406fe 100644 --- a/extra/db2/connections/connections.factor +++ b/extra/db2/connections/connections.factor @@ -5,13 +5,19 @@ IN: db2.connections TUPLE: db-connection handle ; +: new-db-connection ( handle class -- db-connection ) + new + swap >>handle ; inline + GENERIC: db-open ( db -- db-connection ) -HOOK: db-close db-connection ( handle -- ) + +GENERIC: db-close ( handle -- ) + HOOK: parse-db-error db-connection ( error -- error' ) M: db-connection dispose ( db-connection -- ) - [ db-close f ] change-handle drop ; + [ db-close ] [ f >>handle drop ] bi ; : with-db ( db quot -- ) - [ db-open db-connection dup ] dip + [ db-open db-connection over ] dip '[ _ [ drop @ ] with-disposal ] with-variable ; inline diff --git a/extra/db2/pools/pools-tests.factor b/extra/db2/pools/pools-tests.factor index 7ff2a33d92..d61b745b03 100644 --- a/extra/db2/pools/pools-tests.factor +++ b/extra/db2/pools/pools-tests.factor @@ -1,6 +1,8 @@ -IN: db.pools.tests -USING: db.pools tools.test continuations io.files io.files.temp -io.directories namespaces accessors kernel math destructors ; +USING: accessors continuations db2.pools db2.sqlite +db2.sqlite.connections destructors io.directories io.files +io.files.temp kernel math namespaces tools.test +db2.sqlite.connections ; +IN: db2.pools.tests \ must-infer @@ -9,7 +11,6 @@ io.directories namespaces accessors kernel math destructors ; { 1 0 } [ [ ] with-pooled-db ] must-infer-as ! Test behavior after image save/load -USE: db.sqlite [ "pool-test.db" temp-file delete-file ] ignore-errors diff --git a/extra/db2/pools/pools.factor b/extra/db2/pools/pools.factor index b22dbde398..2b1aa2f0bf 100644 --- a/extra/db2/pools/pools.factor +++ b/extra/db2/pools/pools.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: accessors db2.connections fry io.pools kernel namespaces ; -IN: db.pools +IN: db2.pools TUPLE: db-pool < pool db ; diff --git a/extra/db2/sqlite/sqlite.factor b/extra/db2/sqlite/sqlite.factor index edb74dd06f..82337ae30b 100644 --- a/extra/db2/sqlite/sqlite.factor +++ b/extra/db2/sqlite/sqlite.factor @@ -1,4 +1,12 @@ ! Copyright (C) 2009 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: ; +USING: constructors db2.connections ; IN: db2.sqlite + +TUPLE: sqlite-db path ; +CONSTRUCTOR: sqlite-db ( path -- sqlite-db ) ; + +TUPLE: sqlite-db-connection < db-connection ; + +: ( handle -- db-connection ) + sqlite-db-connection new-db-connection ; diff --git a/extra/db2/transactions/transactions.factor b/extra/db2/transactions/transactions.factor index eb8c48e336..fd0e6ade74 100644 --- a/extra/db2/transactions/transactions.factor +++ b/extra/db2/transactions/transactions.factor @@ -6,11 +6,15 @@ IN: db2.transactions SYMBOL: in-transaction 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 ; + M: db-connection rollback-transaction ( -- ) "ROLLBACK" sql-command ; : in-transaction? ( -- ? ) in-transaction get ;