Merge branch 'main' of https://github.com/taosdata/TDengine into fix/ly_stream_main
This commit is contained in:
commit
03c3efbf92
|
@ -37,7 +37,7 @@ TDengine 提供了丰富的应用程序开发接口,为了便于用户快速
|
|||
|
||||
关键不同点在于:
|
||||
|
||||
1. 使用 原生连接,需要保证客户端的驱动程序 taosc 和服务端的 TDengine 版本配套。
|
||||
1. 使用 原生连接,需要保证客户端的驱动程序 taosc 和服务端的 TDengine 版本保持一致。
|
||||
2. 使用 REST 连接,用户无需安装客户端驱动程序 taosc,具有跨平台易用的优势,但是无法体验数据订阅和二进制数据类型等功能。另外与 原生连接 和 WebSocket 连接相比,REST连接的性能最低。REST 接口是无状态的。在使用 REST 连接时,需要在 SQL 中指定表、超级表的数据库名称。
|
||||
3. 使用 WebSocket 连接,用户也无需安装客户端驱动程序 taosc。
|
||||
4. 连接云服务实例,必须使用 REST 连接 或 WebSocket 连接。
|
||||
|
|
|
@ -4944,7 +4944,7 @@ const SBuiltinFuncDefinition funcMgtBuiltins[] = {
|
|||
.paramInfoPattern = 0,
|
||||
.outputParaInfo = {.validDataType = FUNC_PARAM_SUPPORT_ALL_TYPE}},
|
||||
.translateFunc = translateSelectValue,
|
||||
.getEnvFunc = getSelectivityFuncEnv,
|
||||
.getEnvFunc = getGroupKeyFuncEnv,
|
||||
.initFunc = functionSetup,
|
||||
.processFunc = groupConstValueFunction,
|
||||
.finalizeFunc = groupConstValueFinalize,
|
||||
|
|
|
@ -5623,7 +5623,11 @@ static int32_t getTimeRange(SNode** pPrimaryKeyCond, STimeWindow* pTimeRange, bo
|
|||
int32_t code = scalarCalculateConstants(*pPrimaryKeyCond, &pNew);
|
||||
if (TSDB_CODE_SUCCESS == code) {
|
||||
*pPrimaryKeyCond = pNew;
|
||||
code = filterGetTimeRange(*pPrimaryKeyCond, pTimeRange, pIsStrict);
|
||||
if (nodeType(pNew) == QUERY_NODE_VALUE) {
|
||||
*pTimeRange = TSWINDOW_INITIALIZER;
|
||||
} else {
|
||||
code = filterGetTimeRange(*pPrimaryKeyCond, pTimeRange, pIsStrict);
|
||||
}
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
|
|
@ -515,6 +515,18 @@ class TDTestCase:
|
|||
tdSql.query(f"select t1 from {dbname}.stb1 where abs(c1+t1)=1")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.checkData(0,0,0)
|
||||
tdSql.query(f"select * from {dbname}.stb1")
|
||||
rows = tdSql.queryRows
|
||||
tdSql.query(f"select t1 from {dbname}.stb1 where abs(c1+t1)=1 or (1<2)")
|
||||
tdSql.checkRows(rows)
|
||||
tdSql.query(f"select t1 from {dbname}.stb1 where abs(c1+t1)=1 and (1<2)")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.checkData(0,0,0)
|
||||
tdSql.query(f"select t1 from {dbname}.stb1 where abs(c1+t1)=1 and (1>2)")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.query(f"select t1 from {dbname}.stb1 where abs(c1+t1)=1 or (1>2)")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.checkData(0,0,0)
|
||||
|
||||
tdSql.query(
|
||||
f"select abs(c1+t1)*t1 from {dbname}.stb1 where abs(c1)/floor(abs(ceil(t1))) ==1")
|
||||
|
|
|
@ -451,7 +451,74 @@ class TDTestCase:
|
|||
sql = "select avg(c1), concat(t9,t10) from db.stb group by concat(t9,t10), concat(t9,t10),tbname"
|
||||
tdSql.query(sql, queryTimes=1)
|
||||
tdSql.checkRows(5)
|
||||
|
||||
def test_TS_5727(self):
|
||||
tdSql.execute(f" use {self.dbname} ")
|
||||
stableName = "test5727"
|
||||
sql = f"CREATE STABLE {self.dbname}.{stableName} (`ts` TIMESTAMP, `WaterConsumption` FLOAT, \
|
||||
`ElecConsumption` INT, `Status` BOOL, `status2` BOOL, `online` BOOL) \
|
||||
TAGS (`ActivationTime` TIMESTAMP, `ProductId` INT, \
|
||||
`ProductMac` VARCHAR(24), `location` INT)"
|
||||
tdSql.execute(sql)
|
||||
|
||||
sql = f'CREATE TABLE {self.dbname}.`d00` USING {self.dbname}.{stableName} \
|
||||
(`ActivationTime`, `ProductId`, `ProductMac`, `location`) \
|
||||
TAGS (1733124710578, 1001, "00:11:22:33:44:55", 100000)'
|
||||
tdSql.execute(sql)
|
||||
sql = f'CREATE TABLE {self.dbname}.`d01` USING {self.dbname}.{stableName} \
|
||||
(`ActivationTime`, `ProductId`, `ProductMac`, `location`) \
|
||||
TAGS (1733124723572, 1002, "00:12:22:33:44:55", 200000)'
|
||||
tdSql.execute(sql)
|
||||
sql = f'CREATE TABLE {self.dbname}.`d02` USING {self.dbname}.{stableName} \
|
||||
(`ActivationTime`, `ProductId`, `ProductMac`, `location`) \
|
||||
TAGS (1733124730908, 1003, "00:11:23:33:44:55", 100000)'
|
||||
tdSql.execute(sql)
|
||||
|
||||
sql = f'insert into {self.dbname}.d00 values(now - 2s, 5, 5, true, true, false);'
|
||||
tdSql.execute(sql)
|
||||
sql = f'insert into {self.dbname}.d01 values(now - 1s, 6, 5, true, true, true);'
|
||||
tdSql.execute(sql)
|
||||
sql = f'insert into {self.dbname}.d02 values(now, 6, 7, true, true, true);'
|
||||
tdSql.execute(sql)
|
||||
|
||||
sql = f'select `location`, tbname from {self.dbname}.{stableName} where ts < now group by tbname order by tbname;'
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(3)
|
||||
tdSql.checkData(0, 0, 100000)
|
||||
tdSql.checkData(1, 0, 200000)
|
||||
tdSql.checkData(2, 0, 100000)
|
||||
tdSql.checkData(0, 1, "d00")
|
||||
tdSql.checkData(1, 1, "d01")
|
||||
tdSql.checkData(2, 1, "d02")
|
||||
|
||||
sql = f'select tbname,last(online) as online,location from {self.dbname}.{stableName} where ts < now group by tbname order by tbname;'
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(3)
|
||||
tdSql.checkData(0, 0, "d00")
|
||||
tdSql.checkData(1, 0, "d01")
|
||||
tdSql.checkData(2, 0, "d02")
|
||||
tdSql.checkData(0, 1, False)
|
||||
tdSql.checkData(1, 1, True)
|
||||
tdSql.checkData(2, 1, True)
|
||||
tdSql.checkData(0, 2, 100000)
|
||||
tdSql.checkData(1, 2, 200000)
|
||||
tdSql.checkData(2, 2, 100000)
|
||||
|
||||
|
||||
sql = f'select location,tbname,last_row(online) as online from {self.dbname}.{stableName} where ts < now group by tbname order by tbname;'
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(3)
|
||||
tdSql.checkData(0, 0, 100000)
|
||||
tdSql.checkData(1, 0, 200000)
|
||||
tdSql.checkData(2, 0, 100000)
|
||||
tdSql.checkData(0, 1, "d00")
|
||||
tdSql.checkData(1, 1, "d01")
|
||||
tdSql.checkData(2, 1, "d02")
|
||||
tdSql.checkData(0, 2, False)
|
||||
tdSql.checkData(1, 2, True)
|
||||
tdSql.checkData(2, 2, True)
|
||||
|
||||
|
||||
def run(self):
|
||||
tdSql.prepare()
|
||||
self.prepare_db()
|
||||
|
@ -493,6 +560,8 @@ class TDTestCase:
|
|||
# self.test_groupby('group', 5, 5)
|
||||
|
||||
self.test_error()
|
||||
|
||||
self.test_TS_5727()
|
||||
|
||||
|
||||
def stop(self):
|
||||
|
|
|
@ -64,6 +64,10 @@ class TDTestCase:
|
|||
tdSql.query(f"select tbname , max(c1) from {dbname}.sub_stb_1 where c1 is null group by c1 order by c1 desc ")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.checkData(0,0,"sub_stb_1")
|
||||
tdSql.query(f"select tbname , max(c1) from {dbname}.sub_stb_1 group by c1 order by c1 desc ")
|
||||
rows = tdSql.queryRows
|
||||
tdSql.query(f"select tbname , max(c1) from {dbname}.sub_stb_1 where c1 is null or (1<2) group by c1 order by c1 desc ")
|
||||
tdSql.checkRows(rows)
|
||||
|
||||
tdSql.query(f"select max(c1) ,c2 ,t2,tbname from {dbname}.stb group by abs(c1) order by abs(c1)")
|
||||
tdSql.checkRows(self.row_nums+1)
|
||||
|
|
|
@ -75,6 +75,25 @@ class TDTestCase:
|
|||
tdSql.checkData(1, 1, 3)
|
||||
tdSql.checkData(2, 1, 9)
|
||||
|
||||
tdSql.query(f"select * from {dbname}.stb_1 order by ts")
|
||||
rows = tdSql.queryRows
|
||||
tdSql.query(f"select * from {dbname}.stb_1 where col1 in (1, 2) or (1<2) order by ts")
|
||||
tdSql.checkRows(rows)
|
||||
|
||||
tdSql.query(f"select * from (select * from {dbname}.stb_1 where col1 in (1, 9, 3) or (1<2) order by ts)")
|
||||
tdSql.checkRows(rows)
|
||||
|
||||
tdSql.query(f"select * from {dbname}.stb_1 where col1 in (1, 2) and (1<2) order by ts")
|
||||
tdSql.checkRows(2)
|
||||
tdSql.checkData(0, 1, 1)
|
||||
tdSql.checkData(1, 1, 2)
|
||||
|
||||
tdSql.query(f"select * from {dbname}.stb_1 where col1 in (1, 9, 3) and (1<2) order by ts")
|
||||
tdSql.checkRows(3)
|
||||
tdSql.checkData(0, 1, 1)
|
||||
tdSql.checkData(1, 1, 3)
|
||||
tdSql.checkData(2, 1, 9)
|
||||
|
||||
tdSql.query(f"select * from {dbname}.stb_1 where col1 in (1, 9, 3, 'xy') order by ts")
|
||||
tdSql.checkRows(3)
|
||||
tdSql.checkData(0, 1, 1)
|
||||
|
@ -160,7 +179,7 @@ class TDTestCase:
|
|||
tdSql.prepare()
|
||||
|
||||
self.timeZoneTest()
|
||||
# self.inAndNotinTest()
|
||||
self.inAndNotinTest()
|
||||
|
||||
|
||||
def stop(self):
|
||||
|
|
|
@ -28,6 +28,10 @@ class TDTestCase:
|
|||
for type_name in stype:
|
||||
tdsql.execute(f"drop table if exists {dbname}.{stbname}")
|
||||
tdsql.execute(f"create table if not exists {dbname}.{stbname} (ts timestamp, v1 {type_name}) tags(t1 {type_name})")
|
||||
|
||||
tdsql.query(f"select t1, * from {dbname}.{stbname} where t1 not in (1, 2) or (1<2) order by t1")
|
||||
tdsql.checkRows(0)
|
||||
|
||||
tdsql.execute(f"insert into {dbname}.sub_1 using {dbname}.{stbname} tags(1) values({self.ts}, 10)")
|
||||
tdsql.execute(f"insert into {dbname}.sub_2 using {dbname}.{stbname} tags(2) values({self.ts + 1000}, 20)")
|
||||
tdsql.execute(f"insert into {dbname}.sub_3 using {dbname}.{stbname} tags(3) values({self.ts + 2000}, 30)")
|
||||
|
@ -36,6 +40,11 @@ class TDTestCase:
|
|||
tdsql.query(f"select t1, * from {dbname}.{stbname} where t1 not in (1, 2) order by t1")
|
||||
tdsql.checkRows(1)
|
||||
tdsql.checkData(0, 0, 3)
|
||||
tdsql.query(f"select * from {dbname}.{stbname} where t1 not in (1, 2) or (1<2) order by t1")
|
||||
tdsql.checkRows(3)
|
||||
tdsql.checkData(0, 1, 10)
|
||||
tdsql.checkData(1, 1, 20)
|
||||
tdsql.checkData(2, 1, 30)
|
||||
|
||||
# Test case 2: NOT BETWEEN
|
||||
tdsql.query(f"select * from {dbname}.{stbname} where v1 not between 10 and 20 order by t1")
|
||||
|
|
Loading…
Reference in New Issue