package sdk import ( "encoding/json" "errors" v1 "git.sxidc.com/service-supports/ds-sdk/grpc_client/v1" "git.sxidc.com/service-supports/ds-sdk/grpc_client/v1/request" ) type TxFunc func(tx *Transaction) error type Transaction struct { stream v1.SqlService_TransactionClient } func (tx *Transaction) ExecuteRawSql(sql string, executeParams map[string]any) ([]SqlResult, error) { var retErr error defer func() { if retErr != nil { innerErr := tx.stream.CloseSend() if innerErr != nil { panic(innerErr) } } }() executeParamsJsonBytes, err := json.Marshal(executeParams) if err != nil { retErr = err return nil, retErr } err = tx.stream.SendMsg(&request.TransactionOperation{ Request: &request.TransactionOperation_ExecuteRawSqlRequest{ ExecuteRawSqlRequest: &request.ExecuteRawSqlRequest{ SQL: sql, ExecuteParams: string(executeParamsJsonBytes), }, }, }) if err != nil { retErr = err return nil, retErr } resp, err := tx.stream.Recv() if err != nil { retErr = err return nil, retErr } if !resp.Success { retErr = errors.New(resp.Msg) return nil, retErr } tableRows := make([]map[string]any, 0) err = json.Unmarshal([]byte(resp.Results), &tableRows) if err != nil { retErr = err return nil, retErr } results := make([]SqlResult, len(tableRows)) for i, row := range tableRows { results[i] = row } return results, nil } func (tx *Transaction) ExecuteSql(name string, executeParams map[string]any) ([]SqlResult, error) { var retErr error defer func() { if retErr != nil { innerErr := tx.stream.CloseSend() if innerErr != nil { panic(innerErr) } } }() executeParamsJsonBytes, err := json.Marshal(executeParams) if err != nil { retErr = err return nil, retErr } err = tx.stream.Send(&request.TransactionOperation{ Request: &request.TransactionOperation_ExecuteSqlRequest{ ExecuteSqlRequest: &request.ExecuteSqlRequest{ Name: name, ExecuteParams: string(executeParamsJsonBytes), }, }, }) if err != nil { retErr = err return nil, retErr } resp, err := tx.stream.Recv() if err != nil { retErr = err return nil, retErr } if !resp.Success { retErr = errors.New(resp.Msg) return nil, retErr } tableRows := make([]map[string]any, 0) err = json.Unmarshal([]byte(resp.Results), &tableRows) if err != nil { retErr = err return nil, retErr } results := make([]SqlResult, len(tableRows)) for i, row := range tableRows { results[i] = row } return results, nil }