diff --git a/Tests/LibSQL/TestSqlStatementExecution.cpp b/Tests/LibSQL/TestSqlStatementExecution.cpp index a96632c257..2cb23b0554 100644 --- a/Tests/LibSQL/TestSqlStatementExecution.cpp +++ b/Tests/LibSQL/TestSqlStatementExecution.cpp @@ -137,6 +137,28 @@ TEST_CASE(insert_wrong_number_of_values) EXPECT(result->inserted() == 0); } +TEST_CASE(insert_identifier_as_value) +{ + ScopeGuard guard([]() { unlink(db_name); }); + auto database = SQL::Database::construct(db_name); + EXPECT(!database->open().is_error()); + create_table(database); + auto result = execute(database, "INSERT INTO TestSchema.TestTable VALUES ( identifier, 42 );"); + EXPECT(result->error().code == SQL::SQLErrorCode::SyntaxError); + EXPECT(result->inserted() == 0); +} + +TEST_CASE(insert_quoted_identifier_as_value) +{ + ScopeGuard guard([]() { unlink(db_name); }); + auto database = SQL::Database::construct(db_name); + EXPECT(!database->open().is_error()); + create_table(database); + auto result = execute(database, "INSERT INTO TestSchema.TestTable VALUES ( \"QuotedIdentifier\", 42 );"); + EXPECT(result->error().code == SQL::SQLErrorCode::SyntaxError); + EXPECT(result->inserted() == 0); +} + TEST_CASE(insert_without_column_names) { ScopeGuard guard([]() { unlink(db_name); }); diff --git a/Userland/Libraries/LibSQL/AST/Expression.cpp b/Userland/Libraries/LibSQL/AST/Expression.cpp index d4030b3532..ce4c972e0c 100644 --- a/Userland/Libraries/LibSQL/AST/Expression.cpp +++ b/Userland/Libraries/LibSQL/AST/Expression.cpp @@ -169,6 +169,10 @@ Value UnaryOperatorExpression::evaluate(ExecutionContext& context) const Value ColumnNameExpression::evaluate(ExecutionContext& context) const { + if (!context.current_row) { + context.result->set_error(SQLErrorCode::SyntaxError, column_name()); + return Value::null(); + } auto& descriptor = *context.current_row->descriptor(); VERIFY(context.current_row->size() == descriptor.size()); Optional index_in_row;