mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
sql: fix wrong field name on generated code (#17684)
This commit is contained in:
parent
68955bb26c
commit
9e7aeec215
@ -124,6 +124,7 @@ const (
|
||||
'vlib/orm/orm_sql_or_blocks_test.v',
|
||||
'vlib/orm/orm_create_and_drop_test.v',
|
||||
'vlib/orm/orm_insert_test.v',
|
||||
'vlib/orm/orm_insert_reserved_name_test.v',
|
||||
'vlib/orm/orm_fn_calls_test.v',
|
||||
'vlib/orm/orm_last_id_test.v',
|
||||
'vlib/orm/orm_string_interpolation_in_where_test.v',
|
||||
@ -155,6 +156,7 @@ const (
|
||||
'vlib/net/websocket/websocket_test.v',
|
||||
'vlib/orm/orm_create_and_drop_test.v',
|
||||
'vlib/orm/orm_insert_test.v',
|
||||
'vlib/orm/orm_insert_reserved_name_test.v',
|
||||
'vlib/v/tests/websocket_logger_interface_should_compile_test.v',
|
||||
'vlib/v/tests/orm_sub_array_struct_test.v',
|
||||
'vlib/v/tests/orm_handle_error_for_select_from_not_created_table_test.v',
|
||||
@ -163,6 +165,7 @@ const (
|
||||
'do_not_remove',
|
||||
'vlib/orm/orm_create_and_drop_test.v',
|
||||
'vlib/orm/orm_insert_test.v',
|
||||
'vlib/orm/orm_insert_reserved_name_test.v',
|
||||
'vlib/v/tests/orm_sub_array_struct_test.v',
|
||||
'vlib/v/tests/orm_handle_error_for_select_from_not_created_table_test.v',
|
||||
]
|
||||
@ -196,6 +199,7 @@ const (
|
||||
'vlib/orm/orm_sql_or_blocks_test.v',
|
||||
'vlib/orm/orm_create_and_drop_test.v',
|
||||
'vlib/orm/orm_insert_test.v',
|
||||
'vlib/orm/orm_insert_reserved_name_test.v',
|
||||
'vlib/orm/orm_fn_calls_test.v',
|
||||
'vlib/orm/orm_last_id_test.v',
|
||||
'vlib/orm/orm_string_interpolation_in_where_test.v',
|
||||
|
33
vlib/orm/orm_insert_reserved_name_test.v
Normal file
33
vlib/orm/orm_insert_reserved_name_test.v
Normal file
@ -0,0 +1,33 @@
|
||||
import db.sqlite
|
||||
|
||||
[table: 'bad_table']
|
||||
struct Bad {
|
||||
id int [primary; sql: serial]
|
||||
link string
|
||||
}
|
||||
|
||||
fn test_insert_with_reserved_name() {
|
||||
db := sqlite.connect(':memory:') or { panic(err) }
|
||||
|
||||
bad := Bad{
|
||||
link: 'test'
|
||||
}
|
||||
sql db {
|
||||
create table Bad
|
||||
}
|
||||
sql db {
|
||||
insert bad into Bad
|
||||
}
|
||||
|
||||
sql db {
|
||||
insert bad into Bad
|
||||
insert bad into Bad
|
||||
insert bad into Bad
|
||||
}
|
||||
|
||||
rows := sql db {
|
||||
select from Bad
|
||||
}
|
||||
|
||||
assert rows.len == 4
|
||||
}
|
@ -200,7 +200,7 @@ fn (mut g Gen) sql_insert(node ast.SqlStmtLine, expr string, table_name string,
|
||||
typ = 'time'
|
||||
}
|
||||
|
||||
g.write('orm__${typ}_to_primitive(${node.object_var_name}${member_access_type}${f.name}),')
|
||||
g.write('orm__${typ}_to_primitive(${node.object_var_name}${member_access_type}${c_name(f.name)}),')
|
||||
}
|
||||
g.write('})')
|
||||
} else {
|
||||
@ -216,13 +216,14 @@ fn (mut g Gen) sql_insert(node ast.SqlStmtLine, expr string, table_name string,
|
||||
mut id_name := g.new_tmp_var()
|
||||
g.writeln('orm__Primitive ${id_name} = orm__int_to_primitive(orm__Connection_name_table[${expr}._typ]._method_last_id(${expr}._object));')
|
||||
for i, mut arr in arrs {
|
||||
c_field_name := c_name(field_names[i])
|
||||
idx := g.new_tmp_var()
|
||||
g.writeln('for (int ${idx} = 0; ${idx} < ${arr.object_var_name}${member_access_type}${field_names[i]}.len; ${idx}++) {')
|
||||
g.writeln('for (int ${idx} = 0; ${idx} < ${arr.object_var_name}${member_access_type}${c_field_name}.len; ${idx}++) {')
|
||||
last_ids := g.new_tmp_var()
|
||||
res_ := g.new_tmp_var()
|
||||
tmp_var := g.new_tmp_var()
|
||||
ctyp := g.typ(arr.table_expr.typ)
|
||||
g.writeln('${ctyp} ${tmp_var} = (*(${ctyp}*)array_get(${arr.object_var_name}${member_access_type}${field_names[i]}, ${idx}));')
|
||||
g.writeln('${ctyp} ${tmp_var} = (*(${ctyp}*)array_get(${arr.object_var_name}${member_access_type}${c_field_name}, ${idx}));')
|
||||
arr.object_var_name = tmp_var
|
||||
mut fff := []ast.StructField{}
|
||||
for f in arr.fields {
|
||||
@ -723,7 +724,7 @@ fn (mut g Gen) sql_select(node ast.SqlExpr, expr string, left string, or_expr as
|
||||
where_expr.right = ident
|
||||
sub.where_expr = where_expr
|
||||
|
||||
g.sql_select(sub, expr, '${tmp}.${field.name} = ', or_expr)
|
||||
g.sql_select(sub, expr, '${tmp}.${c_name(field.name)} = ', or_expr)
|
||||
} else if sym.kind == .array {
|
||||
mut fkey := ''
|
||||
for attr in field.attrs {
|
||||
@ -775,10 +776,10 @@ fn (mut g Gen) sql_select(node ast.SqlExpr, expr string, left string, or_expr as
|
||||
where_expr: where_expr
|
||||
}
|
||||
|
||||
g.sql_select(arr, expr, '${tmp}.${field.name} = ', or_expr)
|
||||
g.sql_select(arr, expr, '${tmp}.${c_name(field.name)} = ', or_expr)
|
||||
} else {
|
||||
mut typ := sym.cname
|
||||
g.writeln('${tmp}.${field.name} = *(${sel}._${typ});')
|
||||
g.writeln('${tmp}.${c_name(field.name)} = *(${sel}._${typ});')
|
||||
}
|
||||
}
|
||||
g.indent--
|
||||
|
Loading…
x
Reference in New Issue
Block a user