diff --git a/cmd/tools/vtest-self.v b/cmd/tools/vtest-self.v index 03c62ccdff..24e955923c 100644 --- a/cmd/tools/vtest-self.v +++ b/cmd/tools/vtest-self.v @@ -159,6 +159,7 @@ const skip_with_fsanitize_memory = [ 'vlib/v/tests/orm_joined_tables_select_test.v', 'vlib/v/tests/sql_statement_inside_fn_call_test.v', 'vlib/v/tests/orm_stmt_wrong_return_checking_test.v', + 'vlib/v/tests/orm_table_name_test.v', 'vlib/v/tests/orm_handle_error_for_select_from_not_created_table_test.v', 'vlib/vweb/tests/vweb_test.v', 'vlib/vweb/csrf/csrf_test.v', @@ -244,6 +245,7 @@ const skip_on_ubuntu_musl = [ 'vlib/v/tests/orm_sub_array_struct_test.v', 'vlib/v/tests/orm_joined_tables_select_test.v', 'vlib/v/tests/orm_stmt_wrong_return_checking_test.v', + 'vlib/v/tests/orm_table_name_test.v', 'vlib/v/tests/orm_handle_error_for_select_from_not_created_table_test.v', 'vlib/v/tests/sql_statement_inside_fn_call_test.v', 'vlib/clipboard/clipboard_test.v', diff --git a/vlib/v/gen/c/orm.v b/vlib/v/gen/c/orm.v index 270671e7b8..d399d45540 100644 --- a/vlib/v/gen/c/orm.v +++ b/vlib/v/gen/c/orm.v @@ -809,6 +809,7 @@ fn (mut g Gen) write_orm_select(node ast.SqlExpr, connection_var_name string, re select_result_var_name := g.new_tmp_var() table_name := g.get_table_name_by_struct_type(node.table_expr.typ) + escaped_table_name := cescape_nonascii(util.smart_quote(table_name, false)) g.sql_table_name = g.table.sym(node.table_expr.typ).name g.writeln('// sql { select from `${table_name}` }') @@ -817,7 +818,7 @@ fn (mut g Gen) write_orm_select(node ast.SqlExpr, connection_var_name string, re g.writeln('${connection_var_name}._object, // Connection object') g.writeln('(orm__SelectConfig){') g.indent++ - g.writeln('.table = _SLIT("${table_name}"),') + g.writeln('.table = _SLIT("${escaped_table_name}"),') g.writeln('.is_count = ${node.is_count},') g.writeln('.has_where = ${node.has_where},') g.writeln('.has_order = ${node.has_order},') diff --git a/vlib/v/tests/orm_table_name_test.v b/vlib/v/tests/orm_table_name_test.v new file mode 100644 index 0000000000..faecad4057 --- /dev/null +++ b/vlib/v/tests/orm_table_name_test.v @@ -0,0 +1,17 @@ +import db.sqlite + +@[table: '"specific name"'] +struct ORMTableSpecificName { + dummy int +} + +fn test_orm_table_name() { + db := sqlite.connect(':memory:') or { panic(err) } + r := sql db { + select from ORMTableSpecificName + } or { + assert true + return + } + assert false +}