未验证 提交 51a1e07d 编写于 作者: D dapan1121 提交者: GitHub

Merge pull request #21029 from taosdata/fix/TD-23797

fix: fix crash caused by deleting from system table
......@@ -12,7 +12,7 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef TDENGINE_SYSTABLE_H
#define TDENGINE_SYSTABLE_H
......
......@@ -2578,8 +2578,13 @@ static int32_t translateTable(STranslateContext* pCxt, SNode* pTable) {
if (TSDB_SUPER_TABLE == pRealTable->pMeta->tableType) {
pCxt->stableQuery = true;
}
if (TSDB_SYSTEM_TABLE == pRealTable->pMeta->tableType && isSelectStmt(pCxt->pCurrStmt)) {
((SSelectStmt*)pCxt->pCurrStmt)->isTimeLineResult = false;
if (TSDB_SYSTEM_TABLE == pRealTable->pMeta->tableType) {
if (isSelectStmt(pCxt->pCurrStmt)) {
((SSelectStmt*)pCxt->pCurrStmt)->isTimeLineResult = false;
} else if (isDeleteStmt(pCxt->pCurrStmt)) {
code = TSDB_CODE_TSC_INVALID_OPERATION;
break;
}
}
code = addNamespace(pCxt, pRealTable);
}
......
......@@ -1443,7 +1443,7 @@ static int32_t createDeleteRootLogicNode(SLogicPlanContext* pCxt, SDeleteStmt* p
static int32_t createDeleteScanLogicNode(SLogicPlanContext* pCxt, SDeleteStmt* pDelete, SLogicNode** pLogicNode) {
SScanLogicNode* pScan = NULL;
int32_t code = makeScanLogicNode(pCxt, (SRealTableNode*)pDelete->pFromTable, false, (SLogicNode**)&pScan);
int32_t code = makeScanLogicNode(pCxt, (SRealTableNode*)pDelete->pFromTable, false, (SLogicNode**)&pScan);
// set columns to scan
if (TSDB_CODE_SUCCESS == code) {
......
......@@ -347,6 +347,7 @@
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/tb_100w_data_order.py
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/delete_childtable.py
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/delete_normaltable.py
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/delete_systable.py
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/keep_expired.py
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/drop.py
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/drop.py -N 3 -M 3 -i False -n 3
......
###################################################################
# Copyright (c) 2016 by TAOS Technologies, Inc.
# All rights reserved.
#
# This file is proprietary and confidential to TAOS Technologies.
# No part of this file may be reproduced, stored, transmitted,
# disclosed or used in any form or by any means other than as
# expressly provided by the written permission from Jianhui Tao
#
###################################################################
# -*- coding: utf-8 -*-
import random
import string
from numpy import logspace
from util import constant
from util.log import *
from util.cases import *
from util.sql import *
from util.common import *
from util.sqlset import TDSetSql
info_schema_db = "information_schema"
perf_schema_db = "performance_schema"
info_schema_tables = [
"ins_dnodes",
"ins_mnodes",
"ins_modules",
"ins_qnodes",
"ins_snodes",
"ins_cluster",
"ins_databases",
"ins_functions",
"ins_indexes",
"ins_stables",
"ins_tables",
"ins_tags",
"ins_columns",
"ins_users",
"ins_grants",
"ins_vgroups",
"ins_configs",
"ins_dnode_variables",
"ins_topics",
"ins_subscriptions",
"ins_streams",
"ins_streams_tasks",
"ins_vnodes",
"ins_user_privileges"
]
perf_schema_tables = [
"perf_connections",
"perf_queries",
"perf_consumers",
"perf_trans",
"perf_apps"
]
class TDTestCase:
def init(self, conn, logSql, replicaVar=1):
self.replicaVar = int(replicaVar)
tdLog.debug("start to execute %s" % __file__)
tdSql.init(conn.cursor())
def delete_systb(self):
tdSql.execute(f'use {info_schema_db}')
for i in info_schema_tables:
tdSql.error(f'delete from {i}')
tdSql.error(f'delete from {info_schema_db}.{i}')
tdSql.error(f'delete from {i} where ts >= 0')
tdSql.error(f'delete from {info_schema_db}.{i} where ts >= 0')
tdSql.execute(f'use {perf_schema_db}')
for i in perf_schema_tables:
tdSql.error(f'delete from {i}')
tdSql.error(f'delete from {perf_schema_db}.{i}')
tdSql.error(f'delete from {i} where ts >= 0')
tdSql.error(f'delete from {perf_schema_db}.{i} where ts >= 0')
def drop_systb(self):
tdSql.execute(f'use {info_schema_db}')
for i in info_schema_tables:
tdSql.error(f'drop table {i}')
tdSql.error(f'drop {info_schema_db}.{i}')
tdSql.error(f'drop database {info_schema_db}')
tdSql.execute(f'use {perf_schema_db}')
for i in perf_schema_tables:
tdSql.error(f'drop table {i}')
tdSql.error(f'drop table {perf_schema_db}.{i}')
tdSql.error(f'drop database {perf_schema_db}')
def delete_from_systb(self):
self.delete_systb()
self.drop_systb()
def run(self):
self.delete_from_systb()
tdDnodes.stoptaosd(1)
tdDnodes.starttaosd(1)
self.delete_from_systb()
def stop(self):
tdSql.close()
tdLog.success("%s successfully executed" % __file__)
tdCases.addWindows(__file__, TDTestCase())
tdCases.addLinux(__file__, TDTestCase())
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册