Fix TD-27939: error for sub query is empty when where 1=2

This commit is contained in:
fullhonest 2024-01-02 10:02:30 +08:00
parent 32f20308c7
commit e79516ade3
2 changed files with 35 additions and 3 deletions

View File

@ -334,6 +334,13 @@ static int32_t calcConstSelectWithoutFrom(SCalcConstContext* pCxt, SSelectStmt*
static int32_t calcConstSelectFrom(SCalcConstContext* pCxt, SSelectStmt* pSelect, bool subquery) {
int32_t code = calcConstFromTable(pCxt, pSelect->pFromTable);
if (TSDB_CODE_SUCCESS == code && QUERY_NODE_TEMP_TABLE == nodeType(pSelect->pFromTable) &&
((STempTableNode*)pSelect->pFromTable)->pSubquery != NULL &&
QUERY_NODE_SELECT_STMT == nodeType(((STempTableNode*)pSelect->pFromTable)->pSubquery) &&
((SSelectStmt*)((STempTableNode*)pSelect->pFromTable)->pSubquery)->isEmptyResult){
pSelect->isEmptyResult = true;
return code;
}
if (TSDB_CODE_SUCCESS == code) {
code = calcConstProjections(pCxt, pSelect, subquery);
}

View File

@ -401,7 +401,29 @@ class TDTestCase:
tdSql.execute(sql)
sql = "select * from %s.`12345` order by `567` desc limit 2;"%(database)
tdSql.error(sql)
def td_27939(self,database):
sql = "create table %s.`test1eq2` (`ts` timestamp, id int);"%(database)
tdSql.execute(sql)
sql = "insert into %s.test1eq2 values (now,1);"%(database)
tdSql.execute(sql)
sql = "insert into %s.`test1eq2` values (now,2);"%(database)
tdSql.execute(sql)
sql = "select * from %s.`test1eq2` where 1=2;"%(database)
tdSql.query(sql)
tdSql.checkRows(0)
sql = "select * from (select * from %s.`test1eq2` where 1=2);"%(database)
tdSql.query(sql)
tdSql.checkRows(0)
sql = "drop table %s.`test1eq2` ;"%(database)
tdSql.execute(sql)
def run(self):
startTime = time.time()
@ -418,6 +440,8 @@ class TDTestCase:
self.ts_3110("%s" %self.db)
self.ts_23505("%s" %self.db)
self.ts_3036("%s" %self.db)
self.td_27939("%s" %self.db)
tdSql.query("flush database %s" %self.db)
@ -430,8 +454,9 @@ class TDTestCase:
self.ts_3110("%s" %self.db)
self.ts_23505("%s" %self.db)
self.ts_3036("%s" %self.db)
self.td_27939("%s" %self.db)
self.test_select_as_chinese_characters();
endTime = time.time()
print("total time %ds" % (endTime - startTime))