File tree Expand file tree Collapse file tree 3 files changed +24
-5
lines changed Expand file tree Collapse file tree 3 files changed +24
-5
lines changed Original file line number Diff line number Diff line change @@ -523,22 +523,24 @@ fn prepare_one_select_plan(
523523 } ) ;
524524 }
525525
526+ let mut table_references = TableReferences :: new ( vec ! [ ] , outer_query_refs. to_vec ( ) ) ;
526527 for value_row in values. iter_mut ( ) {
527528 for value in value_row. iter_mut ( ) {
529+ // Before binding, we check for unquoted literals. Sqlite throws an error in this case
528530 bind_and_rewrite_expr (
529531 value,
530- None ,
532+ Some ( & mut table_references ) ,
531533 None ,
532534 connection,
533535 // Allow sqlite quirk of inserting "double-quoted" literals (which our AST maps as identifiers)
534- BindingBehavior :: AllowUnboundIdentifiers ,
536+ BindingBehavior :: TryResultColumnsFirst ,
535537 ) ?;
536538 }
537539 }
538540
539541 let plan = SelectPlan {
540542 join_order : vec ! [ ] ,
541- table_references : TableReferences :: new ( vec ! [ ] , vec ! [ ] ) ,
543+ table_references,
542544 result_columns,
543545 where_clause : vec ! [ ] ,
544546 group_by : None ,
Original file line number Diff line number Diff line change @@ -63,7 +63,7 @@ fn emit_values_when_single_row(
6363 for ( i, v) in first_row. iter ( ) . enumerate ( ) {
6464 translate_expr_no_constant_opt (
6565 program,
66- None ,
66+ Some ( & plan . table_references ) ,
6767 v,
6868 start_reg + i,
6969 & t_ctx. resolver ,
Original file line number Diff line number Diff line change @@ -60,4 +60,21 @@ do_execsql_test_on_specific_db {:memory:} values-between {
6060do_execsql_test_in_memory_any_error values-illegal-column-ref {
6161 CREATE TABLE t0 (c0);
6262 INSERT INTO t0 VALUES (c0);
63- }
63+ }
64+
65+ # Unquoted identifiers in VALUES should produce a parse error
66+ do_execsql_test_in_memory_error_content values-unquoted-identifier-single {
67+ values(asdf);
68+ } {Parse error: no such column: asdf}
69+
70+ do_execsql_test_in_memory_error_content values-unquoted-identifier-mixed {
71+ values(1, asdf);
72+ } {Parse error: no such column: asdf}
73+
74+ # Also verify correlated VALUES references outer columns row-by-row
75+ do_execsql_test_on_specific_db {:memory:} values-correlated-values-in-select {
76+ CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);
77+ INSERT INTO users (name) VALUES ('jack'), ('jill');
78+ SELECT id, (VALUES(name)) AS name_again FROM users;
79+ } {1|jack
80+ 2|jill}
You can’t perform that action at this time.
0 commit comments