diff --git a/core/translate/trigger.rs b/core/translate/trigger.rs index 0d8d64b2dc..8107ef3276 100644 --- a/core/translate/trigger.rs +++ b/core/translate/trigger.rs @@ -95,6 +95,10 @@ pub fn translate_create_trigger( let normalized_trigger_name = normalize_ident(trigger_name.name.as_str()); let normalized_table_name = normalize_ident(tbl_name.name.as_str()); + if crate::schema::is_system_table(&normalized_table_name) { + bail_parse_error!("cannot create trigger on system table"); + } + // Check if trigger already exists if resolver .schema diff --git a/testing/trigger.test b/testing/trigger.test index 1da0d4aa46..3fca7a8409 100755 --- a/testing/trigger.test +++ b/testing/trigger.test @@ -773,4 +773,10 @@ do_execsql_test_on_specific_db {:memory:} trigger-drop-make-same-table{ select * from a; select * from t1; } {1|5000 -2|3000} \ No newline at end of file +2|3000} + +do_execsql_test_in_memory_any_error trigger-cannot-create-on-system-table { + create trigger t after insert on sqlite_master begin + select 1; + end; +}