-
Notifications
You must be signed in to change notification settings - Fork 1
Description
Query, insert, and update varray failed with the following errors:
#1, Reading an varray type using
type EmailVarrayTable struct {
ID uint `gorm:"column:ID;primaryKey"`
Emails []string `gorm:"column:EMAILS;type:\"email_list_arr\""`
}
var got EmailVarrayTable
if err := DB.First(&got, 1).Error; err != nil {
t.Fatalf("Failed to select row: %v", err)
}
Reported error:
2025/10/01 00:15:07 /scratch/shulili/GORM/gorm-github/gorm-oracle/tests/array_test.go:69 sql: Scan error on column index 1, name "EMAILS": unsupported Scan, storing driver.Value type *godror.Object into type *[]string
[5.321ms] [rows:1] SELECT * FROM "email_varray_tables" WHERE "email_varray_tables"."ID" = 1 ORDER BY "email_varray_tables"."ID" FETCH NEXT 1 ROW ONLY
#2, update an varray using:
newEmails := []string{"[email protected]", "[email protected]"}
if err := DB.Model(&got).Update("Emails", newEmails).Error; err != nil {
t.Fatalf("Failed to update emails: %v", err)
}
The generated update sql is incorrect. This is the generated sql:
UPDATE "email_varray_tables" SET "EMAILS"=('[email protected]','[email protected]')
It should be:
UPDATE "email_varray_tables" SET "EMAILS"="email_list_arr"('[email protected]','[email protected]')
#3, insert an varray using:
item := EmailVarrayTable{
ID: 1,
Emails: []string{"[email protected]", "[email protected]", "[email protected]"},
}
if err := DB.Create(&item).Error; err != nil {
t.Fatalf("Failed to insert row via GORM: %v", err)
}
The generated insert sql is incorrect. This is the generated sql:
INSERT INTO "email_varray_tables" ("EMAILS","ID") VALUES (('[email protected]','[email protected]','[email protected]'),1) RETURNING "ID" INTO 0
It should be:
INSERT INTO "email_varray_tables" ("EMAILS","ID") VALUES ("email_list_arr"('[email protected]','[email protected]','[email protected]'),1) RETURNING "ID" INTO :id