yjp há 11 meses atrás
pai
commit
c685588670
11 ficheiros alterados com 268 adições e 69 exclusões
  1. 7 7
      README.md
  2. 1 1
      go.mod
  3. 2 2
      go.sum
  4. 15 5
      sdk/sdk.go
  5. 193 0
      sdk/sql_result.go
  6. 14 4
      sdk/transaction.go
  7. 13 32
      sql/parse_result.go
  8. 15 10
      sql/sql.go
  9. 1 1
      sql/sql_mapping.go
  10. 1 1
      sql/sql_result.go
  11. 6 6
      test/sdk_test.go

+ 7 - 7
README.md

@@ -156,7 +156,7 @@ func main() {
 sdk会利用Class字段,将Class字段名称变为蛇形后作为表的列名使用,如果字段名称转换后是id(字段名称是ID,Id等),就会被作为主键使用,还可以通过sdk的
 sqlmapping Tag对字段含义进行扩充,稍后会对sqlmapping Tag进行说明。对命名为CreatedTime和LastUpdatedTime的字段,在没有赋值的情况下,sdk会自动添加创建时间和更新时间。
 
-Demo中的ClassInfo并不是必须的,sdk所有数据查询命令返回的是map[string]any或者[]map[string]any类型的数据,其中map的key是列名,value是列值,
+Demo中的ClassInfo并不是必须的,sdk所有数据查询命令返回的是sdk.SqlResult或者[]sdk.SqlResult类型的数据,sdk.SqlResult实际就是map[string]any,但是提供了更方便的取值函数,其中map的key是列名,value是列值,
 sdk对mapstructure包进行了封装,如果程序需要,可以将查询结果转到一个添加了mapstructure Tag的结构上。mapstructure Tag的使用可以查看文档:
 
 https://pkg.go.dev/github.com/mitchellh/mapstructure
@@ -310,8 +310,8 @@ ExecuteSql则执行一个SQL资源(提前在数据服务中创建),也可以
 
 ```go
 type Executor interface {
-	ExecuteRawSql(sql string, executeParams map[string]any) ([]map[string]any, error)
-	ExecuteSql(name string, executeParams map[string]any) ([]map[string]any, error)
+	ExecuteRawSql(sql string, executeParams map[string]any) ([]sdk.SqlResult, error)
+	ExecuteSql(name string, executeParams map[string]any) ([]sdk.SqlResult, error)
 }
 ```
 
@@ -479,7 +479,7 @@ Conditions可以通过sql_tpl中的NewConditions()函数创建,其中有各种
 是否出现错误
 
 ```go
-func Query(executor Executor, executeParams *sql_tpl.QueryExecuteParams) ([]map[string]any, int64, error)
+func Query(executor Executor, executeParams *sql_tpl.QueryExecuteParams) ([]sdk.SqlResult, int64, error)
 ```
 
 通过简化的SELETE语句查询数据,简化的SELETE语句:
@@ -524,7 +524,7 @@ Conditions可以通过sql_tpl中的NewConditions()函数创建,其中有各种
 是否出现错误
 
 ```go
-func QueryOne(executor Executor, executeParams *sql_tpl.QueryOneExecuteParams) (map[string]any, error)
+func QueryOne(executor Executor, executeParams *sql_tpl.QueryOneExecuteParams) (sdk.SqlResult, error)
 ```
 
 通过简化的SELETE语句执行单查询
@@ -644,7 +644,7 @@ Conditions可以通过sql_tpl中的NewConditions()函数创建,其中有各种
 是否出现错误
 
 ```go
-func ExecuteRawSql(executor Executor, sql string, executeParams map[string]any) ([]map[string]any, error)
+func ExecuteRawSql(executor Executor, sql string, executeParams map[string]any) ([]sdk.SqlResult, error)
 ```
 
 执行SQL语句
@@ -664,7 +664,7 @@ executeParams: 检查操作需要的参数,如下所示
 是否出现错误
 
 ```go
-func ExecuteSql(executor Executor, name string, executeParams map[string]any) ([]map[string]any, error)
+func ExecuteSql(executor Executor, name string, executeParams map[string]any) ([]sdk.SqlResult, error)
 ```
 
 执行SQL语句

+ 1 - 1
go.mod

@@ -4,7 +4,7 @@ go 1.22.0
 
 require (
 	git.sxidc.com/go-tools/api_binding v1.3.23
-	git.sxidc.com/go-tools/utils v1.5.5
+	git.sxidc.com/go-tools/utils v1.5.6
 	github.com/fatih/structs v1.1.0
 	github.com/golang/protobuf v1.5.4
 	github.com/iancoleman/strcase v0.3.0

+ 2 - 2
go.sum

@@ -1,7 +1,7 @@
 git.sxidc.com/go-tools/api_binding v1.3.23 h1:vgCdYq09aiw7Vs9JeOR0OZLOjezbHugQ/3ABeakvD4g=
 git.sxidc.com/go-tools/api_binding v1.3.23/go.mod h1:SmUnRrMtODonLzWmWCGQN9uAB2TjH8g5yEKFnp4rEgU=
-git.sxidc.com/go-tools/utils v1.5.5 h1:6WubGr/jxS16JJJLPQPvoO+n7nvW/u0ZOeoFCTckAdA=
-git.sxidc.com/go-tools/utils v1.5.5/go.mod h1:d8cjo9Wz5Vm/79pg3H43woycgZ74brPO0RysPDOBh2k=
+git.sxidc.com/go-tools/utils v1.5.6 h1:Hf8QgpagqMCNJg4FuZcKCfs7myqeQBW6hM02SUl3vro=
+git.sxidc.com/go-tools/utils v1.5.6/go.mod h1:d8cjo9Wz5Vm/79pg3H43woycgZ74brPO0RysPDOBh2k=
 git.sxidc.com/service-supports/fserr v0.3.2 h1:5/FCr8o2jd1kNsp5tH/ADjB9fr091JZXMMZ15ZvNZzs=
 git.sxidc.com/service-supports/fserr v0.3.2/go.mod h1:W54RoA71mfex+zARuH/iMnQPMnBXQ23qXXOkwUh2sVQ=
 git.sxidc.com/service-supports/fslog v0.5.9 h1:q2XIK2o/fk/qmByy4x5kKLC+k7kolT5LrXHcWRSffXQ=

+ 15 - 5
sdk/sdk.go

@@ -15,19 +15,24 @@ type SDK struct {
 	grpcClient *grpc_client.Client
 }
 
-func (s *SDK) ExecuteRawSql(sql string, executeParams map[string]any) ([]map[string]any, error) {
+func (s *SDK) ExecuteRawSql(sql string, executeParams map[string]any) ([]SqlResult, error) {
 	if strutils.IsStringEmpty(sql) {
-		return make([]map[string]any, 0), nil
+		return make([]SqlResult, 0), nil
 	}
 
 	options := s.options
 
-	results, err := s.client.ExecuteRawSql(options.token, options.baseUrl,
+	tableRows, err := s.client.ExecuteRawSql(options.token, options.baseUrl,
 		options.namespace, options.dataSource, sql, executeParams)
 	if err != nil {
 		return nil, err
 	}
 
+	results := make([]SqlResult, len(tableRows))
+	for i, row := range tableRows {
+		results[i] = row
+	}
+
 	return results, nil
 }
 
@@ -63,19 +68,24 @@ func (s *SDK) DeleteSQL(name string) error {
 	return nil
 }
 
-func (s *SDK) ExecuteSql(name string, executeParams map[string]any) ([]map[string]any, error) {
+func (s *SDK) ExecuteSql(name string, executeParams map[string]any) ([]SqlResult, error) {
 	if strutils.IsStringEmpty(name) {
 		return nil, errors.New("没有传递SQL资源名称")
 	}
 
 	options := s.options
 
-	results, err := s.client.ExecuteSql(options.token, options.baseUrl,
+	tableRows, err := s.client.ExecuteSql(options.token, options.baseUrl,
 		options.namespace, options.dataSource, name, executeParams)
 	if err != nil {
 		return nil, err
 	}
 
+	results := make([]SqlResult, len(tableRows))
+	for i, row := range tableRows {
+		results[i] = row
+	}
+
 	return results, nil
 }
 

+ 193 - 0
sdk/sql_result.go

@@ -0,0 +1,193 @@
+package sdk
+
+import (
+	"fmt"
+	"git.sxidc.com/go-tools/utils/reflectutils"
+	"strings"
+	"time"
+)
+
+const (
+	sqlResultTimeMicroFormat = "2006-01-02T15:04:05.000000+08:00"
+	sqlResultTimeMilliFormat = "2006-01-02T15:04:05.000+08:00"
+	sqlResultTimeSecFormat   = "2006-01-02T15:04:05+08:00"
+)
+
+func ParseSqlResultTimeStr(timeStr string) (time.Time, error) {
+	var layout string
+
+	if strings.HasSuffix(timeStr, ".000000+08:00") {
+		layout = sqlResultTimeMicroFormat
+	} else if strings.HasSuffix(timeStr, ".000+08:00") {
+		layout = sqlResultTimeMilliFormat
+	} else {
+		layout = sqlResultTimeSecFormat
+	}
+
+	return time.ParseInLocation(layout, timeStr, time.Local)
+}
+
+type SqlResult map[string]any
+
+func (result SqlResult) ColumnValueTime(columnName string) time.Time {
+	value, ok := result[columnName].(time.Time)
+	if !ok {
+		return time.Time{}
+	}
+
+	return value
+}
+
+func (result SqlResult) ColumnValueStringAsTime(columnName string) time.Time {
+	value, ok := result[columnName].(string)
+	if !ok {
+		return time.Time{}
+	}
+
+	t, err := ParseSqlResultTimeStr(value)
+	if err != nil {
+		return time.Time{}
+	}
+
+	return t
+}
+
+func (result SqlResult) ColumnValueBool(columnName string) bool {
+	value, err := reflectutils.ToBool(result[columnName])
+	if err != nil {
+		fmt.Println(err)
+		return false
+	}
+
+	return value
+}
+
+func (result SqlResult) ColumnValueString(columnName string) string {
+	value, err := reflectutils.ToString(result[columnName])
+	if err != nil {
+		fmt.Println(err)
+		return ""
+	}
+
+	return value
+}
+
+func (result SqlResult) ColumnValueInt(columnName string) int {
+	value, err := reflectutils.ToInt64(result[columnName])
+	if err != nil {
+		fmt.Println(err)
+		return 0
+	}
+
+	return int(value)
+}
+
+func (result SqlResult) ColumnValueInt8(columnName string) int8 {
+	value, err := reflectutils.ToInt64(result[columnName])
+	if err != nil {
+		fmt.Println(err)
+		return 0
+	}
+
+	return int8(value)
+}
+
+func (result SqlResult) ColumnValueInt16(columnName string) int16 {
+	value, err := reflectutils.ToInt64(result[columnName])
+	if err != nil {
+		fmt.Println(err)
+		return 0
+	}
+
+	return int16(value)
+}
+
+func (result SqlResult) ColumnValueInt32(columnName string) int32 {
+	value, err := reflectutils.ToInt64(result[columnName])
+	if err != nil {
+		fmt.Println(err)
+		return 0
+	}
+
+	return int32(value)
+}
+
+func (result SqlResult) ColumnValueInt64(columnName string) int64 {
+	value, err := reflectutils.ToInt64(result[columnName])
+	if err != nil {
+		fmt.Println(err)
+		return 0
+	}
+
+	return value
+}
+
+func (result SqlResult) ColumnValueUint(columnName string) uint {
+	value, err := reflectutils.ToUint64(result[columnName])
+	if err != nil {
+		fmt.Println(err)
+		return 0
+	}
+
+	return uint(value)
+}
+
+func (result SqlResult) ColumnValueUint8(columnName string) uint8 {
+	value, err := reflectutils.ToUint64(result[columnName])
+	if err != nil {
+		fmt.Println(err)
+		return 0
+	}
+
+	return uint8(value)
+}
+
+func (result SqlResult) ColumnValueUint16(columnName string) uint16 {
+	value, err := reflectutils.ToUint64(result[columnName])
+	if err != nil {
+		fmt.Println(err)
+		return 0
+	}
+
+	return uint16(value)
+}
+
+func (result SqlResult) ColumnValueUint32(columnName string) uint32 {
+	value, err := reflectutils.ToUint64(result[columnName])
+	if err != nil {
+		fmt.Println(err)
+		return 0
+	}
+
+	return uint32(value)
+}
+
+func (result SqlResult) ColumnValueUint64(columnName string) uint64 {
+	value, err := reflectutils.ToUint64(result[columnName])
+	if err != nil {
+		fmt.Println(err)
+		return 0
+	}
+
+	return value
+}
+
+func (result SqlResult) ColumnValueFloat32(columnName string) float32 {
+	value, err := reflectutils.ToFloat64(result[columnName])
+	if err != nil {
+		fmt.Println(err)
+		return 0
+	}
+
+	return float32(value)
+}
+
+func (result SqlResult) ColumnValueFloat64(columnName string) float64 {
+	value, err := reflectutils.ToFloat64(result[columnName])
+	if err != nil {
+		fmt.Println(err)
+		return 0
+	}
+
+	return value
+}

+ 14 - 4
sdk/transaction.go

@@ -13,7 +13,7 @@ type Transaction struct {
 	stream v1.SqlService_TransactionClient
 }
 
-func (tx *Transaction) ExecuteRawSql(sql string, executeParams map[string]any) ([]map[string]any, error) {
+func (tx *Transaction) ExecuteRawSql(sql string, executeParams map[string]any) ([]SqlResult, error) {
 	var retErr error
 
 	defer func() {
@@ -62,10 +62,15 @@ func (tx *Transaction) ExecuteRawSql(sql string, executeParams map[string]any) (
 		return nil, retErr
 	}
 
-	return tableRows, nil
+	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) ([]map[string]any, error) {
+func (tx *Transaction) ExecuteSql(name string, executeParams map[string]any) ([]SqlResult, error) {
 	var retErr error
 
 	defer func() {
@@ -114,5 +119,10 @@ func (tx *Transaction) ExecuteSql(name string, executeParams map[string]any) ([]
 		return nil, retErr
 	}
 
-	return tableRows, nil
+	results := make([]SqlResult, len(tableRows))
+	for i, row := range tableRows {
+		results[i] = row
+	}
+
+	return results, nil
 }

+ 13 - 32
sql/parse_table_row.go → sql/parse_result.go

@@ -6,32 +6,13 @@ import (
 	"git.sxidc.com/go-tools/utils/encoding"
 	"git.sxidc.com/go-tools/utils/reflectutils"
 	"git.sxidc.com/go-tools/utils/strutils"
+	"git.sxidc.com/service-supports/ds-sdk/sdk"
 	"reflect"
 	"strings"
 	"time"
 )
 
-const (
-	sqlResultTimeMicroFormat = "2006-01-02T15:04:05.000000+08:00"
-	sqlResultTimeMilliFormat = "2006-01-02T15:04:05.000+08:00"
-	sqlResultTimeSecFormat   = "2006-01-02T15:04:05+08:00"
-)
-
-func parseSqlTableRowTimeStr(timeStr string) (time.Time, error) {
-	var layout string
-
-	if strings.HasSuffix(timeStr, ".000000+08:00") {
-		layout = sqlResultTimeMicroFormat
-	} else if strings.HasSuffix(timeStr, ".000+08:00") {
-		layout = sqlResultTimeMilliFormat
-	} else {
-		layout = sqlResultTimeSecFormat
-	}
-
-	return time.ParseInLocation(layout, timeStr, time.Local)
-}
-
-func ParseSqlTableRow(input any, output any) error {
+func ParseSqlResult(input any, output any) error {
 	if input == nil || output == nil {
 		return nil
 	}
@@ -64,14 +45,14 @@ func ParseSqlTableRow(input any, output any) error {
 	}
 
 	// 构造需要遍历的tableRows
-	tableRows, ok := input.([]map[string]any)
+	tableRows, ok := input.([]sdk.SqlResult)
 	if !ok {
-		tableRow, ok := input.(map[string]any)
+		tableRow, ok := input.(sdk.SqlResult)
 		if !ok {
-			return errors.New("输入数据应该为[]map[string]any或[]map[string]any")
+			return errors.New("输入数据应该为[]sdk.SqlResult或[]sdk.SqlResult")
 		}
 
-		tableRows = []map[string]any{tableRow}
+		tableRows = []sdk.SqlResult{tableRow}
 	}
 
 	// 构造输出实体slice
@@ -107,8 +88,8 @@ func ParseSqlTableRow(input any, output any) error {
 	return nil
 }
 
-func formOutputEntity(tableRow map[string]any, outputEntity any) error {
-	sqlResult, err := ParseSqlResult(outputEntity)
+func formOutputEntity(tableRow sdk.SqlResult, outputEntity any) error {
+	sqlResult, err := ParseSqlResultTag(outputEntity)
 	if err != nil {
 		return err
 	}
@@ -145,7 +126,7 @@ func formOutputEntity(tableRow map[string]any, outputEntity any) error {
 				strValue := tableRowValue.(string)
 
 				if strutils.IsStringNotEmpty(element.ParseTime) {
-					parsedTime, err := parseSqlTableRowTimeStr(strValue)
+					parsedTime, err := sdk.ParseSqlResultTimeStr(strValue)
 					if err != nil {
 						return err
 					}
@@ -167,23 +148,23 @@ func formOutputEntity(tableRow map[string]any, outputEntity any) error {
 					return err
 				}
 			case reflect.Int64:
-				err := reflectutils.AssignIntValue(tableRowValue, fieldValueElem)
+				err := reflectutils.AssignInt64Value(tableRowValue, fieldValueElem)
 				if err != nil {
 					return err
 				}
 			case reflect.Uint64:
-				err := reflectutils.AssignUintValue(tableRowValue, fieldValueElem)
+				err := reflectutils.AssignUint64Value(tableRowValue, fieldValueElem)
 				if err != nil {
 					return err
 				}
 			case reflect.Float64:
-				err := reflectutils.AssignFloatValue(tableRowValue, fieldValueElem)
+				err := reflectutils.AssignFloat64Value(tableRowValue, fieldValueElem)
 				if err != nil {
 					return err
 				}
 			case reflect.Struct:
 				if fieldValueElem.Type() == reflect.TypeOf(time.Time{}) {
-					parsedTime, err := parseSqlTableRowTimeStr(tableRowValue.(string))
+					parsedTime, err := sdk.ParseSqlResultTimeStr(tableRowValue.(string))
 					if err != nil {
 						return err
 					}

+ 15 - 10
sql/sql.go

@@ -11,8 +11,8 @@ import (
 )
 
 type Executor interface {
-	ExecuteRawSql(sql string, executeParams map[string]any) ([]map[string]any, error)
-	ExecuteSql(name string, executeParams map[string]any) ([]map[string]any, error)
+	ExecuteRawSql(sql string, executeParams map[string]any) ([]sdk.SqlResult, error)
+	ExecuteSql(name string, executeParams map[string]any) ([]sdk.SqlResult, error)
 }
 
 const (
@@ -61,7 +61,7 @@ func InsertEntity[T any](executor Executor, tableName string, e T) error {
 }
 
 func formInsertTableRow(e any, tableRows *sql_tpl.TableRows) error {
-	sqlMapping, err := ParseSqlMapping(e)
+	sqlMapping, err := ParseSqlMappingTag(e)
 	if err != nil {
 		return err
 	}
@@ -163,7 +163,7 @@ func DeleteEntity[T any](executor Executor, tableName string, e T) error {
 }
 
 func formDeleteConditions(e any, conditions *sql_tpl.Conditions) error {
-	sqlMapping, err := ParseSqlMapping(e)
+	sqlMapping, err := ParseSqlMappingTag(e)
 	if err != nil {
 		return err
 	}
@@ -239,7 +239,7 @@ func UpdateEntity[T any](executor Executor, tableName string, e T) error {
 }
 
 func formUpdateTableRowsAndConditions(e any, tableRows *sql_tpl.TableRows, conditions *sql_tpl.Conditions) error {
-	sqlMapping, err := ParseSqlMapping(e)
+	sqlMapping, err := ParseSqlMappingTag(e)
 	if err != nil {
 		return err
 	}
@@ -389,7 +389,7 @@ func Update(executor Executor, executeParams *sql_tpl.UpdateExecuteParams) error
 	return nil
 }
 
-func Query(executor Executor, executeParams *sql_tpl.QueryExecuteParams) ([]map[string]any, int64, error) {
+func Query(executor Executor, executeParams *sql_tpl.QueryExecuteParams) ([]sdk.SqlResult, int64, error) {
 	if executor == nil {
 		return nil, 0, errors.New("没有传递执行器")
 	}
@@ -421,10 +421,15 @@ func Query(executor Executor, executeParams *sql_tpl.QueryExecuteParams) ([]map[
 		return nil, 0, err
 	}
 
-	return tableRows, int64(countTableRow[0]["count"].(float64)), nil
+	results := make([]sdk.SqlResult, len(tableRows))
+	for i, row := range tableRows {
+		results[i] = row
+	}
+
+	return results, int64(countTableRow[0]["count"].(float64)), nil
 }
 
-func QueryOne(executor Executor, executeParams *sql_tpl.QueryOneExecuteParams) (map[string]any, error) {
+func QueryOne(executor Executor, executeParams *sql_tpl.QueryOneExecuteParams) (sdk.SqlResult, error) {
 	if executor == nil {
 		return nil, errors.New("没有传递执行器")
 	}
@@ -516,7 +521,7 @@ func CheckHasOnlyOne(executor Executor, executeParams *sql_tpl.CheckHasOnlyOneEx
 	return int64(tableRows[0]["count"].(float64)) == 1, nil
 }
 
-func ExecuteRawSql(executor Executor, sql string, executeParams map[string]any) ([]map[string]any, error) {
+func ExecuteRawSql(executor Executor, sql string, executeParams map[string]any) ([]sdk.SqlResult, error) {
 	if executor == nil {
 		return nil, errors.New("没有传递执行器")
 	}
@@ -533,7 +538,7 @@ func ExecuteRawSql(executor Executor, sql string, executeParams map[string]any)
 	return tableRows, nil
 }
 
-func ExecuteSql(executor Executor, name string, executeParams map[string]any) ([]map[string]any, error) {
+func ExecuteSql(executor Executor, name string, executeParams map[string]any) ([]sdk.SqlResult, error) {
 	if executor == nil {
 		return nil, errors.New("没有传递执行器")
 	}

+ 1 - 1
sql/sql_mapping.go

@@ -31,7 +31,7 @@ type Mapping struct {
 	MappingElement map[string]any
 }
 
-func ParseSqlMapping(e any) (*Mapping, error) {
+func ParseSqlMappingTag(e any) (*Mapping, error) {
 	if e == nil {
 		return nil, errors.New("没有传递实体")
 	}

+ 1 - 1
sql/sql_result.go

@@ -28,7 +28,7 @@ type Result struct {
 	ResultElement map[string]any
 }
 
-func ParseSqlResult(e any) (*Result, error) {
+func ParseSqlResultTag(e any) (*Result, error) {
 	if e == nil {
 		return nil, errors.New("没有传递实体")
 	}

+ 6 - 6
test/sdk_test.go

@@ -290,7 +290,7 @@ func TestRawSqlTemplate(t *testing.T) {
 	}
 
 	classes := make([]Class, 0)
-	err = sql.ParseSqlTableRow(queryResults, &classes)
+	err = sql.ParseSqlResult(queryResults, &classes)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -329,7 +329,7 @@ func TestRawSqlTemplate(t *testing.T) {
 	}
 
 	classes = make([]Class, 0)
-	err = sql.ParseSqlTableRow(queryResults, &classes)
+	err = sql.ParseSqlResult(queryResults, &classes)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -363,7 +363,7 @@ func TestSqlMapping(t *testing.T) {
 }
 
 func checkSqlMapping(t *testing.T, e any) {
-	sqlMapping, err := sql.ParseSqlMapping(e)
+	sqlMapping, err := sql.ParseSqlMappingTag(e)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -428,7 +428,7 @@ func TestSqlResult(t *testing.T) {
 }
 
 func checkSqlResult(t *testing.T, e any) {
-	sqlResult, err := sql.ParseSqlResult(e)
+	sqlResult, err := sql.ParseSqlResultTag(e)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -724,7 +724,7 @@ func TestSql(t *testing.T) {
 		t.Fatal("总数不正确")
 	}
 
-	err = sql.ParseSqlTableRow(tableRows, &queryClasses)
+	err = sql.ParseSqlResult(tableRows, &queryClasses)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -751,7 +751,7 @@ func TestSql(t *testing.T) {
 		t.Fatal(err)
 	}
 
-	err = sql.ParseSqlTableRow(tableRow, queryClass)
+	err = sql.ParseSqlResult(tableRow, queryClass)
 	if err != nil {
 		t.Fatal(err)
 	}