fix randomly generated ids

db4
Doug Coleman 2008-04-28 17:17:19 -05:00
parent 9ceedc4fbc
commit 1c2d252ffd
4 changed files with 15 additions and 9 deletions

View File

@ -49,7 +49,8 @@ M: literal-bind postgresql-bind-conversion ( tuple literal-bind -- obj )
nip value>> <low-level-binding> ;
M: generator-bind postgresql-bind-conversion ( tuple generate-bind -- obj )
nip generator-singleton>> eval-generator <low-level-binding> ;
dup generator-singleton>> eval-generator
[ swap slot-name>> rot set-slot-named ] [ <low-level-binding> ] bi ;
M: postgresql-statement bind-tuple ( tuple statement -- )
tuck in-params>>
@ -205,8 +206,10 @@ M: postgresql-db <insert-user-assigned-statement> ( class -- statement )
[ ", " 0% ] [
dup type>> +random-id+ = [
[
drop bind-name%
f random-id-generator
bind-name%
slot-name>>
f
random-id-generator
] [ type>> ] bi <generator-bind> 1,
] [
bind%

View File

@ -79,8 +79,10 @@ M: literal-bind sqlite-bind-conversion ( tuple literal-bind -- array )
<sqlite-low-level-binding> ;
M: generator-bind sqlite-bind-conversion ( tuple generate-bind -- array )
nip [ key>> ] [ generator-singleton>> eval-generator ] [ type>> ] tri
<sqlite-low-level-binding> ;
tuck
[ generator-singleton>> eval-generator tuck ] [ slot-name>> ] bi
rot set-slot-named
>r [ key>> ] [ type>> ] bi r> swap <sqlite-low-level-binding> ;
M: sqlite-statement bind-tuple ( tuple statement -- )
[
@ -138,10 +140,11 @@ M: sqlite-db <insert-db-assigned-statement> ( tuple -- statement )
") values(" 0%
[ ", " 0% ] [
dup type>> +random-id+ = [
[ slot-name>> ]
[
column-name>> ":" prepend dup 0%
random-id-generator
] [ type>> ] bi <generator-bind> 1,
] [ type>> ] tri <generator-bind> 1,
] [
bind%
] if

View File

@ -330,7 +330,7 @@ C: <secret> secret
[ ] [ secret ensure-table ] unit-test
[ ] [ f "kilroy was here" <secret> insert-tuple ] unit-test
[ t ] [ f "kilroy was here" <secret> [ insert-tuple ] keep n>> integer? ] unit-test
[ ] [ f "kilroy was here2" <secret> insert-tuple ] unit-test
@ -342,7 +342,7 @@ C: <secret> secret
] unit-test
[ t ] [
T{ secret } select-tuples length 3 =
T{ secret } select-tuples dup . length 3 =
] unit-test ;
[ db-assigned-person-schema test-tuples ] test-sqlite

View File

@ -15,7 +15,7 @@ TUPLE: sql-spec class slot-name column-name type primary-key modifiers ;
TUPLE: literal-bind key type value ;
C: <literal-bind> literal-bind
TUPLE: generator-bind key generator-singleton type ;
TUPLE: generator-bind slot-name key generator-singleton type ;
C: <generator-bind> generator-bind
SINGLETON: random-id-generator