fix
This commit is contained in:
91
utils/fssql/metadata.go
Normal file
91
utils/fssql/metadata.go
Normal file
@@ -0,0 +1,91 @@
|
||||
package fssql
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"reflect"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// func MetadataPATCH(tx *gorm.DB, module string, tableStructPointer any, updateMetadata any, rawID int64) error {
|
||||
// stype := reflect.TypeOf(tableStructPointer)
|
||||
// if stype.Kind() == reflect.Pointer {
|
||||
// stype = stype.Elem()
|
||||
// }
|
||||
|
||||
// updatesql := `UPDATE %s
|
||||
// SET metadata = CASE
|
||||
// WHEN metadata IS NULL THEN ?
|
||||
// ELSE JSON_MERGE_PATCH(metadata, ?)
|
||||
// END
|
||||
// WHERE module = '%s' and id = ?;`
|
||||
|
||||
// var err error
|
||||
// var metadata []byte
|
||||
|
||||
// switch mdata := updateMetadata.(type) {
|
||||
// case []byte:
|
||||
// metadata = mdata
|
||||
// case string:
|
||||
// metadata = []byte(mdata)
|
||||
// default:
|
||||
// metadata, err = json.Marshal(updateMetadata)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
// }
|
||||
|
||||
// updatesql = fmt.Sprintf(updatesql, tx.NamingStrategy.TableName(stype.Name()), module)
|
||||
// logx.Error(updatesql)
|
||||
// err = tx.Exec(updatesql, metadata, metadata, rawID).Error
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
|
||||
// return nil
|
||||
// }
|
||||
|
||||
// tableStructPointer 表结构 updateMetadata 可以是json的[]byte也可以结构体
|
||||
func MetadataPATCH(tx *gorm.DB, module string, tableStructPointer any, updateMetadata any, WhereKeysCond string, value ...any) error {
|
||||
stype := reflect.TypeOf(tableStructPointer)
|
||||
if stype.Kind() == reflect.Pointer {
|
||||
stype = stype.Elem()
|
||||
}
|
||||
|
||||
updatesql := `UPDATE %s
|
||||
SET metadata = CASE
|
||||
WHEN metadata IS NULL THEN ?
|
||||
ELSE JSON_MERGE_PATCH(metadata, ?)
|
||||
END
|
||||
WHERE module = '%s' and %s;`
|
||||
|
||||
var err error
|
||||
var metadata []byte
|
||||
|
||||
switch mdata := updateMetadata.(type) {
|
||||
case []byte:
|
||||
metadata = mdata
|
||||
case string:
|
||||
metadata = []byte(mdata)
|
||||
default:
|
||||
metadata, err = json.Marshal(updateMetadata)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
var values []any
|
||||
|
||||
values = append(values, metadata, metadata)
|
||||
values = append(values, value...)
|
||||
|
||||
updatesql = fmt.Sprintf(updatesql, tx.NamingStrategy.TableName(stype.Name()), module, WhereKeysCond)
|
||||
// logx.Error(updatesql)
|
||||
err = tx.Exec(updatesql, values).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user