orm,cgen: fix @[sql: serial] and @[serial] are not the same (fix #23346) (#23678)

This commit is contained in:
Alexander Mandrikov 2025-02-09 15:54:45 +07:00 committed by GitHub
parent 4c14e8e8de
commit dd063faf65
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 30 additions and 4 deletions

View File

@ -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

View File

@ -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 := '.'