package tdmap import ( "database/sql" "fmt" "testing" "time" ) type TaosTAG struct { DevId string `db:"dev_id" taos:"tag"` DevType string `db:"dev_type" taos:"tag"` DataType string `db:"data_type" taos:"tag"` Alias string `db:"alias"` } type TaosDevice struct { *TaosTAG Ts time.Time `db:"ts"` // 时间戳 Ts2 *time.Time `db:"ts2"` // 时间戳 LoadUnitId string `db:"load_unit_id" taos:"tag"` // 负载单体 id NullInt *int `db:"null_int"` DefString string `db:"def_string"` PInt *int `db:"p_int"` NullInt64 sql.NullInt64 `db:"null_int64"` NullInt32 sql.NullInt32 `db:"null_int32"` } func (s *TaosDevice) SuperTableName() string { return "super_device" } func (s *TaosDevice) TableName() string { return "device_" + s.DevId } type TaosUser struct { *TaosTAG Name string `db:"name" taos:"tag"` Ts time.Time `db:"ts"` // 时间戳 // 体重 Weight int `db:"weight"` } func (s *TaosUser) SuperTableName() string { return "super_user" } func (s *TaosUser) TableName() string { return "user_" + s.DevId } func TestBuilderInsert(t *testing.T) { tdMapping := NewMapping() p := 1 data := []any{ &TaosDevice{ TaosTAG: &TaosTAG{ DevId: "设备ID", DevType: "测试设备", DataType: "测试数据", }, Ts: time.Now(), LoadUnitId: "负载单体ID", PInt: &p, NullInt32: sql.NullInt32{Int32: 32, Valid: true}, }, &TaosUser{ TaosTAG: &TaosTAG{ DevId: "User001", DevType: "User类型", DataType: "User数据类型001", }, Ts: time.Now(), Name: "张三", }, &TaosUser{ TaosTAG: &TaosTAG{ DevId: "User002", DevType: "User类型", DataType: "User数据类型002", }, Ts: time.Now(), Name: "李四", Weight: 110, }, &TaosUser{ TaosTAG: &TaosTAG{ DevId: "User002", DevType: "User类型", DataType: "User数据类型002", }, Name: "李四", Ts: time.Now(), Weight: 100, }, } insertSql, err := tdMapping.ToInsertSQL(data...) if err != nil { t.Fatal(err) } fmt.Println(insertSql) } type User struct { Name string `db:"name" taos:"tag"` Age int `db:"age"` } func (u *User) TableName() string { return "user_" + u.Name } func (u *User) SuperTableName() string { return "super_user" } func TestSimpleInsert(t *testing.T) { tdMapping := NewMapping() data := []any{ &User{Name: "张三", Age: 18}, &User{Name: "李四", Age: 20}, } insertSql, err := tdMapping.ToInsertSQL(data...) if err != nil { t.Fatal(err) } fmt.Println(insertSql) }