]> gitweb.factorcode.org Git - factor.git/commitdiff
fix advanced tuple selects
authorDoug Coleman <doug.coleman@gmail.com>
Sat, 31 May 2008 03:47:38 +0000 (22:47 -0500)
committerDoug Coleman <doug.coleman@gmail.com>
Sat, 31 May 2008 03:47:38 +0000 (22:47 -0500)
select-tuple uses limit 1 now

extra/db/postgresql/postgresql.factor
extra/db/queries/queries.factor
extra/db/sql/sql-tests.factor
extra/db/tuples/tuples.factor

index 3e81b264d69e93f83c3361f14208db91f5853d58..f55897db88ad65d80a2ebd3a9064378c9d172074 100755 (executable)
@@ -175,7 +175,7 @@ M: postgresql-db create-sql-statement ( class -- seq )
 
 : drop-table-sql ( table -- statement )
     [
-        "drop table " 0% 0% ";" 0% drop
+        "drop table " 0% 0% drop
     ] query-make ;
 
 M: postgresql-db drop-sql-statement ( class -- seq )
index e2d452d657dfb950fbd8e5c58fd1dcf5a5dd5da1..9743e87f2eb772bec3ad1fbf6fa00e0c2f253c9f 100644 (file)
@@ -147,7 +147,8 @@ M: db <select-by-slots-statement> ( tuple class -- statement )
         number>string " limit " prepend append
     ] curry change-sql drop ;
 
-: make-advanced-statement ( tuple advanced -- )
+: make-advanced-statement ( tuple advanced -- tuple' )
+    dupd
     {
         [ group>> [ do-group ] [ drop ] if* ]
         [ order>> [ do-order ] [ drop ] if* ]
@@ -155,6 +156,6 @@ M: db <select-by-slots-statement> ( tuple class -- statement )
         [ offset>> [ do-offset ] [ drop ] if* ]
     } 2cleave ;
 
-M: db <advanced-select-statement> ( tuple class advanced -- tuple )
-    >r <select-by-slots-statement> r>
-    dupd make-advanced-statement ;
+M: db <advanced-select-statement> ( tuple class group order limit offset -- tuple )
+    advanced-statement boa
+    [ <select-by-slots-statement> ] dip make-advanced-statement ;
index cab7b83ced9c6981a37e213e9630901459db413e..0b57c2d8faa3556f6a740ee8d3be1673a3f4ca1b 100644 (file)
@@ -4,9 +4,11 @@ IN: db.sql.tests
 ! TUPLE: person name age ;
 : insert-1
     { insert
-        { table "person" }
-        { columns "name" "age" }
-        { values "erg" 26 }
+        {
+            { table "person" }
+            { columns "name" "age" }
+            { values "erg" 26 }
+        }
     } ;
 
 : update-1
index 2838a8433a6f0994ef5aea13f6f61c1cb5e06b42..0a69b9cde86989f7ec0f18d4737c77edab5fc1df 100755 (executable)
@@ -43,7 +43,7 @@ HOOK: <update-tuple-statement> db ( class -- obj )
 HOOK: <delete-tuples-statement> db ( tuple class -- obj )
 HOOK: <select-by-slots-statement> db ( tuple class -- tuple )
 TUPLE: advanced-statement group order offset limit ;
-HOOK: <advanced-select-statement> db ( tuple class advanced -- tuple )
+HOOK: <advanced-select-statement> db ( tuple class group order offset limit -- tuple )
 
 HOOK: insert-tuple* db ( tuple statement -- )
 
@@ -143,9 +143,12 @@ M: retryable execute-statement* ( statement type -- )
         [ bind-tuple ] keep execute-statement
     ] with-disposal ;
 
+: do-select ( exemplar-tuple statement -- tuples )
+    [ [ bind-tuple ] [ query-tuples ] 2bi ] with-disposal ;
+
 : select-tuples ( tuple -- tuples )
-    dup dup class <select-by-slots-statement> [
-        [ bind-tuple ] [  query-tuples ] 2bi
-    ] with-disposal ;
+    dup dup class <select-by-slots-statement> do-select ;
 
-: select-tuple ( tuple -- tuple/f ) select-tuples ?first ;
+: select-tuple ( tuple -- tuple/f )
+    dup dup class f f f 1 <advanced-select-statement>
+    do-select ?first ;