| 
									
										
										
										
											2008-12-15 04:33:04 -05:00
										 |  |  | USING: io io.files io.files.temp io.directories io.launcher | 
					
						
							|  |  |  | kernel namespaces prettyprint tools.test db.sqlite db sequences | 
					
						
							| 
									
										
										
										
											2009-02-19 19:26:11 -05:00
										 |  |  | continuations db.types db.tuples unicode.case accessors arrays | 
					
						
							|  |  |  | sorting ;
 | 
					
						
							| 
									
										
										
										
											2008-03-01 17:00:45 -05:00
										 |  |  | IN: db.sqlite.tests | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-17 20:35:53 -05:00
										 |  |  | : db-path ( -- path ) "test.db" temp-file ;
 | 
					
						
							|  |  |  | : test.db ( -- sqlite-db ) db-path <sqlite-db> ;
 | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-05 14:51:31 -05:00
										 |  |  | [ ] [ [ db-path delete-file ] ignore-errors ] unit-test | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-04 14:57:22 -05:00
										 |  |  | [ ] [ | 
					
						
							|  |  |  |     test.db [ | 
					
						
							|  |  |  |         "create table person (name varchar(30), country varchar(30))" sql-command | 
					
						
							|  |  |  |         "insert into person values('John', 'America')" sql-command | 
					
						
							|  |  |  |         "insert into person values('Jane', 'New Zealand')" sql-command | 
					
						
							| 
									
										
										
										
											2008-03-05 14:51:31 -05:00
										 |  |  |     ] with-db | 
					
						
							| 
									
										
										
										
											2008-02-04 14:57:22 -05:00
										 |  |  | ] unit-test | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-04 14:57:22 -05:00
										 |  |  | [ { { "John" "America" } { "Jane" "New Zealand" } } ] [ | 
					
						
							| 
									
										
										
										
											2008-02-03 16:06:31 -05:00
										 |  |  |     test.db [ | 
					
						
							| 
									
										
										
										
											2008-02-03 00:28:33 -05:00
										 |  |  |         "select * from person" sql-query | 
					
						
							| 
									
										
										
										
											2008-03-05 14:51:31 -05:00
										 |  |  |     ] with-db | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-04 14:57:22 -05:00
										 |  |  | [ { { "1" "John" "America" } { "2" "Jane" "New Zealand" } } ] | 
					
						
							| 
									
										
										
										
											2008-03-05 14:51:31 -05:00
										 |  |  | [ test.db [ "select rowid, * from person" sql-query ] with-db ] unit-test | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-04 14:57:22 -05:00
										 |  |  | [ ] [ | 
					
						
							| 
									
										
										
										
											2008-02-03 16:06:31 -05:00
										 |  |  |     test.db [ | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  |         "insert into person(name, country) values('Jimmy', 'Canada')" | 
					
						
							| 
									
										
										
										
											2008-02-03 00:28:33 -05:00
										 |  |  |         sql-command | 
					
						
							| 
									
										
										
										
											2008-03-05 14:51:31 -05:00
										 |  |  |     ] with-db | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         { "1" "John" "America" } | 
					
						
							|  |  |  |         { "2" "Jane" "New Zealand" } | 
					
						
							|  |  |  |         { "3" "Jimmy" "Canada" } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2008-03-05 14:51:31 -05:00
										 |  |  | ] [ test.db [ "select rowid, * from person" sql-query ] with-db ] unit-test | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ | 
					
						
							| 
									
										
										
										
											2008-02-03 16:06:31 -05:00
										 |  |  |     test.db [ | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  |         [ | 
					
						
							| 
									
										
										
										
											2008-02-03 00:28:33 -05:00
										 |  |  |             "insert into person(name, country) values('Jose', 'Mexico')" sql-command | 
					
						
							|  |  |  |             "insert into person(name, country) values('Jose', 'Mexico')" sql-command | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  |             "oops" throw
 | 
					
						
							|  |  |  |         ] with-transaction | 
					
						
							| 
									
										
										
										
											2008-03-05 14:51:31 -05:00
										 |  |  |     ] with-db | 
					
						
							| 
									
										
										
										
											2008-02-06 14:47:19 -05:00
										 |  |  | ] must-fail | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ 3 ] [ | 
					
						
							| 
									
										
										
										
											2008-02-03 16:06:31 -05:00
										 |  |  |     test.db [ | 
					
						
							| 
									
										
										
										
											2008-02-03 00:28:33 -05:00
										 |  |  |         "select * from person" sql-query length
 | 
					
						
							| 
									
										
										
										
											2008-03-05 14:51:31 -05:00
										 |  |  |     ] with-db | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-02 23:50:46 -04:00
										 |  |  | [ ] [ | 
					
						
							| 
									
										
										
										
											2008-02-03 16:06:31 -05:00
										 |  |  |     test.db [ | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  |         [ | 
					
						
							| 
									
										
										
										
											2008-02-03 00:28:33 -05:00
										 |  |  |             "insert into person(name, country) values('Jose', 'Mexico')" | 
					
						
							|  |  |  |             sql-command | 
					
						
							|  |  |  |             "insert into person(name, country) values('Jose', 'Mexico')" | 
					
						
							|  |  |  |             sql-command | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  |         ] with-transaction | 
					
						
							| 
									
										
										
										
											2008-03-05 14:51:31 -05:00
										 |  |  |     ] with-db | 
					
						
							| 
									
										
										
										
											2008-02-01 18:43:44 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 5 ] [ | 
					
						
							| 
									
										
										
										
											2008-02-03 16:06:31 -05:00
										 |  |  |     test.db [ | 
					
						
							| 
									
										
										
										
											2008-02-03 00:28:33 -05:00
										 |  |  |         "select * from person" sql-query length
 | 
					
						
							| 
									
										
										
										
											2008-03-05 14:51:31 -05:00
										 |  |  |     ] with-db | 
					
						
							| 
									
										
										
										
											2008-02-20 12:30:48 -05:00
										 |  |  | ] unit-test | 
					
						
							| 
									
										
										
										
											2009-02-12 02:39:14 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-19 19:26:11 -05:00
										 |  |  | [ \ swap ensure-table ] must-fail | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-12 02:39:14 -05:00
										 |  |  | ! You don't need a primary key | 
					
						
							|  |  |  | TUPLE: things one two ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | things "THINGS" { | 
					
						
							|  |  |  |     { "one" "ONE" INTEGER +not-null+ } | 
					
						
							|  |  |  |     { "two" "TWO" INTEGER +not-null+ } | 
					
						
							|  |  |  | } define-persistent | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ { { 0 0 } { 0 1 } { 1 0 } { 1 1 } } ] [ | 
					
						
							|  |  |  |     test.db [ | 
					
						
							|  |  |  |        things create-table | 
					
						
							|  |  |  |         0 0 things boa insert-tuple | 
					
						
							|  |  |  |         0 1 things boa insert-tuple | 
					
						
							|  |  |  |         1 1 things boa insert-tuple | 
					
						
							|  |  |  |         1 0 things boa insert-tuple | 
					
						
							|  |  |  |         f f things boa select-tuples | 
					
						
							|  |  |  |         [ [ one>> ] [ two>> ] bi 2array ] map natural-sort | 
					
						
							|  |  |  |        things drop-table | 
					
						
							|  |  |  |     ] with-db | 
					
						
							|  |  |  | ] unit-test | 
					
						
							| 
									
										
										
										
											2009-02-12 18:13:01 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! Tables can have different names than the name of the tuple | 
					
						
							|  |  |  | TUPLE: foo slot ;
 | 
					
						
							|  |  |  | C: <foo> foo | 
					
						
							|  |  |  | foo "BAR" { { "slot" "SOMETHING" INTEGER +not-null+ } } define-persistent | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-12 22:59:59 -05:00
										 |  |  | TUPLE: hi bye try ;
 | 
					
						
							| 
									
										
										
										
											2009-02-12 18:13:01 -05:00
										 |  |  | C: <hi> hi | 
					
						
							| 
									
										
										
										
											2009-02-12 22:59:59 -05:00
										 |  |  | hi "HELLO" { | 
					
						
							|  |  |  |     { "bye" "BUHBYE" INTEGER { +foreign-id+ foo "SOMETHING" } } | 
					
						
							|  |  |  |     { "try" "RETHROW" INTEGER { +foreign-id+ foo "SOMETHING" } } | 
					
						
							|  |  |  | } define-persistent | 
					
						
							| 
									
										
										
										
											2009-02-12 18:13:01 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-12 22:59:59 -05:00
										 |  |  | [ T{ foo { slot 1 } } T{ hi { bye 1 } { try 1 } } ] [ | 
					
						
							| 
									
										
										
										
											2009-02-12 18:13:01 -05:00
										 |  |  |     test.db [ | 
					
						
							|  |  |  |         foo create-table | 
					
						
							|  |  |  |         hi create-table | 
					
						
							|  |  |  |         1 <foo> insert-tuple | 
					
						
							|  |  |  |         f <foo> select-tuple | 
					
						
							| 
									
										
										
										
											2009-02-12 22:59:59 -05:00
										 |  |  |         1 1 <hi> insert-tuple | 
					
						
							| 
									
										
										
										
											2009-02-19 19:52:45 -05:00
										 |  |  |         f f <hi> select-tuple | 
					
						
							| 
									
										
										
										
											2009-02-12 18:13:01 -05:00
										 |  |  |         hi drop-table | 
					
						
							|  |  |  |         foo drop-table | 
					
						
							|  |  |  |     ] with-db | 
					
						
							|  |  |  | ] unit-test | 
					
						
							| 
									
										
										
										
											2009-02-12 22:59:59 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-20 15:52:38 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! Test SQLite triggers | 
					
						
							| 
									
										
										
										
											2009-02-13 17:05:18 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | TUPLE: show id ;
 | 
					
						
							|  |  |  | TUPLE: user username data ;
 | 
					
						
							|  |  |  | TUPLE: watch show user ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | user "USER" { | 
					
						
							|  |  |  |     { "username" "USERNAME" TEXT +not-null+ +user-assigned-id+ } | 
					
						
							|  |  |  |     { "data" "DATA" TEXT } | 
					
						
							|  |  |  | } define-persistent | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | show "SHOW" { | 
					
						
							|  |  |  |     { "id" "ID" +db-assigned-id+ } | 
					
						
							|  |  |  | } define-persistent | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | watch "WATCH" { | 
					
						
							| 
									
										
										
										
											2009-02-20 15:52:38 -05:00
										 |  |  |     { "user" "USER" TEXT +not-null+ +user-assigned-id+ | 
					
						
							|  |  |  |         { +foreign-id+ user "USERNAME" } } | 
					
						
							|  |  |  |     { "show" "SHOW" BIG-INTEGER +not-null+ +user-assigned-id+ | 
					
						
							|  |  |  |         { +foreign-id+ show "ID" } } | 
					
						
							| 
									
										
										
										
											2009-02-13 17:05:18 -05:00
										 |  |  | } define-persistent | 
					
						
							| 
									
										
										
										
											2009-02-20 15:52:38 -05:00
										 |  |  |      | 
					
						
							| 
									
										
										
										
											2009-02-13 17:05:18 -05:00
										 |  |  | [ T{ user { username "littledan" } { data "foo" } } ] [ | 
					
						
							|  |  |  |     test.db [ | 
					
						
							|  |  |  |         user create-table | 
					
						
							|  |  |  |         show create-table | 
					
						
							|  |  |  |         watch create-table | 
					
						
							|  |  |  |         "littledan" "foo" user boa insert-tuple | 
					
						
							|  |  |  |         "mark" "bar" user boa insert-tuple | 
					
						
							|  |  |  |         show new insert-tuple | 
					
						
							|  |  |  |         show new select-tuple | 
					
						
							|  |  |  |         "littledan" f user boa select-tuple | 
					
						
							| 
									
										
										
										
											2009-02-20 15:52:38 -05:00
										 |  |  |         [ id>> ] [ username>> ] bi*
 | 
					
						
							| 
									
										
										
										
											2009-02-13 17:05:18 -05:00
										 |  |  |         watch boa insert-tuple | 
					
						
							|  |  |  |         watch new select-tuple | 
					
						
							|  |  |  |         user>> f user boa select-tuple | 
					
						
							|  |  |  |     ] with-db | 
					
						
							|  |  |  | ] unit-test |