]> gitweb.factorcode.org Git - factor.git/commitdiff
refactor <query>
authorDoug Coleman <doug.coleman@gmail.com>
Thu, 12 Jun 2008 23:04:01 +0000 (18:04 -0500)
committerDoug Coleman <doug.coleman@gmail.com>
Thu, 12 Jun 2008 23:04:01 +0000 (18:04 -0500)
add url objects

extra/db/postgresql/lib/lib.factor
extra/db/postgresql/postgresql.factor
extra/db/queries/queries.factor
extra/db/sqlite/lib/lib.factor
extra/db/sqlite/sqlite.factor
extra/db/tuples/tuples-tests.factor
extra/db/tuples/tuples.factor
extra/db/types/types.factor

index e99bc414494abe5c44b5c39c4838d11a14cb1aa1..9d2ced3afaab68e37362344d2572df7a9b8dbde7 100755 (executable)
@@ -5,7 +5,7 @@ quotations sequences db.postgresql.ffi alien alien.c-types
 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 inspector ;
+alien.strings io.streams.byte-array inspector present urls ;
 IN: db.postgresql.lib
 
 : postgresql-result-error-message ( res -- str/f )
@@ -84,6 +84,7 @@ M: postgresql-result-null summary ( obj -- str )
             { TIME [ dup [ timestamp>hms ] when default-param-value ] }
             { DATETIME [ dup [ timestamp>ymdhms ] when default-param-value ] }
             { TIMESTAMP [ dup [ timestamp>ymdhms ] when default-param-value ] }
+            { URL [ dup [ present ] when default-param-value ] }
             [ drop default-param-value ]
         } case 2array
     ] 2map flip dup empty? [
@@ -164,6 +165,7 @@ M: postgresql-malloc-destructor dispose ( obj -- )
         { TIMESTAMP [ pq-get-string dup [ ymdhms>timestamp ] when ] }
         { DATETIME [ pq-get-string dup [ ymdhms>timestamp ] when ] }
         { BLOB [ pq-get-blob ] }
+        { URL [ pq-get-string dup [ >url ] when ] }
         { FACTOR-BLOB [
             pq-get-blob
             dup [ bytes>object ] when ] }
index f55897db88ad65d80a2ebd3a9064378c9d172074..1734fb6df4b15b41bf5b39b4bff782028a942eae 100755 (executable)
@@ -239,6 +239,7 @@ M: postgresql-db persistent-table ( -- hashtable )
         { TIMESTAMP { "timestamp" "timestamp" f } }
         { BLOB { "bytea" "bytea" f } }
         { FACTOR-BLOB { "bytea" "bytea" f } }
+        { URL { "string" "string" f } }
         { +foreign-id+ { f f "references" } }
         { +autoincrement+ { f f "autoincrement" } }
         { +unique+ { f f "unique" } }
index 29abe9bddcf80d984aae9c5c5310d51bcf24dce1..807aeda74a7f62af520e3ed17855e09ce8e3bd3c 100644 (file)
@@ -149,14 +149,13 @@ M: db <select-by-slots-statement> ( tuple class -- statement )
 : make-query ( tuple query -- tuple' )
     dupd
     {
-        [ group>> [ do-group ] [ drop ] if* ]
-        [ order>> [ do-order ] [ drop ] if* ]
+        [ group>> [ do-group ] [ drop ] if-seq ]
+        [ order>> [ do-order ] [ drop ] if-seq ]
         [ limit>> [ do-limit ] [ drop ] if* ]
         [ offset>> [ do-offset ] [ drop ] if* ]
     } 2cleave ;
 
-M: db <query> ( tuple class group order limit offset -- tuple )
-    \ query boa
+M: db <query> ( tuple class query -- tuple )
     [ <select-by-slots-statement> ] dip make-query ;
 
 ! select ID, NAME, SCORE from EXAM limit 1 offset 3
@@ -174,7 +173,8 @@ M: db <query> ( tuple class group order limit offset -- tuple )
     <simple-statement> maybe-make-retryable do-select ;
 
 M: db <count-statement> ( tuple class groups -- statement )
-    f f f \ query boa
+    \ query new
+        swap >>group
     [ [ "select count(*) from " 0% 0% where-clause ] query-make ]
     dip make-query ;
 
index b652e8fed708b3d929fe7691c490d61620c36481..4c440acc559d0ec02ab903c2e34b7318b9d92474 100755 (executable)
@@ -4,7 +4,7 @@ USING: alien.c-types arrays assocs kernel math math.parser
 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 ;
+io.backend db.errors present urls ;
 IN: db.sqlite.lib
 
 ERROR: sqlite-error < db-error n string ;
@@ -107,6 +107,7 @@ ERROR: sqlite-sql-error < sql-error n string ;
             object>bytes
             sqlite-bind-blob-by-name
         ] }
+        { URL [ present sqlite-bind-text-by-name ] }
         { +db-assigned-id+ [ sqlite-bind-int-by-name ] }
         { +random-id+ [ sqlite-bind-int64-by-name ] }
         { NULL [ sqlite-bind-null-by-name ] }
@@ -147,6 +148,7 @@ ERROR: sqlite-sql-error < sql-error n string ;
         { TIMESTAMP [ sqlite3_column_text dup [ ymdhms>timestamp ] when ] }
         { DATETIME [ sqlite3_column_text dup [ ymdhms>timestamp ] when ] }
         { BLOB [ sqlite-column-blob ] }
+        { URL [ sqlite3_column_text dup [ >url ] when ] }
         { FACTOR-BLOB [
             sqlite-column-blob
             dup [ bytes>object ] when
index cc4e4d116ad03dbcd2831725c0f414ac19c9e4e6..c7c9065b43e46f0113dd089682593c96e09c9cb5 100755 (executable)
@@ -182,6 +182,7 @@ M: sqlite-db persistent-table ( -- assoc )
         { DOUBLE { "real" "real" } }
         { BLOB { "blob" "blob" } }
         { FACTOR-BLOB { "blob" "blob" } }
+        { URL { "text" "text" } }
         { +autoincrement+ { f f "autoincrement" } }
         { +unique+ { f f "unique" } }
         { +default+ { f f "default" } }
index 665afa6a5135ac8bf55efbb4c4303be53de889a5..7ccee7c6373dc7a9903795dce6821cdcef96c6aa 100755 (executable)
@@ -342,7 +342,7 @@ TUPLE: exam id name score ;
         T{ exam } select-tuples
     ] unit-test
 
-    [ 4 ] [ T{ exam } count-tuples ] unit-test ;
+    [ 4 ] [ T{ exam } count-tuples ] unit-test ;
 
 TUPLE: bignum-test id m n o ;
 : <bignum-test> ( m n o -- obj )
index b7cc6c81c25db2a909147bb9f588e89f12501873..4903adff5cc0c6855d51eafb52758f97f8650523 100755 (executable)
@@ -43,8 +43,8 @@ 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: query group order offset limit ;
-HOOK: <query> db ( tuple class group order offset limit -- tuple )
-HOOK: <count-statement> db ( tuple class -- n )
+HOOK: <query> db ( tuple class query -- statement' )
+HOOK: <count-statement> db ( tuple class groups -- n )
 
 HOOK: insert-tuple* db ( tuple statement -- )
 
@@ -149,19 +149,14 @@ M: retryable execute-statement* ( statement type -- )
 : do-select ( exemplar-tuple statement -- tuples )
     [ [ bind-tuple ] [ query-tuples ] 2bi ] with-disposal ;
 
+: query ( tuple query -- tuples )
+    >r dup dup class r> <query> do-select ;
+
 : select-tuples ( tuple -- tuples )
     dup dup class <select-by-slots-statement> do-select ;
 
-: count-tuples ( tuple -- n )
-    select-tuples length ;
-
 : select-tuple ( tuple -- tuple/f )
-    dup dup class f f f 1 <query>
-    do-select ?first ;
-
-: query ( tuple groups order offset limit -- tuples )
-    >r >r >r >r dup dup class r> r> r> r>
-    <query> do-select ;
+    dup dup class \ query new 1 >>limit <query> do-select ?first ;
 
 : do-count ( exemplar-tuple statement -- tuples )
     [
@@ -170,6 +165,5 @@ M: retryable execute-statement* ( statement type -- )
 
 : count-tuples ( tuple groups -- n )
     >r dup dup class r> <count-statement> do-count
-    dup length 1 = [ first first string>number ] [
-        [ first string>number ] map
-    ] if ;
+    dup length 1 =
+    [ first first string>number ] [ [ first string>number ] map ] if ;
index 03e6b15bdb3c2e6a35b13563b2a6be2a713066e1..f6d54404de567b9f40b5dc3d14beb3195885e09b 100755 (executable)
@@ -65,7 +65,7 @@ SYMBOLS: +autoincrement+ +serial+ +unique+ +default+ +null+ +not-null+
 
 SYMBOLS: INTEGER BIG-INTEGER SIGNED-BIG-INTEGER UNSIGNED-BIG-INTEGER
 DOUBLE REAL BOOLEAN TEXT VARCHAR DATE TIME DATETIME TIMESTAMP BLOB
-FACTOR-BLOB NULL ;
+FACTOR-BLOB NULL URL ;
 
 : spec>tuple ( class spec -- tuple )
     3 f pad-right