| 
									
										
										
										
											2008-02-03 16:06:31 -05:00
										 |  |  | ! Copyright (C) 2007, 2008 Doug Coleman. | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							|  |  |  | USING: arrays assocs alien alien.syntax continuations io | 
					
						
							| 
									
										
										
										
											2008-02-13 17:51:16 -05:00
										 |  |  | kernel math math.parser namespaces prettyprint quotations | 
					
						
							|  |  |  | sequences debugger db db.postgresql.lib db.postgresql.ffi | 
					
						
							| 
									
										
										
										
											2008-02-15 15:01:44 -05:00
										 |  |  | db.tuples db.types tools.annotations math.ranges | 
					
						
							| 
									
										
										
										
											2008-03-10 14:56:58 -04:00
										 |  |  | combinators sequences.lib classes locals words tools.walker | 
					
						
							| 
									
										
										
										
											2008-05-15 00:23:12 -04:00
										 |  |  | namespaces.lib accessors random db.queries destructors ;
 | 
					
						
							| 
									
										
										
										
											2008-04-28 17:48:55 -04:00
										 |  |  | USE: tools.walker | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  | IN: db.postgresql | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-05 21:22:33 -04:00
										 |  |  | TUPLE: postgresql-db < db | 
					
						
							|  |  |  |     host port pgopts pgtty db user pass ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-18 17:01:31 -04:00
										 |  |  | TUPLE: postgresql-statement < statement ;
 | 
					
						
							| 
									
										
										
										
											2008-04-05 21:22:33 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | TUPLE: postgresql-result-set < result-set ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-25 15:50:42 -05:00
										 |  |  | M: postgresql-db make-db* ( seq tuple -- db )
 | 
					
						
							| 
									
										
										
										
											2008-04-05 21:22:33 -04:00
										 |  |  |     >r first4 r> | 
					
						
							|  |  |  |         swap >>db | 
					
						
							|  |  |  |         swap >>pass | 
					
						
							|  |  |  |         swap >>user | 
					
						
							|  |  |  |         swap >>host ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: postgresql-db db-open ( db -- db )
 | 
					
						
							|  |  |  |     dup { | 
					
						
							|  |  |  |         [ host>> ] | 
					
						
							|  |  |  |         [ port>> ] | 
					
						
							|  |  |  |         [ pgopts>> ] | 
					
						
							|  |  |  |         [ pgtty>> ] | 
					
						
							|  |  |  |         [ db>> ] | 
					
						
							|  |  |  |         [ user>> ] | 
					
						
							|  |  |  |         [ pass>> ] | 
					
						
							|  |  |  |     } cleave connect-postgres >>handle ;
 | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: postgresql-db dispose ( db -- )
 | 
					
						
							| 
									
										
										
										
											2008-04-05 21:22:33 -04:00
										 |  |  |     handle>> PQfinish ;
 | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-27 19:28:32 -05:00
										 |  |  | M: postgresql-statement bind-statement* ( statement -- )
 | 
					
						
							| 
									
										
										
										
											2008-02-12 18:19:55 -05:00
										 |  |  |     drop ;
 | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-21 14:11:19 -04:00
										 |  |  | GENERIC: postgresql-bind-conversion ( tuple obj -- low-level-binding )
 | 
					
						
							| 
									
										
										
										
											2008-04-21 01:45:14 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-21 14:11:19 -04:00
										 |  |  | M: sql-spec postgresql-bind-conversion ( tuple spec -- obj )
 | 
					
						
							|  |  |  |     slot-name>> swap get-slot-named <low-level-binding> ;
 | 
					
						
							| 
									
										
										
										
											2008-04-21 01:45:14 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-21 14:11:19 -04:00
										 |  |  | M: literal-bind postgresql-bind-conversion ( tuple literal-bind -- obj )
 | 
					
						
							|  |  |  |     nip value>> <low-level-binding> ;
 | 
					
						
							| 
									
										
										
										
											2008-04-21 01:45:14 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-21 14:11:19 -04:00
										 |  |  | M: generator-bind postgresql-bind-conversion ( tuple generate-bind -- obj )
 | 
					
						
							| 
									
										
										
										
											2008-04-28 18:17:19 -04:00
										 |  |  |     dup generator-singleton>> eval-generator | 
					
						
							|  |  |  |     [ swap slot-name>> rot set-slot-named ] [ <low-level-binding> ] bi ;
 | 
					
						
							| 
									
										
										
										
											2008-04-21 01:45:14 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  | M: postgresql-statement bind-tuple ( tuple statement -- )
 | 
					
						
							| 
									
										
										
										
											2008-04-20 00:18:12 -04:00
										 |  |  |     tuck in-params>> | 
					
						
							| 
									
										
										
										
											2008-04-21 01:45:14 -04:00
										 |  |  |     [ postgresql-bind-conversion ] with map
 | 
					
						
							| 
									
										
										
										
											2008-04-20 00:18:12 -04:00
										 |  |  |     >>bind-params drop ;
 | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-03 16:06:31 -05:00
										 |  |  | M: postgresql-result-set #rows ( result-set -- n )
 | 
					
						
							| 
									
										
										
										
											2008-04-05 21:22:33 -04:00
										 |  |  |     handle>> PQntuples ;
 | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-03 16:06:31 -05:00
										 |  |  | M: postgresql-result-set #columns ( result-set -- n )
 | 
					
						
							| 
									
										
										
										
											2008-04-05 21:22:33 -04:00
										 |  |  |     handle>> PQnfields ;
 | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-20 00:48:07 -04:00
										 |  |  | : result-handle-n ( result-set -- handle n )
 | 
					
						
							|  |  |  |     [ handle>> ] [ n>> ] bi ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-10 14:56:58 -04:00
										 |  |  | M: postgresql-result-set row-column ( result-set column -- obj )
 | 
					
						
							| 
									
										
										
										
											2008-04-20 00:48:07 -04:00
										 |  |  |     >r result-handle-n r> pq-get-string ;
 | 
					
						
							| 
									
										
										
										
											2008-02-03 00:28:33 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-10 14:56:58 -04:00
										 |  |  | M: postgresql-result-set row-column-typed ( result-set column -- obj )
 | 
					
						
							| 
									
										
										
										
											2008-04-20 00:41:48 -04:00
										 |  |  |     dup pick out-params>> nth type>> | 
					
						
							| 
									
										
										
										
											2008-04-20 00:48:07 -04:00
										 |  |  |     >r >r result-handle-n r> r> postgresql-column-typed ;
 | 
					
						
							| 
									
										
										
										
											2008-02-15 15:01:44 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-03 16:06:31 -05:00
										 |  |  | M: postgresql-statement query-results ( query -- result-set )
 | 
					
						
							| 
									
										
										
										
											2008-04-20 00:41:48 -04:00
										 |  |  |     dup bind-params>> [ | 
					
						
							| 
									
										
										
										
											2008-02-03 16:06:31 -05:00
										 |  |  |         over [ bind-statement ] keep
 | 
					
						
							|  |  |  |         do-postgresql-bound-statement | 
					
						
							|  |  |  |     ] [ | 
					
						
							|  |  |  |         dup do-postgresql-statement | 
					
						
							|  |  |  |     ] if*
 | 
					
						
							| 
									
										
										
										
											2008-04-05 21:22:33 -04:00
										 |  |  |     postgresql-result-set construct-result-set | 
					
						
							| 
									
										
										
										
											2008-02-03 16:06:31 -05:00
										 |  |  |     dup init-result-set ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-15 00:39:20 -05:00
										 |  |  | M: postgresql-result-set advance-row ( result-set -- )
 | 
					
						
							| 
									
										
										
										
											2008-04-20 00:41:48 -04:00
										 |  |  |     [ 1+ ] change-n drop ;
 | 
					
						
							| 
									
										
										
										
											2008-02-15 00:39:20 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: postgresql-result-set more-rows? ( result-set -- ? )
 | 
					
						
							| 
									
										
										
										
											2008-04-20 00:41:48 -04:00
										 |  |  |     [ n>> ] [ max>> ] bi < ;
 | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: postgresql-statement dispose ( query -- )
 | 
					
						
							| 
									
										
										
										
											2008-04-20 00:41:48 -04:00
										 |  |  |     dup handle>> PQclear | 
					
						
							|  |  |  |     f >>handle drop ;
 | 
					
						
							| 
									
										
										
										
											2008-02-03 00:28:33 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: postgresql-result-set dispose ( result-set -- )
 | 
					
						
							| 
									
										
										
										
											2008-04-20 00:41:48 -04:00
										 |  |  |     [ handle>> PQclear ] | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         0 >>n | 
					
						
							|  |  |  |         0 >>max | 
					
						
							|  |  |  |         f >>handle drop
 | 
					
						
							|  |  |  |     ] bi ;
 | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: postgresql-statement prepare-statement ( statement -- )
 | 
					
						
							| 
									
										
										
										
											2008-04-20 00:41:48 -04:00
										 |  |  |     dup
 | 
					
						
							| 
									
										
										
										
											2008-04-20 01:52:05 -04:00
										 |  |  |     >r db get handle>> f r> | 
					
						
							| 
									
										
										
										
											2008-04-20 00:41:48 -04:00
										 |  |  |     [ sql>> ] [ in-params>> ] bi
 | 
					
						
							|  |  |  |     length f PQprepare postgresql-error | 
					
						
							|  |  |  |     >>handle drop ;
 | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  | M: postgresql-db <simple-statement> ( sql in out -- statement )
 | 
					
						
							| 
									
										
										
										
											2008-04-20 18:47:43 -04:00
										 |  |  |     postgresql-statement construct-statement ;
 | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  | M: postgresql-db <prepared-statement> ( sql in out -- statement )
 | 
					
						
							| 
									
										
										
										
											2008-04-20 18:47:43 -04:00
										 |  |  |     <simple-statement> dup prepare-statement ;
 | 
					
						
							| 
									
										
										
										
											2008-02-13 17:51:16 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  | : bind-name% ( -- )
 | 
					
						
							| 
									
										
										
										
											2008-02-19 17:00:50 -05:00
										 |  |  |     CHAR: $ 0, | 
					
						
							| 
									
										
										
										
											2008-04-20 18:50:39 -04:00
										 |  |  |     sql-counter [ inc ] [ get 0# ] bi ;
 | 
					
						
							| 
									
										
										
										
											2008-02-14 02:27:54 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  | M: postgresql-db bind% ( spec -- )
 | 
					
						
							| 
									
										
										
										
											2008-04-20 00:18:12 -04:00
										 |  |  |     bind-name% 1, ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: postgresql-db bind# ( spec obj -- )
 | 
					
						
							|  |  |  |     >r bind-name% f swap type>> r> <literal-bind> 1, ;
 | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : create-table-sql ( class -- statement )
 | 
					
						
							| 
									
										
										
										
											2008-02-19 17:00:50 -05:00
										 |  |  |     [ | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  |         "create table " 0% 0% | 
					
						
							| 
									
										
										
										
											2008-04-20 00:18:12 -04:00
										 |  |  |         "(" 0% [ ", " 0% ] [ | 
					
						
							|  |  |  |             dup column-name>> 0% | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  |             " " 0% | 
					
						
							| 
									
										
										
										
											2008-04-20 16:48:09 -04:00
										 |  |  |             dup type>> lookup-create-type 0% | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  |             modifiers 0% | 
					
						
							|  |  |  |         ] interleave ");" 0% | 
					
						
							| 
									
										
										
										
											2008-04-20 18:47:43 -04:00
										 |  |  |     ] query-make ;
 | 
					
						
							| 
									
										
										
										
											2008-02-14 02:27:54 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  | : create-function-sql ( class -- statement )
 | 
					
						
							| 
									
										
										
										
											2008-02-13 17:51:16 -05:00
										 |  |  |     [ | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  |         >r remove-id r> | 
					
						
							|  |  |  |         "create function add_" 0% dup 0% | 
					
						
							|  |  |  |         "(" 0% | 
					
						
							|  |  |  |         over [ "," 0% ] | 
					
						
							|  |  |  |         [ | 
					
						
							| 
									
										
										
										
											2008-04-20 16:48:09 -04:00
										 |  |  |             type>> lookup-type 0% | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  |         ] interleave
 | 
					
						
							|  |  |  |         ")" 0% | 
					
						
							|  |  |  |         " returns bigint as '" 0% | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         "insert into " 0% | 
					
						
							|  |  |  |         dup 0% | 
					
						
							|  |  |  |         "(" 0% | 
					
						
							| 
									
										
										
										
											2008-04-20 00:41:48 -04:00
										 |  |  |         over [ ", " 0% ] [ column-name>> 0% ] interleave
 | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  |         ") values(" 0% | 
					
						
							|  |  |  |         swap [ ", " 0% ] [ drop bind-name% ] interleave
 | 
					
						
							|  |  |  |         "); " 0% | 
					
						
							|  |  |  |         "select currval(''" 0% 0% "_id_seq'');' language sql;" 0% | 
					
						
							| 
									
										
										
										
											2008-04-20 18:47:43 -04:00
										 |  |  |     ] query-make ;
 | 
					
						
							| 
									
										
										
										
											2008-02-13 17:51:16 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  | M: postgresql-db create-sql-statement ( class -- seq )
 | 
					
						
							| 
									
										
										
										
											2008-02-13 17:51:16 -05:00
										 |  |  |     [ | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  |         [ create-table-sql , ] keep
 | 
					
						
							| 
									
										
										
										
											2008-04-28 17:48:55 -04:00
										 |  |  |         dup db-columns find-primary-key db-assigned-id-spec? | 
					
						
							| 
									
										
										
										
											2008-02-25 16:13:00 -05:00
										 |  |  |         [ create-function-sql , ] [ drop ] if
 | 
					
						
							| 
									
										
										
										
											2008-02-19 17:00:50 -05:00
										 |  |  |     ] { } make ;
 | 
					
						
							| 
									
										
										
										
											2008-02-13 17:51:16 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  | : drop-function-sql ( class -- statement )
 | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         "drop function add_" 0% 0% | 
					
						
							|  |  |  |         "(" 0% | 
					
						
							|  |  |  |         remove-id | 
					
						
							| 
									
										
										
										
											2008-04-20 16:48:09 -04:00
										 |  |  |         [ ", " 0% ] [ type>> lookup-type 0% ] interleave
 | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  |         ");" 0% | 
					
						
							| 
									
										
										
										
											2008-04-20 18:47:43 -04:00
										 |  |  |     ] query-make ;
 | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : drop-table-sql ( table -- statement )
 | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2008-05-30 23:47:38 -04:00
										 |  |  |         "drop table " 0% 0% drop
 | 
					
						
							| 
									
										
										
										
											2008-04-20 18:47:43 -04:00
										 |  |  |     ] query-make ;
 | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: postgresql-db drop-sql-statement ( class -- seq )
 | 
					
						
							| 
									
										
										
										
											2008-02-19 17:00:50 -05:00
										 |  |  |     [ | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  |         [ drop-table-sql , ] keep
 | 
					
						
							| 
									
										
										
										
											2008-04-28 17:48:55 -04:00
										 |  |  |         dup db-columns find-primary-key db-assigned-id-spec? | 
					
						
							| 
									
										
										
										
											2008-02-25 16:13:00 -05:00
										 |  |  |         [ drop-function-sql , ] [ drop ] if
 | 
					
						
							| 
									
										
										
										
											2008-02-19 17:00:50 -05:00
										 |  |  |     ] { } make ;
 | 
					
						
							| 
									
										
										
										
											2008-02-18 17:52:00 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-28 17:48:55 -04:00
										 |  |  | M: postgresql-db <insert-db-assigned-statement> ( class -- statement )
 | 
					
						
							| 
									
										
										
										
											2008-02-19 17:00:50 -05:00
										 |  |  |     [ | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  |         "select add_" 0% 0% | 
					
						
							| 
									
										
										
										
											2008-02-19 17:00:50 -05:00
										 |  |  |         "(" 0% | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  |         dup find-primary-key 2, | 
					
						
							|  |  |  |         remove-id | 
					
						
							| 
									
										
										
										
											2008-02-19 17:00:50 -05:00
										 |  |  |         [ ", " 0% ] [ bind% ] interleave
 | 
					
						
							|  |  |  |         ");" 0% | 
					
						
							| 
									
										
										
										
											2008-04-20 18:47:43 -04:00
										 |  |  |     ] query-make ;
 | 
					
						
							| 
									
										
										
										
											2008-02-18 17:52:00 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-28 17:48:55 -04:00
										 |  |  | M: postgresql-db <insert-user-assigned-statement> ( class -- statement )
 | 
					
						
							| 
									
										
										
										
											2008-02-19 17:00:50 -05:00
										 |  |  |     [ | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  |         "insert into " 0% 0% | 
					
						
							| 
									
										
										
										
											2008-02-19 17:00:50 -05:00
										 |  |  |         "(" 0% | 
					
						
							| 
									
										
										
										
											2008-04-20 00:41:48 -04:00
										 |  |  |         dup [ ", " 0% ] [ column-name>> 0% ] interleave
 | 
					
						
							| 
									
										
										
										
											2008-02-22 18:06:00 -05:00
										 |  |  |         ")" 0% | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         " values(" 0% | 
					
						
							| 
									
										
										
										
											2008-04-21 14:11:19 -04:00
										 |  |  |         [ ", " 0% ] [ | 
					
						
							|  |  |  |             dup type>> +random-id+ = [ | 
					
						
							|  |  |  |                 [ | 
					
						
							| 
									
										
										
										
											2008-04-28 18:17:19 -04:00
										 |  |  |                     bind-name% | 
					
						
							|  |  |  |                     slot-name>> | 
					
						
							|  |  |  |                     f
 | 
					
						
							|  |  |  |                     random-id-generator | 
					
						
							| 
									
										
										
										
											2008-04-21 14:11:19 -04:00
										 |  |  |                 ] [ type>> ] bi <generator-bind> 1, | 
					
						
							|  |  |  |             ] [ | 
					
						
							|  |  |  |                 bind% | 
					
						
							|  |  |  |             ] if
 | 
					
						
							|  |  |  |         ] interleave
 | 
					
						
							| 
									
										
										
										
											2008-02-19 17:00:50 -05:00
										 |  |  |         ");" 0% | 
					
						
							| 
									
										
										
										
											2008-04-20 18:47:43 -04:00
										 |  |  |     ] query-make ;
 | 
					
						
							| 
									
										
										
										
											2008-02-19 17:00:50 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-25 15:50:42 -05:00
										 |  |  | M: postgresql-db insert-tuple* ( tuple statement -- )
 | 
					
						
							|  |  |  |     query-modify-tuple ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-20 16:48:09 -04:00
										 |  |  | M: postgresql-db persistent-table ( -- hashtable )
 | 
					
						
							| 
									
										
										
										
											2008-02-19 17:00:50 -05:00
										 |  |  |     H{ | 
					
						
							| 
									
										
										
										
											2008-04-28 17:48:55 -04:00
										 |  |  |         { +db-assigned-id+ { "integer" "serial primary key" f } } | 
					
						
							|  |  |  |         { +user-assigned-id+ { f f "primary key" } } | 
					
						
							| 
									
										
										
										
											2008-04-20 16:48:09 -04:00
										 |  |  |         { +random-id+ { "bigint" "bigint primary key" f } } | 
					
						
							| 
									
										
										
										
											2008-04-21 01:45:14 -04:00
										 |  |  |         { TEXT { "text" "text" f } } | 
					
						
							| 
									
										
										
										
											2008-04-20 16:48:09 -04:00
										 |  |  |         { VARCHAR { "varchar" "varchar" f } } | 
					
						
							|  |  |  |         { INTEGER { "integer" "integer" f } } | 
					
						
							|  |  |  |         { BIG-INTEGER { "bigint" "bigint" f } } | 
					
						
							|  |  |  |         { UNSIGNED-BIG-INTEGER { "bigint" "bigint" f } } | 
					
						
							|  |  |  |         { SIGNED-BIG-INTEGER { "bigint" "bigint" f } } | 
					
						
							|  |  |  |         { DOUBLE { "real" "real" f } } | 
					
						
							|  |  |  |         { DATE { "date" "date" f } } | 
					
						
							|  |  |  |         { TIME { "time" "time" f } } | 
					
						
							|  |  |  |         { DATETIME { "timestamp" "timestamp" f } } | 
					
						
							|  |  |  |         { TIMESTAMP { "timestamp" "timestamp" f } } | 
					
						
							|  |  |  |         { BLOB { "bytea" "bytea" f } } | 
					
						
							|  |  |  |         { FACTOR-BLOB { "bytea" "bytea" f } } | 
					
						
							| 
									
										
										
										
											2008-06-12 19:20:15 -04:00
										 |  |  |         { URL { "varchar" "varchar" f } } | 
					
						
							| 
									
										
										
										
											2008-04-20 16:48:09 -04:00
										 |  |  |         { +foreign-id+ { f f "references" } } | 
					
						
							|  |  |  |         { +autoincrement+ { f f "autoincrement" } } | 
					
						
							|  |  |  |         { +unique+ { f f "unique" } } | 
					
						
							|  |  |  |         { +default+ { f f "default" } } | 
					
						
							|  |  |  |         { +null+ { f f "null" } } | 
					
						
							|  |  |  |         { +not-null+ { f f "not null" } } | 
					
						
							|  |  |  |         { system-random-generator { f f f } } | 
					
						
							|  |  |  |         { secure-random-generator { f f f } } | 
					
						
							|  |  |  |         { random-generator { f f f } } | 
					
						
							| 
									
										
										
										
											2008-02-13 17:51:16 -05:00
										 |  |  |     } ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-20 01:52:05 -04:00
										 |  |  | M: postgresql-db compound ( str obj -- str' )
 | 
					
						
							|  |  |  |     over { | 
					
						
							|  |  |  |         { "default" [ first number>string join-space ] } | 
					
						
							|  |  |  |         { "varchar" [ first number>string paren append ] } | 
					
						
							|  |  |  |         { "references" [ | 
					
						
							|  |  |  |                 first2 >r [ unparse join-space ] keep db-columns r> | 
					
						
							|  |  |  |                 swap [ slot-name>> = ] with find nip
 | 
					
						
							|  |  |  |                 column-name>> paren append
 | 
					
						
							|  |  |  |             ] } | 
					
						
							|  |  |  |         [ "no compound found" 3array throw ] | 
					
						
							|  |  |  |     } case ;
 |