浏览代码

添加删除

yjp 1 年之前
父节点
当前提交
b1ac6264a9
共有 3 个文件被更改,包括 98 次插入16 次删除
  1. 67 4
      sdk/crud.go
  2. 24 10
      sdk/transaction.go
  3. 7 2
      test/sdk_test.go

+ 67 - 4
sdk/crud.go

@@ -10,6 +10,10 @@ import (
 	"time"
 )
 
+type RawSqlExecutor interface {
+	ExecuteRawSql(sql string, executeParams map[string]any) ([]map[string]any, error)
+}
+
 const (
 	timeWriteFormat          = time.DateTime + ".000000 +08:00"
 	createdTimeFieldName     = "CreatedTime"
@@ -18,9 +22,9 @@ const (
 
 type InsertCallback[T any] func(e T, fieldName string, value any) (retValue any, err error)
 
-func Insert[T any](sdk *SDK, tableName string, e T, callback InsertCallback[T]) error {
-	if sdk == nil {
-		return errors.New("没有传递sdk")
+func Insert[T any](executor RawSqlExecutor, tableName string, e T, callback InsertCallback[T]) error {
+	if executor == nil {
+		return errors.New("没有传递执行器")
 	}
 
 	if strutils.IsStringEmpty(tableName) {
@@ -89,7 +93,66 @@ func Insert[T any](sdk *SDK, tableName string, e T, callback InsertCallback[T])
 		return err
 	}
 
-	_, err = sdk.ExecuteRawSql(raw_sql_tpl.InsertTpl, executeParamsMap)
+	_, err = executor.ExecuteRawSql(raw_sql_tpl.InsertTpl, executeParamsMap)
+	if err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func Delete[T any](executor RawSqlExecutor, tableName string, e T) error {
+	if executor == nil {
+		return errors.New("没有传递执行器")
+	}
+
+	if strutils.IsStringEmpty(tableName) {
+		return errors.New("没有传递表名")
+	}
+
+	if reflect.TypeOf(e) == nil {
+		return errors.New("没有传递实体")
+	}
+
+	sqlMapping, err := tag.ParseSqlMapping(e)
+	if err != nil {
+		return err
+	}
+
+	executeParams := raw_sql_tpl.DeleteExecuteParams{
+		TableName: tableName,
+	}
+
+	for _, sqlMappingColumn := range sqlMapping.ColumnMap {
+		if !sqlMappingColumn.IsKey {
+			continue
+		}
+
+		fieldType := sqlMappingColumn.FieldType
+
+		value := reflect.Zero(fieldType).Interface()
+		if !sqlMappingColumn.FieldValue.IsZero() {
+			value = sqlMappingColumn.FieldValue.Interface()
+		}
+
+		tableRowValue, err := parseValue(value)
+		if err != nil {
+			return err
+		}
+
+		executeParams.Conditions = append(executeParams.Conditions, raw_sql_tpl.Condition{
+			Column:   sqlMappingColumn.Name,
+			Operator: "=",
+			Value:    tableRowValue,
+		})
+	}
+
+	executeParamsMap, err := executeParams.Map()
+	if err != nil {
+		return err
+	}
+
+	_, err = executor.ExecuteRawSql(raw_sql_tpl.DeleteTpl, executeParamsMap)
 	if err != nil {
 		return err
 	}

+ 24 - 10
sdk/transaction.go

@@ -12,7 +12,7 @@ type Transaction struct {
 	stream v1.SqlService_TransactionClient
 }
 
-func (tx *Transaction) ExecuteRawSql(sql string, executeParams map[string]any) error {
+func (tx *Transaction) ExecuteRawSql(sql string, executeParams map[string]any) ([]map[string]any, error) {
 	var retErr error
 
 	defer func() {
@@ -27,7 +27,7 @@ func (tx *Transaction) ExecuteRawSql(sql string, executeParams map[string]any) e
 	executeParamsJsonBytes, err := json.Marshal(executeParams)
 	if err != nil {
 		retErr = err
-		return retErr
+		return nil, retErr
 	}
 
 	err = tx.stream.SendMsg(&request.TransactionOperation{
@@ -40,19 +40,26 @@ func (tx *Transaction) ExecuteRawSql(sql string, executeParams map[string]any) e
 	})
 	if err != nil {
 		retErr = err
-		return retErr
+		return nil, retErr
 	}
 
 	resp, err := tx.stream.Recv()
 	if err != nil {
 		retErr = err
-		return retErr
+		return nil, retErr
 	}
 
-	return nil
+	tableRows := make([]map[string]any, 0)
+	err = json.Unmarshal([]byte(resp.Results), &tableRows)
+	if err != nil {
+		retErr = err
+		return nil, retErr
+	}
+
+	return tableRows, nil
 }
 
-func (tx *Transaction) ExecuteSql(name string, executeParams map[string]any) error {
+func (tx *Transaction) ExecuteSql(name string, executeParams map[string]any) ([]map[string]any, error) {
 	var retErr error
 
 	defer func() {
@@ -67,7 +74,7 @@ func (tx *Transaction) ExecuteSql(name string, executeParams map[string]any) err
 	executeParamsJsonBytes, err := json.Marshal(executeParams)
 	if err != nil {
 		retErr = err
-		return retErr
+		return nil, retErr
 	}
 
 	err = tx.stream.Send(&request.TransactionOperation{
@@ -80,14 +87,21 @@ func (tx *Transaction) ExecuteSql(name string, executeParams map[string]any) err
 	})
 	if err != nil {
 		retErr = err
-		return retErr
+		return nil, retErr
 	}
 
 	resp, err := tx.stream.Recv()
 	if err != nil {
 		retErr = err
-		return retErr
+		return nil, retErr
+	}
+
+	tableRows := make([]map[string]any, 0)
+	err = json.Unmarshal([]byte(resp.Results), &tableRows)
+	if err != nil {
+		retErr = err
+		return nil, retErr
 	}
 
-	return nil
+	return tableRows, nil
 }

+ 7 - 2
test/sdk_test.go

@@ -124,12 +124,12 @@ func TestBasic(t *testing.T) {
 			defer wg.Done()
 
 			err = sdk.GetInstance().Transaction(func(tx *sdk.Transaction) error {
-				err := tx.ExecuteRawSql(raw_sql_tpl.InsertTpl, insertExecuteParams)
+				_, err := tx.ExecuteRawSql(raw_sql_tpl.InsertTpl, insertExecuteParams)
 				if err != nil {
 					return err
 				}
 
-				err = tx.ExecuteSql(deleteSql, deleteExecuteParams)
+				_, err = tx.ExecuteSql(deleteSql, deleteExecuteParams)
 				if err != nil {
 					return err
 				}
@@ -512,4 +512,9 @@ func TestCRUD(t *testing.T) {
 	if err != nil {
 		t.Fatal(err)
 	}
+
+	err = sdk.Delete(sdk.GetInstance(), tableName, class)
+	if err != nil {
+		t.Fatal(err)
+	}
 }