diff --git a/vlib/orm/orm_serial_attribute_test.v b/vlib/orm/orm_serial_attribute_test.v index 0c30dc20e30498..f23f95335d99d1 100644 --- a/vlib/orm/orm_serial_attribute_test.v +++ b/vlib/orm/orm_serial_attribute_test.v @@ -1,8 +1,14 @@ import db.sqlite +struct Child { + id int @[primary; serial] + parent_id int +} + struct PlainNoArg { - id int @[primary; serial; sql: 'custom_id'] - name string + id int @[primary; serial; sql: 'custom_id'] + name string + children []Child @[fkey: 'parent_id'] } fn test_plain_no_arg() { @@ -33,6 +39,26 @@ fn test_plain_no_arg() { assert rows[0].name == 'second' } +fn test_plain_no_arg_with_children() { + mut db := sqlite.connect(':memory:')! + + parent := PlainNoArg{ + children: [Child{}, Child{}] + } + + sql db { + create table Child + create table PlainNoArg + insert parent into PlainNoArg + }! + + parents := sql db { + select from PlainNoArg limit 1 + }! + + assert parent.children.len == parents[0].children.len +} + struct SqlSerial { id int @[primary; sql: serial] name string diff --git a/vlib/v/gen/c/orm.v b/vlib/v/gen/c/orm.v index ae829fec20f3de..a206c67a0a80a8 100644 --- a/vlib/v/gen/c/orm.v +++ b/vlib/v/gen/c/orm.v @@ -331,8 +331,8 @@ fn (mut g Gen) write_orm_insert_with_last_ids(node ast.SqlStmtLine, connection_v primary_field := g.get_orm_struct_primary_field(fields) or { ast.StructField{} } - is_serial := primary_field.attrs.contains_arg('sql', 'serial') - && primary_field.typ == ast.int_type + is_serial := (primary_field.attrs.contains_arg('sql', 'serial') + || primary_field.attrs.contains('serial')) && primary_field.typ == ast.int_type mut inserting_object_type := ast.void_type mut member_access_type := '.'