db.sqlite: fix text of generated triggers

An opening brace was missing for some variables
char-rename
Björn Lindqvist 2016-08-25 13:10:42 +02:00
parent 0e937e8464
commit 66083e263c
2 changed files with 52 additions and 9 deletions

View File

@ -1,9 +1,52 @@
USING: io io.files io.files.temp io.directories io.launcher USING: accessors arrays db db.sqlite db.tuples db.types io.directories
kernel namespaces prettyprint tools.test db.sqlite db sequences io.files.temp kernel layouts literals math.parser namespaces sequences
continuations db.types db.tuples unicode accessors arrays sorting splitting tools.test ;
sorting layouts math.parser ;
IN: db.sqlite.tests 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 ; : db-path ( -- path ) "test-" cell number>string ".db" 3append temp-file ;
: test.db ( -- sqlite-db ) db-path <sqlite-db> ; : test.db ( -- sqlite-db ) db-path <sqlite-db> ;

View File

@ -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 CREATE TRIGGER fki_${table-name}_${table-id}_${foreign-table-name}_${foreign-table-id}_id
BEFORE INSERT ON ${table-name} BEFORE INSERT ON ${table-name}
FOR EACH ROW BEGIN 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; WHERE (SELECT ${foreign-table-id} FROM ${foreign-table-name} WHERE ${foreign-table-id} = NEW.${table-id}) IS NULL;
END; END;
" interpolate>string ; " interpolate>string ;
@ -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 CREATE TRIGGER fki_${table-name}_${table-id}_${foreign-table-name}_${foreign-table-id}_id
BEFORE INSERT ON ${table-name} BEFORE INSERT ON ${table-name}
FOR EACH ROW BEGIN 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 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; AND (SELECT ${foreign-table-id} FROM ${foreign-table-name} WHERE ${foreign-table-id} = NEW.${table-id}) IS NULL;
END; END;
@ -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 CREATE TRIGGER fku_${table-name}_${table-id}_${foreign-table-name}_${foreign-table-id}_id
BEFORE UPDATE ON ${table-name} BEFORE UPDATE ON ${table-name}
FOR EACH ROW BEGIN 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; WHERE (SELECT ${foreign-table-id} FROM ${foreign-table-name} WHERE ${foreign-table-id} = NEW.${table-id}) IS NULL;
END; END;
" interpolate>string ; " interpolate>string ;
@ -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 CREATE TRIGGER fku_${table-name}_${table-id}_${foreign-table-name}_${foreign-table-id}_id
BEFORE UPDATE ON ${table-name} BEFORE UPDATE ON ${table-name}
FOR EACH ROW BEGIN 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 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; AND (SELECT ${foreign-table-id} FROM ${foreign-table-name} WHERE ${foreign-table-id} = NEW.${table-id}) IS NULL;
END; END;
@ -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 CREATE TRIGGER fkd_${table-name}_${table-id}_${foreign-table-name}_${foreign-table-id}_id
BEFORE DELETE ON ${foreign-table-name} BEFORE DELETE ON ${foreign-table-name}
FOR EACH ROW BEGIN 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; WHERE (SELECT ${foreign-table-id} FROM ${foreign-table-name} WHERE ${foreign-table-id} = OLD.${foreign-table-id}) IS NOT NULL;
END; END;
" interpolate>string ; " interpolate>string ;