mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-07-12 16:02:48 +08:00
🐛 fix(tdengine): 修复低版本驱动连接与表元数据兼容问题
- 修复 TDengine 历史驱动源码构建未按所选版本切换依赖的问题 - 为 DESCRIBE 与 SHOW CREATE 增加旧版本语法降级,避免表详情加载报错 - 为表概览补充 TDengine 专用查询分支,避免误查 information_schema - 补充 TDengine 兼容性与驱动构建回归测试 Refs #531
This commit is contained in:
@@ -251,3 +251,75 @@ func TestTDengineGetTablesIncludesSuperTables(t *testing.T) {
|
||||
t.Fatalf("unexpected tables: got=%v want=%v", tables, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTDengineGetColumnsFallsBackToLegacyDescribeSyntax(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
dbConn, state := openTDengineRecordingDB(t)
|
||||
state.mu.Lock()
|
||||
state.queryResults["DESCRIBE `metrics`.`meters`"] = tdengineQueryResult{
|
||||
err: fmt.Errorf("[0x2600] syntax error near '`metrics`.`meters`'"),
|
||||
}
|
||||
state.queryResults["DESCRIBE metrics.meters"] = tdengineQueryResult{
|
||||
columns: []string{"Field", "Type", "Note", "Null"},
|
||||
rows: [][]driver.Value{
|
||||
{"ts", "TIMESTAMP", "", "NO"},
|
||||
{"value", "DOUBLE", "", "YES"},
|
||||
},
|
||||
}
|
||||
state.mu.Unlock()
|
||||
|
||||
td := &TDengineDB{conn: dbConn}
|
||||
columns, err := td.GetColumns("metrics", "meters")
|
||||
if err != nil {
|
||||
t.Fatalf("GetColumns returned error: %v", err)
|
||||
}
|
||||
|
||||
if len(columns) != 2 {
|
||||
t.Fatalf("expected 2 columns, got %d", len(columns))
|
||||
}
|
||||
queries := state.snapshotQueries()
|
||||
wantQueries := []string{"DESCRIBE `metrics`.`meters`", "DESCRIBE metrics.meters"}
|
||||
if !reflect.DeepEqual(queries, wantQueries) {
|
||||
t.Fatalf("unexpected query sequence: got=%v want=%v", queries, wantQueries)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTDengineGetCreateStatementFallsBackToLegacySyntax(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
dbConn, state := openTDengineRecordingDB(t)
|
||||
state.mu.Lock()
|
||||
state.queryResults["SHOW CREATE TABLE `metrics`.`meters`"] = tdengineQueryResult{
|
||||
err: fmt.Errorf("[0x2600] syntax error near '`metrics`.`meters`'"),
|
||||
}
|
||||
state.queryResults["SHOW CREATE STABLE `metrics`.`meters`"] = tdengineQueryResult{
|
||||
err: fmt.Errorf("[0x2600] syntax error near '`metrics`.`meters`'"),
|
||||
}
|
||||
state.queryResults["SHOW CREATE TABLE metrics.meters"] = tdengineQueryResult{
|
||||
columns: []string{"SQL"},
|
||||
rows: [][]driver.Value{
|
||||
{"CREATE TABLE metrics.meters (ts TIMESTAMP, value DOUBLE)"},
|
||||
},
|
||||
}
|
||||
state.mu.Unlock()
|
||||
|
||||
td := &TDengineDB{conn: dbConn}
|
||||
ddl, err := td.GetCreateStatement("metrics", "meters")
|
||||
if err != nil {
|
||||
t.Fatalf("GetCreateStatement returned error: %v", err)
|
||||
}
|
||||
if ddl != "CREATE TABLE metrics.meters (ts TIMESTAMP, value DOUBLE)" {
|
||||
t.Fatalf("unexpected DDL: %q", ddl)
|
||||
}
|
||||
|
||||
queries := state.snapshotQueries()
|
||||
wantQueries := []string{
|
||||
"SHOW CREATE TABLE `metrics`.`meters`",
|
||||
"SHOW CREATE STABLE `metrics`.`meters`",
|
||||
"SHOW CREATE TABLE metrics.meters",
|
||||
}
|
||||
if !reflect.DeepEqual(queries, wantQueries) {
|
||||
t.Fatalf("unexpected query sequence: got=%v want=%v", queries, wantQueries)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user