fix: select tbname when use multi select function

This commit is contained in:
facetosea 2025-02-18 20:14:05 +08:00
parent bd3a36bd12
commit 5c64684965
2 changed files with 76 additions and 1 deletions

View File

@ -3894,7 +3894,7 @@ static EDealRes doCheckExprForGroupBy(SNode** pNode, void* pContext) {
}
if (isScanPseudoColumnFunc(*pNode) || QUERY_NODE_COLUMN == nodeType(*pNode)) {
if ((pSelect->selectFuncNum > 1 || (isDistinctOrderBy(pCxt) && pCxt->currClause == SQL_CLAUSE_ORDER_BY)) &&
if (((pSelect->selectFuncNum > 1 && pCxt->stableQuery) || (isDistinctOrderBy(pCxt) && pCxt->currClause == SQL_CLAUSE_ORDER_BY)) &&
!isRelatedToOtherExpr((SExprNode*)*pNode)) {
return generateDealNodeErrMsg(pCxt, getGroupByErrorCode(pCxt), ((SExprNode*)(*pNode))->userAlias);
}

View File

@ -1022,7 +1022,82 @@ class TDTestCase:
self.orderby_test("(select *, tbname from test.long_col_test)", "longcolumntestlongcolumntestlongcolumntestlongcolumntest88888888", True)
tdLog.info("long_column_name_test subquery_test: one_cols_multi_output_with_group_test from meters")
def test1(self):
dbname = "db1"
tdSql.execute(f"drop database if exists {dbname} ")
tdSql.execute(f"create database {dbname} vgroups 6")
tdSql.execute(f"use {dbname}")
tdSql.execute(f" create stable {dbname}.sta (ts timestamp, f1 int, f2 binary(10), f3 bool) tags(t1 int, t2 bool, t3 binary(10));")
tdSql.execute(f" create table {dbname}.tba1 using sta tags(0, false, '0');")
tdSql.execute(f" create table {dbname}.tba2 using sta tags(1, true, '1');")
tdSql.execute(f" create table {dbname}.tba3 using sta tags(null, null, '');")
tdSql.execute(f" create table {dbname}.tba4 using sta tags(1, false, null);")
tdSql.execute(f" create table {dbname}.tba5 using sta tags(3, true, 'aa');")
tdSql.execute(f"insert into {dbname}.tba1 values ('2022-09-26 15:15:01', 0, 'a', false);")
tdSql.execute(f"insert into {dbname}.tba1 values ('2022-09-26 15:15:02', 1, '0', true);")
tdSql.execute(f"insert into {dbname}.tba1 values ('2022-09-26 15:15:03', 5, '5', false);")
tdSql.execute(f"insert into {dbname}.tba1 values ('2022-09-26 15:15:04', null, null, null);")
tdSql.execute(f"insert into {dbname}.tba2 values ('2022-09-27 15:15:01', 0, 'a', false);")
tdSql.execute(f"insert into {dbname}.tba2 values ('2022-09-27 15:15:02', 1, '0', true);")
tdSql.execute(f"insert into {dbname}.tba2 values ('2022-09-27 15:15:03', 5, '5', false);")
tdSql.execute(f"insert into {dbname}.tba2 values ('2022-09-27 15:15:04', null, null, null);")
tdSql.execute(f"insert into {dbname}.tba3 values ('2022-09-28 15:15:01', 0, 'a', false);")
tdSql.execute(f"insert into {dbname}.tba3 values ('2022-09-28 15:15:02', 1, '0', true);")
tdSql.execute(f"insert into {dbname}.tba3 values ('2022-09-28 15:15:03', 5, '5', false);")
tdSql.execute(f"insert into {dbname}.tba3 values ('2022-09-28 15:15:04', null, null, null);")
tdSql.execute(f"insert into {dbname}.tba4 values ('2022-09-29 15:15:01', 0, 'a', false);")
tdSql.execute(f"insert into {dbname}.tba4 values ('2022-09-29 15:15:02', 1, '0', true);")
tdSql.execute(f"insert into {dbname}.tba4 values ('2022-09-29 15:15:03', 5, '5', false);")
tdSql.execute(f"insert into {dbname}.tba4 values ('2022-09-29 15:15:04', null, null, null);")
tdSql.execute(f"insert into {dbname}.tba5 values ('2022-09-30 15:15:01', 0, 'a', false);")
tdSql.execute(f"insert into {dbname}.tba5 values ('2022-09-30 15:15:02', 1, '0', true);")
tdSql.execute(f"insert into {dbname}.tba5 values ('2022-09-30 15:15:03', 5, '5', false);")
tdSql.execute(f"insert into {dbname}.tba5 values ('2022-09-30 15:15:04', null, null, null);")
tdSql.query(f'select tbname, cols(last(ts), ts as ts1), cols(last(f1), ts as ts2) from tba5 interval(1s);')
tdSql.checkRows(4)
tdSql.checkCols(3)
tdSql.checkData(0, 1, "2022-09-30 15:15:01")
tdSql.checkData(0, 2, "2022-09-30 15:15:01")
tdSql.checkData(1, 1, "2022-09-30 15:15:02")
tdSql.checkData(1, 2, "2022-09-30 15:15:02")
tdSql.checkData(2, 1, "2022-09-30 15:15:03")
tdSql.checkData(2, 2, "2022-09-30 15:15:03")
tdSql.checkData(3, 1, "2022-09-30 15:15:04")
tdSql.checkData(3, 2, "2022-09-30 15:15:04")
tdSql.query(f'select tbname, last(ts), last(ts) from tba5 interval(1s)')
tdSql.checkData(0, 1, "2022-09-30 15:15:01")
tdSql.checkData(0, 2, "2022-09-30 15:15:01")
tdSql.checkData(1, 1, "2022-09-30 15:15:02")
tdSql.checkData(1, 2, "2022-09-30 15:15:02")
tdSql.checkData(2, 1, "2022-09-30 15:15:03")
tdSql.checkData(2, 2, "2022-09-30 15:15:03")
tdSql.checkData(3, 1, "2022-09-30 15:15:04")
tdSql.checkData(3, 2, "2022-09-30 15:15:04")
# tdSql.query(f'select tbname, cols(last(ts), ts as ts1), cols(last(f1), ts as ts2) from {dbname}.sta group by tbname;')
# tdSql.checkRows(5)
# tdSql.checkCols(3)
# tdSql.checkData(0, 1, "2022-09-30 15:15:04")
# tdSql.checkData(0, 2, "2022-09-30 15:15:03")
# tdSql.checkData(1, 1, "2022-09-30 15:15:04")
# tdSql.checkData(1, 2, "2022-09-30 15:15:03")
# tdSql.checkData(2, 1, "2022-09-30 15:15:04")
# tdSql.checkData(2, 2, "2022-09-30 15:15:03")
# tdSql.checkData(3, 1, "2022-09-30 15:15:04")
# tdSql.checkData(3, 2, "2022-09-30 15:15:03")
# tdSql.checkData(4, 1, "2022-09-30 15:15:04")
# tdSql.checkData(4, 2, "2022-09-30 15:15:03")
def run(self):
self.test1()
self.funcNestTest()
self.funcSupperTableTest()
self.create_test_data()