Merge pull request #21029 from taosdata/fix/TD-23797
fix: fix crash caused by deleting from system table
This commit is contained in:
commit
51a1e07dbf
|
@ -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
|
||||
|
|
|
@ -0,0 +1,111 @@
|
|||
|
||||
###################################################################
|
||||
# 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())
|
Loading…
Reference in New Issue