Skip to content

Commit

Permalink
db.sqlite: fix text of generated triggers
Browse files Browse the repository at this point in the history
An opening brace was missing for some variables
  • Loading branch information
bjourne committed Aug 25, 2016
1 parent 0e937e8 commit 66083e2
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 9 deletions.
51 changes: 47 additions & 4 deletions basis/db/sqlite/sqlite-tests.factor
@@ -1,9 +1,52 @@
USING: io io.files io.files.temp io.directories io.launcher
kernel namespaces prettyprint tools.test db.sqlite db sequences
continuations db.types db.tuples unicode accessors arrays
sorting layouts math.parser ;
USING: accessors arrays db db.sqlite db.tuples db.types io.directories
io.files.temp kernel layouts literals math.parser namespaces sequences
sorting splitting tools.test ;
IN: db.sqlite.tests

: normalize ( str -- str' )
" \n" split harvest " " join ;

! delete-trigger-restrict
${
{
"CREATE TRIGGER fkd_TREE_NODE_NODE_ID_id "
"BEFORE DELETE ON NODE "
"FOR EACH ROW BEGIN "
"SELECT RAISE(ROLLBACK, "
"'delete on table \"NODE\" violates "
"foreign key constraint \"fkd_TREE_NODE_NODE_ID_id\"') "
"WHERE (SELECT ID FROM NODE WHERE ID = OLD.ID) IS NOT NULL; END;"
} concat
} [
{
{ "table-name" "TREE" }
{ "table-id" "NODE" }
{ "foreign-table-name" "NODE"}
{ "foreign-table-id" "ID" }
} [ delete-trigger-restrict ] with-variables
normalize
] unit-test

! insert-trigger
${
{
"CREATE TRIGGER fki_TREE_NODE_NODE_ID_id "
"BEFORE INSERT ON TREE "
"FOR EACH ROW BEGIN "
"SELECT RAISE(ROLLBACK, "
"'insert on table \"TREE\" violates "
"foreign key constraint \"fki_TREE_NODE_NODE_ID_id\"') "
"WHERE (SELECT ID FROM NODE WHERE ID = NEW.NODE) IS NULL; END;"
} concat
} [
{
{ "table-name" "TREE" }
{ "table-id" "NODE" }
{ "foreign-table-name" "NODE"}
{ "foreign-table-id" "ID" }
} [ insert-trigger ] with-variables normalize
] unit-test

: db-path ( -- path ) "test-" cell number>string ".db" 3append temp-file ;
: test.db ( -- sqlite-db ) db-path <sqlite-db> ;

Expand Down
10 changes: 5 additions & 5 deletions basis/db/sqlite/sqlite.factor
Expand Up @@ -200,7 +200,7 @@ M: sqlite-db-connection persistent-table ( -- assoc )
CREATE TRIGGER fki_${table-name}_${table-id}_${foreign-table-name}_${foreign-table-id}_id
BEFORE INSERT ON ${table-name}
FOR EACH ROW BEGIN
SELECT RAISE(ROLLBACK, 'insert on table \"${table-name}\" violates foreign key constraint \"fki_${table-name}_$table-id}_${foreign-table-name}_${foreign-table-id}_id\"')
SELECT RAISE(ROLLBACK, 'insert on table \"${table-name}\" violates foreign key constraint \"fki_${table-name}_${table-id}_${foreign-table-name}_${foreign-table-id}_id\"')
WHERE (SELECT ${foreign-table-id} FROM ${foreign-table-name} WHERE ${foreign-table-id} = NEW.${table-id}) IS NULL;
END;
" interpolate>string ;
Expand All @@ -210,7 +210,7 @@ M: sqlite-db-connection persistent-table ( -- assoc )
CREATE TRIGGER fki_${table-name}_${table-id}_${foreign-table-name}_${foreign-table-id}_id
BEFORE INSERT ON ${table-name}
FOR EACH ROW BEGIN
SELECT RAISE(ROLLBACK, 'insert on table \"${table-name}\" violates foreign key constraint \"fki_${table-name}_$table-id}_${foreign-table-name}_${foreign-table-id}_id\"')
SELECT RAISE(ROLLBACK, 'insert on table \"${table-name}\" violates foreign key constraint \"fki_${table-name}_${table-id}_${foreign-table-name}_${foreign-table-id}_id\"')
WHERE NEW.${table-id} IS NOT NULL
AND (SELECT ${foreign-table-id} FROM ${foreign-table-name} WHERE ${foreign-table-id} = NEW.${table-id}) IS NULL;
END;
Expand All @@ -221,7 +221,7 @@ M: sqlite-db-connection persistent-table ( -- assoc )
CREATE TRIGGER fku_${table-name}_${table-id}_${foreign-table-name}_${foreign-table-id}_id
BEFORE UPDATE ON ${table-name}
FOR EACH ROW BEGIN
SELECT RAISE(ROLLBACK, 'update on table \"${table-name}\" violates foreign key constraint \"fku_${table-name}_$table-id}_${foreign-table-name}_${foreign-table-id}_id\"')
SELECT RAISE(ROLLBACK, 'update on table \"${table-name}\" violates foreign key constraint \"fku_${table-name}_${table-id}_${foreign-table-name}_${foreign-table-id}_id\"')
WHERE (SELECT ${foreign-table-id} FROM ${foreign-table-name} WHERE ${foreign-table-id} = NEW.${table-id}) IS NULL;
END;
" interpolate>string ;
Expand All @@ -231,7 +231,7 @@ M: sqlite-db-connection persistent-table ( -- assoc )
CREATE TRIGGER fku_${table-name}_${table-id}_${foreign-table-name}_${foreign-table-id}_id
BEFORE UPDATE ON ${table-name}
FOR EACH ROW BEGIN
SELECT RAISE(ROLLBACK, 'update on table \"${table-name}\" violates foreign key constraint \"fku_${table-name}_$table-id}_${foreign-table-name}_${foreign-table-id}_id\"')
SELECT RAISE(ROLLBACK, 'update on table \"${table-name}\" violates foreign key constraint \"fku_${table-name}_${table-id}_${foreign-table-name}_${foreign-table-id}_id\"')
WHERE NEW.${table-id} IS NOT NULL
AND (SELECT ${foreign-table-id} FROM ${foreign-table-name} WHERE ${foreign-table-id} = NEW.${table-id}) IS NULL;
END;
Expand All @@ -242,7 +242,7 @@ M: sqlite-db-connection persistent-table ( -- assoc )
CREATE TRIGGER fkd_${table-name}_${table-id}_${foreign-table-name}_${foreign-table-id}_id
BEFORE DELETE ON ${foreign-table-name}
FOR EACH ROW BEGIN
SELECT RAISE(ROLLBACK, 'delete on table \"${foreign-table-name}\" violates foreign key constraint \"fkd_${table-name}_$table-id}_${foreign-table-name}_${foreign-table-id}_id\"')
SELECT RAISE(ROLLBACK, 'delete on table \"${foreign-table-name}\" violates foreign key constraint \"fkd_${table-name}_${table-id}_${foreign-table-name}_${foreign-table-id}_id\"')
WHERE (SELECT ${foreign-table-id} FROM ${foreign-table-name} WHERE ${foreign-table-id} = OLD.${foreign-table-id}) IS NOT NULL;
END;
" interpolate>string ;
Expand Down

0 comments on commit 66083e2

Please sign in to comment.