209 lines
6.5 KiB
Go
209 lines
6.5 KiB
Go
package connector
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"reflect"
|
|
"time"
|
|
|
|
"github.com/taosdata/go-utils/log"
|
|
"github.com/taosdata/go-utils/tdengine/config"
|
|
"github.com/taosdata/go-utils/tdengine/connector"
|
|
tdengineExecutor "github.com/taosdata/go-utils/tdengine/executor"
|
|
)
|
|
|
|
type Executor struct {
|
|
executor *tdengineExecutor.Executor
|
|
ctx context.Context
|
|
}
|
|
|
|
var Logger = log.NewLogger("taos test")
|
|
|
|
func NewExecutor(conf *config.TDengineGo, db string, showSql bool) (*Executor, error) {
|
|
tdengineConnector, err := connector.NewTDengineConnector("go", conf)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
executor := tdengineExecutor.NewExecutor(tdengineConnector, db, showSql, Logger)
|
|
return &Executor{
|
|
executor: executor,
|
|
ctx: context.Background(),
|
|
}, nil
|
|
}
|
|
|
|
func (e *Executor) Execute(sql string) (int64, error) {
|
|
return e.executor.DoExec(e.ctx, sql)
|
|
}
|
|
func (e *Executor) Query(sql string) (*connector.Data, error) {
|
|
fmt.Println("query :", sql)
|
|
return e.executor.DoQuery(e.ctx, sql)
|
|
}
|
|
func (e *Executor) CheckData(row, col int, value interface{}, data *connector.Data) (bool, error) {
|
|
if data == nil {
|
|
return false, fmt.Errorf("data is nil")
|
|
}
|
|
if col >= len(data.Head) {
|
|
return false, fmt.Errorf("col out of data")
|
|
}
|
|
if row >= len(data.Data) {
|
|
return false, fmt.Errorf("row out of data")
|
|
}
|
|
dataValue := data.Data[row][col]
|
|
|
|
if dataValue == nil && value != nil {
|
|
return false, fmt.Errorf("dataValue is nil but value is not nil")
|
|
}
|
|
if dataValue == nil && value == nil {
|
|
return true, nil
|
|
}
|
|
if reflect.TypeOf(dataValue) != reflect.TypeOf(value) {
|
|
return false, fmt.Errorf("type not match expect %s got %s", reflect.TypeOf(value), reflect.TypeOf(dataValue))
|
|
}
|
|
switch value.(type) {
|
|
case time.Time:
|
|
t, _ := dataValue.(time.Time)
|
|
if value.(time.Time).Nanosecond() != t.Nanosecond() {
|
|
return false, fmt.Errorf("value not match expect %d got %d", value.(time.Time).Nanosecond(), t.Nanosecond())
|
|
}
|
|
case string:
|
|
if value.(string) != dataValue.(string) {
|
|
return false, fmt.Errorf("value not match expect %s got %s", value.(string), dataValue.(string))
|
|
}
|
|
case int8:
|
|
if value.(int8) != dataValue.(int8) {
|
|
return false, fmt.Errorf("value not match expect %d got %d", value.(int8), dataValue.(int8))
|
|
}
|
|
case int16:
|
|
if value.(int16) != dataValue.(int16) {
|
|
return false, fmt.Errorf("value not match expect %d got %d", value.(int16), dataValue.(int16))
|
|
}
|
|
case int32:
|
|
if value.(int32) != dataValue.(int32) {
|
|
return false, fmt.Errorf("value not match expect %d got %d", value.(int32), dataValue.(int32))
|
|
}
|
|
case int64:
|
|
if value.(int64) != dataValue.(int64) {
|
|
return false, fmt.Errorf("value not match expect %d got %d", value.(int64), dataValue.(int64))
|
|
}
|
|
case float32:
|
|
if value.(float32) != dataValue.(float32) {
|
|
return false, fmt.Errorf("value not match expect %f got %f", value.(float32), dataValue.(float32))
|
|
}
|
|
case float64:
|
|
if value.(float64) != dataValue.(float64) {
|
|
return false, fmt.Errorf("value not match expect %f got %f", value.(float32), dataValue.(float32))
|
|
}
|
|
case bool:
|
|
if value.(bool) != dataValue.(bool) {
|
|
return false, fmt.Errorf("value not match expect %t got %t", value.(bool), dataValue.(bool))
|
|
}
|
|
default:
|
|
return false, fmt.Errorf("unsupport type %v", reflect.TypeOf(value))
|
|
}
|
|
return true, nil
|
|
}
|
|
|
|
func (e *Executor) CheckData2(row, col int, value interface{}, data *connector.Data) {
|
|
|
|
match, err := e.CheckData(row, col, value, data)
|
|
fmt.Println("expect data is :", value)
|
|
fmt.Println("go got data is :", data.Data[row][col])
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
if !match {
|
|
fmt.Println(" data not match")
|
|
|
|
}
|
|
|
|
/*
|
|
fmt.Println(value)
|
|
if data == nil {
|
|
// return false, fmt.Errorf("data is nil")
|
|
// fmt.Println("check failed")
|
|
}
|
|
if col >= len(data.Head) {
|
|
// return false, fmt.Errorf("col out of data")
|
|
// fmt.Println("check failed")
|
|
}
|
|
if row >= len(data.Data) {
|
|
// return false, fmt.Errorf("row out of data")
|
|
// fmt.Println("check failed")
|
|
}
|
|
dataValue := data.Data[row][col]
|
|
|
|
if dataValue == nil && value != nil {
|
|
// return false, fmt.Errorf("dataValue is nil but value is not nil")
|
|
// fmt.Println("check failed")
|
|
}
|
|
if dataValue == nil && value == nil {
|
|
// return true, nil
|
|
fmt.Println("check pass")
|
|
}
|
|
if reflect.TypeOf(dataValue) != reflect.TypeOf(value) {
|
|
// return false, fmt.Errorf("type not match expect %s got %s", reflect.TypeOf(value), reflect.TypeOf(dataValue))
|
|
fmt.Println("check failed")
|
|
}
|
|
switch value.(type) {
|
|
case time.Time:
|
|
t, _ := dataValue.(time.Time)
|
|
if value.(time.Time).Nanosecond() != t.Nanosecond() {
|
|
// return false, fmt.Errorf("value not match expect %d got %d", value.(time.Time).Nanosecond(), t.Nanosecond())
|
|
// fmt.Println("check failed")
|
|
}
|
|
case string:
|
|
if value.(string) != dataValue.(string) {
|
|
// return false, fmt.Errorf("value not match expect %s got %s", value.(string), dataValue.(string))
|
|
// fmt.Println("check failed")
|
|
}
|
|
case int8:
|
|
if value.(int8) != dataValue.(int8) {
|
|
// return false, fmt.Errorf("value not match expect %d got %d", value.(int8), dataValue.(int8))
|
|
// fmt.Println("check failed")
|
|
}
|
|
case int16:
|
|
if value.(int16) != dataValue.(int16) {
|
|
// return false, fmt.Errorf("value not match expect %d got %d", value.(int16), dataValue.(int16))
|
|
// fmt.Println("check failed")
|
|
}
|
|
case int32:
|
|
if value.(int32) != dataValue.(int32) {
|
|
// return false, fmt.Errorf("value not match expect %d got %d", value.(int32), dataValue.(int32))
|
|
// fmt.Println("check failed")
|
|
}
|
|
case int64:
|
|
if value.(int64) != dataValue.(int64) {
|
|
// return false, fmt.Errorf("value not match expect %d got %d", value.(int64), dataValue.(int64))
|
|
// fmt.Println("check failed")
|
|
}
|
|
case float32:
|
|
if value.(float32) != dataValue.(float32) {
|
|
// return false, fmt.Errorf("value not match expect %f got %f", value.(float32), dataValue.(float32))
|
|
// fmt.Println("check failed")
|
|
}
|
|
case float64:
|
|
if value.(float64) != dataValue.(float64) {
|
|
// return false, fmt.Errorf("value not match expect %f got %f", value.(float32), dataValue.(float32))
|
|
// fmt.Println("check failed")
|
|
}
|
|
case bool:
|
|
if value.(bool) != dataValue.(bool) {
|
|
// return false, fmt.Errorf("value not match expect %t got %t", value.(bool), dataValue.(bool))
|
|
// fmt.Println("check failed")
|
|
}
|
|
default:
|
|
// return false, fmt.Errorf("unsupport type %v", reflect.TypeOf(value))
|
|
// fmt.Println("check failed")
|
|
}
|
|
// return true, nil
|
|
// fmt.Println("check pass")
|
|
*/
|
|
}
|
|
|
|
func (e *Executor) CheckRow(count int, data *connector.Data) {
|
|
|
|
if len(data.Data) != count {
|
|
fmt.Println("check failed !")
|
|
}
|
|
}
|