2008-02-12 18:10:56 -05:00
|
|
|
! Copyright (C) 2008 Doug Coleman.
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2008-02-22 18:06:00 -05:00
|
|
|
USING: io.files kernel tools.test db db.tuples
|
2008-02-20 12:30:48 -05:00
|
|
|
db.types continuations namespaces db.postgresql math
|
2008-03-05 20:08:33 -05:00
|
|
|
prettyprint tools.walker db.sqlite calendar ;
|
2008-03-01 17:00:45 -05:00
|
|
|
IN: db.tuples.tests
|
2008-02-11 00:11:16 -05:00
|
|
|
|
2008-03-05 20:08:33 -05:00
|
|
|
TUPLE: person the-id the-name the-number the-real ts date time blob ;
|
2008-02-13 17:51:16 -05:00
|
|
|
: <person> ( name age real -- person )
|
2008-02-12 18:10:56 -05:00
|
|
|
{
|
|
|
|
set-person-the-name
|
|
|
|
set-person-the-number
|
2008-02-21 16:57:18 -05:00
|
|
|
set-person-the-real
|
2008-03-05 20:08:33 -05:00
|
|
|
set-person-ts
|
|
|
|
set-person-date
|
|
|
|
set-person-time
|
|
|
|
set-person-blob
|
2008-02-12 18:10:56 -05:00
|
|
|
} person construct ;
|
2008-02-11 00:11:16 -05:00
|
|
|
|
2008-02-21 16:57:18 -05:00
|
|
|
: <assigned-person> ( id name number the-real -- obj )
|
2008-02-12 18:10:56 -05:00
|
|
|
<person> [ set-person-the-id ] keep ;
|
2008-02-11 00:11:16 -05:00
|
|
|
|
2008-03-05 20:08:33 -05:00
|
|
|
SYMBOL: person1
|
|
|
|
SYMBOL: person2
|
|
|
|
SYMBOL: person3
|
|
|
|
SYMBOL: person4
|
2008-02-11 14:39:43 -05:00
|
|
|
|
2008-02-11 00:11:16 -05:00
|
|
|
: test-tuples ( -- )
|
2008-02-12 18:10:56 -05:00
|
|
|
[ person drop-table ] [ drop ] recover
|
|
|
|
[ ] [ person create-table ] unit-test
|
2008-02-27 19:28:32 -05:00
|
|
|
[ person create-table ] must-fail
|
2008-02-11 14:39:43 -05:00
|
|
|
|
2008-03-05 20:08:33 -05:00
|
|
|
[ ] [ person1 get insert-tuple ] unit-test
|
2008-02-11 00:11:16 -05:00
|
|
|
|
2008-03-05 20:08:33 -05:00
|
|
|
[ 1 ] [ person1 get person-the-id ] unit-test
|
2008-02-11 00:11:16 -05:00
|
|
|
|
2008-03-05 20:08:33 -05:00
|
|
|
200 person1 get set-person-the-number
|
2008-02-11 00:11:16 -05:00
|
|
|
|
2008-03-05 20:08:33 -05:00
|
|
|
[ ] [ person1 get update-tuple ] unit-test
|
2008-02-11 00:11:16 -05:00
|
|
|
|
2008-02-24 13:32:36 -05:00
|
|
|
[ T{ person f 1 "billy" 200 3.14 } ]
|
|
|
|
[ T{ person f 1 } select-tuple ] unit-test
|
2008-03-05 20:08:33 -05:00
|
|
|
[ ] [ person2 get insert-tuple ] unit-test
|
2008-02-25 16:31:07 -05:00
|
|
|
[
|
|
|
|
{
|
|
|
|
T{ person f 1 "billy" 200 3.14 }
|
|
|
|
T{ person f 2 "johnny" 10 3.14 }
|
|
|
|
}
|
|
|
|
] [ T{ person f f f f 3.14 } select-tuples ] unit-test
|
2008-03-03 09:56:06 -05:00
|
|
|
[
|
|
|
|
{
|
|
|
|
T{ person f 1 "billy" 200 3.14 }
|
|
|
|
T{ person f 2 "johnny" 10 3.14 }
|
|
|
|
}
|
|
|
|
] [ T{ person f } select-tuples ] unit-test
|
|
|
|
|
2008-02-21 16:57:18 -05:00
|
|
|
|
2008-03-05 20:08:33 -05:00
|
|
|
[ ] [ person1 get delete-tuple ] unit-test
|
2008-02-25 16:13:00 -05:00
|
|
|
[ f ] [ T{ person f 1 } select-tuple ] unit-test
|
2008-03-05 20:08:33 -05:00
|
|
|
|
|
|
|
[ ] [ person3 get insert-tuple ] unit-test
|
|
|
|
|
|
|
|
[
|
2008-03-05 20:59:29 -05:00
|
|
|
T{
|
|
|
|
person
|
|
|
|
f
|
|
|
|
3
|
|
|
|
"teddy"
|
|
|
|
10
|
|
|
|
3.14
|
2008-03-05 20:08:33 -05:00
|
|
|
T{ timestamp f 2008 3 5 16 24 11 0 }
|
|
|
|
T{ timestamp f 2008 11 22 f f f f }
|
|
|
|
T{ timestamp f f f f 12 34 56 f }
|
2008-03-05 20:59:29 -05:00
|
|
|
B{ 115 116 111 114 101 105 110 97 98 108 111 98 }
|
|
|
|
}
|
2008-03-05 20:08:33 -05:00
|
|
|
] [ T{ person f 3 } select-tuple ] unit-test
|
|
|
|
|
2008-02-25 16:13:00 -05:00
|
|
|
[ ] [ person drop-table ] unit-test ;
|
2008-02-11 00:11:16 -05:00
|
|
|
|
2008-03-03 09:56:06 -05:00
|
|
|
: make-native-person-table ( -- )
|
|
|
|
[ person drop-table ] [ drop ] recover
|
|
|
|
person create-table
|
|
|
|
T{ person f f "billy" 200 3.14 } insert-tuple
|
|
|
|
T{ person f f "johnny" 10 3.14 } insert-tuple
|
|
|
|
;
|
|
|
|
|
|
|
|
: native-person-schema ( -- )
|
|
|
|
person "PERSON"
|
|
|
|
{
|
|
|
|
{ "the-id" "ID" +native-id+ }
|
|
|
|
{ "the-name" "NAME" { VARCHAR 256 } +not-null+ }
|
|
|
|
{ "the-number" "AGE" INTEGER { +default+ 0 } }
|
|
|
|
{ "the-real" "REAL" DOUBLE { +default+ 0.3 } }
|
2008-03-05 20:08:33 -05:00
|
|
|
{ "ts" "TS" TIMESTAMP }
|
|
|
|
{ "date" "D" DATE }
|
|
|
|
{ "time" "T" TIME }
|
|
|
|
{ "blob" "B" BLOB }
|
2008-03-03 09:56:06 -05:00
|
|
|
} define-persistent
|
2008-03-05 20:08:33 -05:00
|
|
|
"billy" 10 3.14 f f f f <person> person1 set
|
|
|
|
"johnny" 10 3.14 f f f f <person> person2 set
|
|
|
|
"teddy" 10 3.14 "2008-03-05 16:24:11" "2008-11-22" "12:34:56" B{ 115 116 111 114 101 105 110 97 98 108 111 98 } <person> person3 set ;
|
2008-03-03 09:56:06 -05:00
|
|
|
|
|
|
|
: assigned-person-schema ( -- )
|
|
|
|
person "PERSON"
|
|
|
|
{
|
|
|
|
{ "the-id" "ID" INTEGER +assigned-id+ }
|
|
|
|
{ "the-name" "NAME" { VARCHAR 256 } +not-null+ }
|
|
|
|
{ "the-number" "AGE" INTEGER { +default+ 0 } }
|
|
|
|
{ "the-real" "REAL" DOUBLE { +default+ 0.3 } }
|
2008-03-05 20:08:33 -05:00
|
|
|
{ "ts" "TS" TIMESTAMP }
|
|
|
|
{ "date" "D" DATE }
|
|
|
|
{ "time" "T" TIME }
|
|
|
|
{ "blob" "B" BLOB }
|
2008-03-03 09:56:06 -05:00
|
|
|
} define-persistent
|
2008-03-05 20:08:33 -05:00
|
|
|
1 "billy" 10 3.14 f f f f <assigned-person> person1 set
|
|
|
|
2 "johnny" 10 3.14 f f f f <assigned-person> person2 set
|
|
|
|
3 "teddy" 10 3.14 "2008-03-05 16:24:11" "2008-11-22" "12:34:56" B{ 115 116 111 114 101 105 110 97 98 108 111 98 } <assigned-person> person3 set ;
|
2008-02-18 17:52:00 -05:00
|
|
|
|
|
|
|
TUPLE: paste n summary author channel mode contents timestamp annotations ;
|
|
|
|
TUPLE: annotation n paste-id summary author mode contents ;
|
|
|
|
|
2008-03-03 09:56:06 -05:00
|
|
|
: native-paste-schema ( -- )
|
|
|
|
paste "PASTE"
|
|
|
|
{
|
|
|
|
{ "n" "ID" +native-id+ }
|
|
|
|
{ "summary" "SUMMARY" TEXT }
|
|
|
|
{ "author" "AUTHOR" TEXT }
|
|
|
|
{ "channel" "CHANNEL" TEXT }
|
|
|
|
{ "mode" "MODE" TEXT }
|
|
|
|
{ "contents" "CONTENTS" TEXT }
|
|
|
|
{ "date" "DATE" TIMESTAMP }
|
|
|
|
{ "annotations" { +has-many+ annotation } }
|
|
|
|
} define-persistent
|
|
|
|
|
|
|
|
annotation "ANNOTATION"
|
|
|
|
{
|
|
|
|
{ "n" "ID" +native-id+ }
|
|
|
|
{ "paste-id" "PASTE_ID" INTEGER { +foreign-id+ paste "n" } }
|
|
|
|
{ "summary" "SUMMARY" TEXT }
|
|
|
|
{ "author" "AUTHOR" TEXT }
|
|
|
|
{ "mode" "MODE" TEXT }
|
|
|
|
{ "contents" "CONTENTS" TEXT }
|
|
|
|
} define-persistent ;
|
2008-02-18 17:52:00 -05:00
|
|
|
|
2008-02-27 19:28:32 -05:00
|
|
|
! { "localhost" "postgres" "" "factor-test" } postgresql-db [
|
|
|
|
! [ paste drop-table ] [ drop ] recover
|
|
|
|
! [ annotation drop-table ] [ drop ] recover
|
|
|
|
! [ paste drop-table ] [ drop ] recover
|
|
|
|
! [ annotation drop-table ] [ drop ] recover
|
|
|
|
! [ ] [ paste create-table ] unit-test
|
|
|
|
! [ ] [ annotation create-table ] unit-test
|
|
|
|
! ] with-db
|
2008-03-03 09:56:06 -05:00
|
|
|
|
|
|
|
|
|
|
|
: test-sqlite ( quot -- )
|
|
|
|
>r "tuples-test.db" resource-path sqlite-db r> with-db ;
|
|
|
|
|
|
|
|
: test-postgresql ( -- )
|
|
|
|
>r { "localhost" "postgres" "" "factor-test" } postgresql-db r> with-db ;
|
|
|
|
|
2008-03-05 20:08:33 -05:00
|
|
|
|
2008-03-05 20:59:29 -05:00
|
|
|
[ native-person-schema test-tuples ] test-sqlite
|
|
|
|
[ assigned-person-schema test-tuples ] test-sqlite
|
2008-03-05 20:08:33 -05:00
|
|
|
|
|
|
|
TUPLE: serialize-me id data ;
|
|
|
|
[
|
|
|
|
serialize-me "SERIALIZED"
|
|
|
|
{
|
|
|
|
{ "id" "ID" +native-id+ }
|
|
|
|
{ "data" "DATA" FACTOR-BLOB }
|
|
|
|
} define-persistent
|
|
|
|
[ serialize-me drop-table ] [ drop ] recover
|
|
|
|
[ ] [ serialize-me create-table ] unit-test
|
|
|
|
|
|
|
|
[ ] [ T{ serialize-me f f H{ { 1 2 } } } insert-tuple ] unit-test
|
2008-03-05 20:59:29 -05:00
|
|
|
[
|
|
|
|
{ T{ serialize-me f 1 H{ { 1 2 } } } }
|
|
|
|
] [ T{ serialize-me f 1 } select-tuples ] unit-test
|
2008-03-05 20:08:33 -05:00
|
|
|
] test-sqlite
|
2008-03-03 09:56:06 -05:00
|
|
|
|
|
|
|
! [ make-native-person-table ] test-sqlite
|