This is an automated email from the ASF dual-hosted git repository.
luky116 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-seata-go.git
The following commit(s) were added to refs/heads/master by this push:
new d7b6a4c8 optimize: only inserted fields (#719)
d7b6a4c8 is described below
commit d7b6a4c8a37c5efc44dec32c07e4af8ed2b3fb92
Author: lxfeng1997 <[email protected]>
AuthorDate: Sun Dec 15 21:03:47 2024 +0800
optimize: only inserted fields (#719)
* only inserted fields
* It is suspected that it is not used, so restore the previous code
---------
Co-authored-by: JayLiu <[email protected]>
---
pkg/datasource/sql/exec/at/base_executor.go | 43 ++++++++++++++++++++++
pkg/datasource/sql/exec/at/insert_executor.go | 14 +++++--
pkg/datasource/sql/exec/at/insert_executor_test.go | 4 +-
3 files changed, 56 insertions(+), 5 deletions(-)
diff --git a/pkg/datasource/sql/exec/at/base_executor.go
b/pkg/datasource/sql/exec/at/base_executor.go
index 75f0cab5..05f44057 100644
--- a/pkg/datasource/sql/exec/at/base_executor.go
+++ b/pkg/datasource/sql/exec/at/base_executor.go
@@ -23,6 +23,7 @@ import (
"database/sql"
"database/sql/driver"
"fmt"
+ "seata.apache.org/seata-go/pkg/datasource/sql/undo"
"strings"
"github.com/arana-db/parser/ast"
@@ -187,6 +188,48 @@ func (b *baseExecutor) buildRecordImages(rowsi
driver.Rows, tableMetaData *types
return &types.RecordImage{TableName: tableMetaData.TableName, Rows:
rowImages, SQLType: sqlType}, nil
}
+func (b *baseExecutor) getNeedColumns(meta *types.TableMeta, columns []string,
dbType types.DBType) []string {
+ var needUpdateColumns []string
+ if undo.UndoConfig.OnlyCareUpdateColumns && columns != nil &&
len(columns) > 0 {
+ needUpdateColumns = columns
+ if !b.containsPKByName(meta, columns) {
+ pkNames := meta.GetPrimaryKeyOnlyName()
+ if pkNames != nil && len(pkNames) > 0 {
+ for _, name := range pkNames {
+ needUpdateColumns =
append(needUpdateColumns, name)
+ }
+ }
+ }
+ // todo If it contains onUpdate columns, add onUpdate columns
+ } else {
+ needUpdateColumns = meta.ColumnNames
+ }
+
+ for i := range needUpdateColumns {
+ needUpdateColumns[i] = AddEscape(needUpdateColumns[i], dbType)
+ }
+ return needUpdateColumns
+}
+
+func (b *baseExecutor) containsPKByName(meta *types.TableMeta, columns
[]string) bool {
+ pkColumnNameList := meta.GetPrimaryKeyOnlyName()
+ if len(pkColumnNameList) == 0 {
+ return false
+ }
+
+ matchCounter := 0
+ for _, column := range columns {
+ for _, pkName := range pkColumnNameList {
+ if strings.EqualFold(pkName, column) ||
+ strings.EqualFold(pkName,
strings.ToLower(column)) {
+ matchCounter++
+ }
+ }
+ }
+
+ return matchCounter == len(pkColumnNameList)
+}
+
func getSqlNullValue(value interface{}) interface{} {
if value == nil {
return nil
diff --git a/pkg/datasource/sql/exec/at/insert_executor.go
b/pkg/datasource/sql/exec/at/insert_executor.go
index a05da506..ae7bac71 100644
--- a/pkg/datasource/sql/exec/at/insert_executor.go
+++ b/pkg/datasource/sql/exec/at/insert_executor.go
@@ -184,9 +184,17 @@ func (i *insertExecutor) buildAfterImageSQL(ctx
context.Context) (string, []driv
}
// build check sql
sb := strings.Builder{}
- sb.WriteString("SELECT * FROM " + tableName)
- whereSQL := i.buildWhereConditionByPKs(pkColumnNameList,
len(pkValuesMap[pkColumnNameList[0]]), "mysql", maxInSize)
- sb.WriteString(" WHERE " + whereSQL + " ")
+ suffix := strings.Builder{}
+ var insertColumns []string
+
+ for _, column := range i.parserCtx.InsertStmt.Columns {
+ insertColumns = append(insertColumns, column.Name.O)
+ }
+ sb.WriteString("SELECT " + strings.Join(i.getNeedColumns(meta,
insertColumns, types.DBTypeMySQL), ", "))
+ suffix.WriteString(" FROM " + tableName)
+ whereSQL := i.buildWhereConditionByPKs(pkColumnNameList, rowSize,
"mysql", maxInSize)
+ suffix.WriteString(" WHERE " + whereSQL + " ")
+ sb.WriteString(suffix.String())
return sb.String(), i.buildPKParams(pkRowImages, pkColumnNameList), nil
}
diff --git a/pkg/datasource/sql/exec/at/insert_executor_test.go
b/pkg/datasource/sql/exec/at/insert_executor_test.go
index fa899df1..742249bc 100644
--- a/pkg/datasource/sql/exec/at/insert_executor_test.go
+++ b/pkg/datasource/sql/exec/at/insert_executor_test.go
@@ -78,7 +78,7 @@ func TestBuildSelectSQLByInsert(t *testing.T) {
},
},
- expectQuery: "SELECT * FROM user WHERE (`id`) IN
((?),(?)) ",
+ expectQuery: "SELECT id, name FROM user WHERE
(`id`) IN ((?),(?)) ",
expectQueryArgs: []driver.Value{int64(19), int64(21)},
},
{
@@ -107,7 +107,7 @@ func TestBuildSelectSQLByInsert(t *testing.T) {
},
},
},
- expectQuery: "SELECT * FROM user WHERE (`user_id`)
IN ((?)) ",
+ expectQuery: "SELECT user_id, name FROM user WHERE
(`user_id`) IN ((?)) ",
expectQueryArgs: []driver.Value{int64(20)},
},
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]