diff --git a/extra/db/postgresql/postgresql.factor b/extra/db/postgresql/postgresql.factor index 0401913a8d..fc3b08d9b9 100755 --- a/extra/db/postgresql/postgresql.factor +++ b/extra/db/postgresql/postgresql.factor @@ -197,26 +197,6 @@ M: postgresql-db ( class -- statement ) M: postgresql-db insert-tuple* ( tuple statement -- ) query-modify-tuple ; -M: postgresql-db ( class -- statement ) - [ - "update " 0% 0% - " set " 0% - dup remove-id - [ ", " 0% ] - [ dup column-name>> 0% " = " 0% bind% ] interleave - " where " 0% - find-primary-key - dup column-name>> 0% " = " 0% bind% - ] query-make ; - -M: postgresql-db ( class -- statement ) - [ - "delete from " 0% 0% - " where " 0% - find-primary-key - dup column-name>> 0% " = " 0% bind% - ] query-make ; - M: postgresql-db ( tuple class -- statement ) [ "select " 0% diff --git a/extra/db/queries/queries.factor b/extra/db/queries/queries.factor index d0b379ab76..79c1909c05 100644 --- a/extra/db/queries/queries.factor +++ b/extra/db/queries/queries.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2008 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors kernel namespaces sequences namespaces.lib db -db.tuples db.types ; +USING: accessors kernel math namespaces sequences random +math.bitfields.lib namespaces.lib db db.tuples db.types ; IN: db.queries : maybe-make-retryable ( statement -- statement ) @@ -17,3 +17,28 @@ IN: db.queries M: db begin-transaction ( -- ) "BEGIN" sql-command ; M: db commit-transaction ( -- ) "COMMIT" sql-command ; M: db rollback-transaction ( -- ) "ROLLBACK" sql-command ; + +: where-primary-key% ( specs -- ) + " where " 0% + find-primary-key dup column-name>> 0% " = " 0% bind% ; + +M: db ( class -- statement ) + [ + "update " 0% 0% + " set " 0% + dup remove-id + [ ", " 0% ] [ dup column-name>> 0% " = " 0% bind% ] interleave + where-primary-key% + ] query-make ; + +M: db ( specs table -- sql ) + [ + "delete from " 0% 0% + " where " 0% + find-primary-key + dup column-name>> 0% " = " 0% bind% + ] query-make ; + +M: db random-id-quot ( -- quot ) + [ 63 [ 2^ random ] keep 1 - set-bit ] ; + diff --git a/extra/db/sqlite/sqlite.factor b/extra/db/sqlite/sqlite.factor index 5ceff51325..b948fb1696 100755 --- a/extra/db/sqlite/sqlite.factor +++ b/extra/db/sqlite/sqlite.factor @@ -156,10 +156,6 @@ M: sqlite-db bind# ( spec obj -- ) M: sqlite-db bind% ( spec -- ) dup 1, column-name>> ":" prepend 0% ; -: where-primary-key% ( specs -- ) - " where " 0% - find-primary-key dup column-name>> 0% " = " 0% bind% ; - GENERIC: where ( specs obj -- ) : interval-comparison ( ? str -- str ) @@ -200,24 +196,6 @@ M: string where ( spec obj -- ) object-where ; 2dup slot-name>> swap get-slot-named where ] interleave drop ; -M: sqlite-db ( class -- statement ) - [ - "update " 0% - 0% - " set " 0% - dup remove-id - [ ", " 0% ] [ dup column-name>> 0% " = " 0% bind% ] interleave - where-primary-key% - ] query-make ; - -M: sqlite-db ( specs table -- sql ) - [ - "delete from " 0% 0% - " where " 0% - find-primary-key - dup column-name>> 0% " = " 0% bind% - ] query-make ; - M: sqlite-db ( tuple class -- statement ) [ "select " 0% @@ -230,9 +208,6 @@ M: sqlite-db ( tuple class -- statement ) dup empty? [ 2drop ] [ where-clause ] if ";" 0% ] query-make ; -M: sqlite-db random-id-quot ( -- quot ) - [ 64 [ 2^ random ] keep 1 - set-bit ] ; - M: sqlite-db persistent-table ( -- assoc ) H{ { +native-id+ { "integer primary key" "integer primary key" f } }