diff --git a/extra/db/postgresql/postgresql.factor b/extra/db/postgresql/postgresql.factor index e728f2f011..9f747082c6 100755 --- a/extra/db/postgresql/postgresql.factor +++ b/extra/db/postgresql/postgresql.factor @@ -49,7 +49,8 @@ M: literal-bind postgresql-bind-conversion ( tuple literal-bind -- obj ) nip value>> ; M: generator-bind postgresql-bind-conversion ( tuple generate-bind -- obj ) - nip generator-singleton>> eval-generator ; + dup generator-singleton>> eval-generator + [ swap slot-name>> rot set-slot-named ] [ ] bi ; M: postgresql-statement bind-tuple ( tuple statement -- ) tuck in-params>> @@ -205,8 +206,10 @@ M: postgresql-db ( class -- statement ) [ ", " 0% ] [ dup type>> +random-id+ = [ [ - drop bind-name% - f random-id-generator + bind-name% + slot-name>> + f + random-id-generator ] [ type>> ] bi 1, ] [ bind% diff --git a/extra/db/sqlite/sqlite.factor b/extra/db/sqlite/sqlite.factor index 6297f89d8e..4aaa9668f0 100755 --- a/extra/db/sqlite/sqlite.factor +++ b/extra/db/sqlite/sqlite.factor @@ -79,8 +79,10 @@ M: literal-bind sqlite-bind-conversion ( tuple literal-bind -- array ) ; M: generator-bind sqlite-bind-conversion ( tuple generate-bind -- array ) - nip [ key>> ] [ generator-singleton>> eval-generator ] [ type>> ] tri - ; + tuck + [ generator-singleton>> eval-generator tuck ] [ slot-name>> ] bi + rot set-slot-named + >r [ key>> ] [ type>> ] bi r> swap ; M: sqlite-statement bind-tuple ( tuple statement -- ) [ @@ -138,10 +140,11 @@ M: sqlite-db ( tuple -- statement ) ") values(" 0% [ ", " 0% ] [ dup type>> +random-id+ = [ + [ slot-name>> ] [ column-name>> ":" prepend dup 0% random-id-generator - ] [ type>> ] bi 1, + ] [ type>> ] tri 1, ] [ bind% ] if diff --git a/extra/db/tuples/tuples-tests.factor b/extra/db/tuples/tuples-tests.factor index 7b22a3c594..f5f229bfd2 100755 --- a/extra/db/tuples/tuples-tests.factor +++ b/extra/db/tuples/tuples-tests.factor @@ -330,7 +330,7 @@ C: secret [ ] [ secret ensure-table ] unit-test - [ ] [ f "kilroy was here" insert-tuple ] unit-test + [ t ] [ f "kilroy was here" [ insert-tuple ] keep n>> integer? ] unit-test [ ] [ f "kilroy was here2" insert-tuple ] unit-test @@ -342,7 +342,7 @@ C: 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 diff --git a/extra/db/types/types.factor b/extra/db/types/types.factor index e11d246643..8328bd7626 100755 --- a/extra/db/types/types.factor +++ b/extra/db/types/types.factor @@ -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 -TUPLE: generator-bind key generator-singleton type ; +TUPLE: generator-bind slot-name key generator-singleton type ; C: generator-bind SINGLETON: random-id-generator