From 5e16f5f526b28c84e632aab7114d15ef9b191245 Mon Sep 17 00:00:00 2001 From: jawad-arb123 Date: Wed, 8 Oct 2025 22:59:03 +0100 Subject: [PATCH 1/3] update clause with custom table name --- oracle/update.go | 5 +++++ tests/migrate_test.go | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/oracle/update.go b/oracle/update.go index 9de9e47..735eb9d 100644 --- a/oracle/update.go +++ b/oracle/update.go @@ -109,6 +109,11 @@ func Update(db *gorm.DB) { // Always use PL/SQL for RETURNING, just like delete callback buildUpdatePLSQL(db) } else { + if updateClause, ok := stmt.Clauses["UPDATE"].Expression.(clause.Update); ok { + if updateClause.Table.Name != "" { + stmt.Table = updateClause.Table.Name + } + } // Use GORM's standard build for non-RETURNING updates stmt.Build("UPDATE", "SET", "WHERE") // Convert values for Oracle diff --git a/tests/migrate_test.go b/tests/migrate_test.go index cf819c9..e51db45 100644 --- a/tests/migrate_test.go +++ b/tests/migrate_test.go @@ -2178,3 +2178,15 @@ func TestMigrateOnUpdateConstraint(t *testing.T) { panic(fmt.Errorf("company id is not equal: expects: %v, got: %v", 0, updatedPen3.OwnerID)) } } + +func TestUpdateWithCustomTableName(t *testing.T) { + sql := DB.ToSQL(func(tx *gorm.DB) *gorm.DB { + return tx.Clauses(clause.Update{ + Table: clause.Table{Name: "custom_update_table"}, + }).Where("id = ?", 200). + Updates(&User{Name: "patched", Age: 99}) + }) + + assertEqualSQL(t, `UPDATE "custom_update_table" SET "updated_at"=?,"name"='patched',"age"=99 WHERE id = 200 AND "custom_update_table"."deleted_at" IS NULL`, sql) + +} From e98e5736d8bbb5a5308fca71571f393c9cd9eb4c Mon Sep 17 00:00:00 2001 From: jawad-arb123 Date: Wed, 8 Oct 2025 23:14:24 +0100 Subject: [PATCH 2/3] add test for custom table name in update tests --- tests/migrate_test.go | 12 ------------ tests/update_test.go | 12 ++++++++++++ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/tests/migrate_test.go b/tests/migrate_test.go index e51db45..cf819c9 100644 --- a/tests/migrate_test.go +++ b/tests/migrate_test.go @@ -2178,15 +2178,3 @@ func TestMigrateOnUpdateConstraint(t *testing.T) { panic(fmt.Errorf("company id is not equal: expects: %v, got: %v", 0, updatedPen3.OwnerID)) } } - -func TestUpdateWithCustomTableName(t *testing.T) { - sql := DB.ToSQL(func(tx *gorm.DB) *gorm.DB { - return tx.Clauses(clause.Update{ - Table: clause.Table{Name: "custom_update_table"}, - }).Where("id = ?", 200). - Updates(&User{Name: "patched", Age: 99}) - }) - - assertEqualSQL(t, `UPDATE "custom_update_table" SET "updated_at"=?,"name"='patched',"age"=99 WHERE id = 200 AND "custom_update_table"."deleted_at" IS NULL`, sql) - -} diff --git a/tests/update_test.go b/tests/update_test.go index d9eb530..5d35d2b 100644 --- a/tests/update_test.go +++ b/tests/update_test.go @@ -1163,3 +1163,15 @@ func TestUpdateCustomDataType(t *testing.T) { t.Errorf("failed to update custom data type field: %v", err) } } + +func TestUpdateWithCustomTableName(t *testing.T) { + sql := DB.ToSQL(func(tx *gorm.DB) *gorm.DB { + return tx.Clauses(clause.Update{ + Table: clause.Table{Name: "custom_update_table"}, + }).Where("id = ?", 200). + Updates(&User{Name: "patched", Age: 99}) + }) + + assertEqualSQL(t, `UPDATE "custom_update_table" SET "updated_at"=?,"name"='patched',"age"=99 WHERE id = 200 AND "custom_update_table"."deleted_at" IS NULL`, sql) + +} From 214a4b78405dcf183e8f29c652bedfb8351f69b9 Mon Sep 17 00:00:00 2001 From: jawad-arb123 Date: Fri, 10 Oct 2025 17:11:18 +0100 Subject: [PATCH 3/3] Uncommented TestToSQL test case (issue #81 resolved) --- tests/sql_builder_test.go | 13 ++++++------- tests/update_test.go | 12 ------------ 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/tests/sql_builder_test.go b/tests/sql_builder_test.go index b3559ef..ca70058 100644 --- a/tests/sql_builder_test.go +++ b/tests/sql_builder_test.go @@ -859,13 +859,12 @@ func TestToSQL(t *testing.T) { }) assertEqualSQL(t, `UPDATE "custom_update_table" SET "updated_at"=?,"name"='patched',"age"=99 WHERE id = 200`, sql) - // https://github.com/oracle-samples/gorm-oracle/issues/81 - // sql = DB.ToSQL(func(tx *gorm.DB) *gorm.DB { - // return tx.Clauses(clause.Update{Table: clause.Table{Name: "custom_update_table"}}). - // Where("id = ?", 200). - // Updates(&User{Name: "patched", Age: 99}) - // }) - // assertEqualSQL(t, `UPDATE "custom_update_table" SET "updated_at"=?,"name"='patched',"age"=99 WHERE id = 200 AND "custom_update_table"."deleted_at" IS NULL`, sql) + sql = DB.ToSQL(func(tx *gorm.DB) *gorm.DB { + return tx.Clauses(clause.Update{Table: clause.Table{Name: "custom_update_table"}}). + Where("id = ?", 200). + Updates(&User{Name: "patched", Age: 99}) + }) + assertEqualSQL(t, `UPDATE "custom_update_table" SET "updated_at"=?,"name"='patched',"age"=99 WHERE id = 200 AND "custom_update_table"."deleted_at" IS NULL`, sql) // update sql = DB.ToSQL(func(tx *gorm.DB) *gorm.DB { diff --git a/tests/update_test.go b/tests/update_test.go index 5d35d2b..d9eb530 100644 --- a/tests/update_test.go +++ b/tests/update_test.go @@ -1163,15 +1163,3 @@ func TestUpdateCustomDataType(t *testing.T) { t.Errorf("failed to update custom data type field: %v", err) } } - -func TestUpdateWithCustomTableName(t *testing.T) { - sql := DB.ToSQL(func(tx *gorm.DB) *gorm.DB { - return tx.Clauses(clause.Update{ - Table: clause.Table{Name: "custom_update_table"}, - }).Where("id = ?", 200). - Updates(&User{Name: "patched", Age: 99}) - }) - - assertEqualSQL(t, `UPDATE "custom_update_table" SET "updated_at"=?,"name"='patched',"age"=99 WHERE id = 200 AND "custom_update_table"."deleted_at" IS NULL`, sql) - -}