Skip to content

Commit dd063fa

Browse files
authored
orm,cgen: fix @[sql: serial] and @[serial] are not the same (fix #23346) (#23678)
1 parent 4c14e8e commit dd063fa

2 files changed

Lines changed: 30 additions & 4 deletions

File tree

‎vlib/orm/orm_serial_attribute_test.v‎

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
import db.sqlite
22

3+
struct Child {
4+
id int @[primary; serial]
5+
parent_id int
6+
}
7+
38
struct PlainNoArg {
4-
id int @[primary; serial; sql: 'custom_id']
5-
name string
9+
id int @[primary; serial; sql: 'custom_id']
10+
name string
11+
children []Child @[fkey: 'parent_id']
612
}
713

814
fn test_plain_no_arg() {
@@ -33,6 +39,26 @@ fn test_plain_no_arg() {
3339
assert rows[0].name == 'second'
3440
}
3541

42+
fn test_plain_no_arg_with_children() {
43+
mut db := sqlite.connect(':memory:')!
44+
45+
parent := PlainNoArg{
46+
children: [Child{}, Child{}]
47+
}
48+
49+
sql db {
50+
create table Child
51+
create table PlainNoArg
52+
insert parent into PlainNoArg
53+
}!
54+
55+
parents := sql db {
56+
select from PlainNoArg limit 1
57+
}!
58+
59+
assert parent.children.len == parents[0].children.len
60+
}
61+
3662
struct SqlSerial {
3763
id int @[primary; sql: serial]
3864
name string

‎vlib/v/gen/c/orm.v‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -331,8 +331,8 @@ fn (mut g Gen) write_orm_insert_with_last_ids(node ast.SqlStmtLine, connection_v
331331

332332
primary_field := g.get_orm_struct_primary_field(fields) or { ast.StructField{} }
333333

334-
is_serial := primary_field.attrs.contains_arg('sql', 'serial')
335-
&& primary_field.typ == ast.int_type
334+
is_serial := (primary_field.attrs.contains_arg('sql', 'serial')
335+
|| primary_field.attrs.contains('serial')) && primary_field.typ == ast.int_type
336336

337337
mut inserting_object_type := ast.void_type
338338
mut member_access_type := '.'

0 commit comments

Comments
 (0)