Skip to content

Commit

Permalink
Fix usages of sqlite3_error_msg
Browse files Browse the repository at this point in the history
  • Loading branch information
gwenn committed Mar 16, 2024
1 parent 230dd8b commit 6efb823
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 15 deletions.
35 changes: 32 additions & 3 deletions src/lexer/sql/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,11 @@ fn create_table_without_column() {

#[test]
fn vtab_args() -> Result<(), Error> {
let sql = r#"CREATE VIRTUAL TABLE mail USING fts3(
let sql = b"CREATE VIRTUAL TABLE mail USING fts3(
subject VARCHAR(256) NOT NULL,
body TEXT CHECK(length(body)<10240)
);"#;
let r = parse_cmd(sql.as_bytes());
);";
let r = parse_cmd(sql);
let Cmd::Stmt(Stmt::CreateVirtualTable {
tbl_name: QualifiedName {
name: Name(tbl_name),
Expand Down Expand Up @@ -293,6 +293,35 @@ fn unknown_table_option() {
expect_parser_err_msg(b"CREATE TABLE t(x) WITHOUT o", "unknown table option: o");
}

#[test]
fn qualified_table_name_within_triggers() {
expect_parser_err_msg(
b"CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN
DELETE FROM main.t2;
END;",
"qualified table names are not allowed on INSERT, UPDATE, and DELETE statements \
within triggers",
);
}

#[test]
fn indexed_by_clause_within_triggers() {
expect_parser_err_msg(
b"CREATE TRIGGER main.t16err5 AFTER INSERT ON tA BEGIN
UPDATE t16 INDEXED BY t16a SET rowid=rowid+1 WHERE a=1;
END;",
"the INDEXED BY clause is not allowed on UPDATE or DELETE statements \
within triggers",
);
expect_parser_err_msg(
b"CREATE TRIGGER main.t16err6 AFTER INSERT ON tA BEGIN
DELETE FROM t16 NOT INDEXED WHERE a=123;
END;",
"the NOT INDEXED clause is not allowed on UPDATE or DELETE statements \
within triggers",
);
}

fn expect_parser_err_msg(input: &[u8], error_msg: &str) {
expect_parser_err(input, ParserError::Custom(error_msg.to_owned()))
}
Expand Down
5 changes: 0 additions & 5 deletions src/parser/mod.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
//! SQLite parser
use log::error;
pub mod ast;
pub mod parse {
Expand Down Expand Up @@ -134,10 +133,6 @@ impl<'input> Context<'input> {
self.module_args.take()
}

fn sqlite3_error_msg(&mut self, msg: &str) {
error!("parser error: {}", msg);
}

/// This routine is called after a single SQL statement has been parsed.
fn sqlite3_finish_coding(&mut self) {
self.done = true;
Expand Down
13 changes: 6 additions & 7 deletions src/parser/parse.y
Original file line number Diff line number Diff line change
Expand Up @@ -1210,9 +1210,8 @@ trigger_cmd_list(A) ::= trigger_cmd(X) SEMI. {
trnm(A) ::= nm(A).
trnm(A) ::= nm DOT nm(X). {
A = X;
self.ctx.sqlite3_error_msg(
"qualified table names are not allowed on INSERT, UPDATE, and DELETE \
statements within triggers");
return Err(custom_err!("qualified table names are not allowed on INSERT, UPDATE, and DELETE \
statements within triggers"));
}

// Disallow the INDEX BY and NOT INDEXED clauses on UPDATE and DELETE
Expand All @@ -1221,14 +1220,14 @@ trnm(A) ::= nm DOT nm(X). {
//
tridxby ::= .
tridxby ::= INDEXED BY nm. {
self.ctx.sqlite3_error_msg(
return Err(custom_err!(
"the INDEXED BY clause is not allowed on UPDATE or DELETE statements \
within triggers");
within triggers"));
}
tridxby ::= NOT INDEXED. {
self.ctx.sqlite3_error_msg(
return Err(custom_err!(
"the NOT INDEXED clause is not allowed on UPDATE or DELETE statements \
within triggers");
within triggers"));
}


Expand Down

0 comments on commit 6efb823

Please sign in to comment.