From c86bda4a1bbd7ec15c9a25ca92caefdea36d35d0 Mon Sep 17 00:00:00 2001 From: Ganlin Zhao Date: Sun, 15 Aug 2021 23:01:57 +0800 Subject: [PATCH 1/6] [TD-6054]: Filtered by tag with nchar value not as expected --- src/util/src/tcompare.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/util/src/tcompare.c b/src/util/src/tcompare.c index a3c01d2be7..1043ee4c37 100644 --- a/src/util/src/tcompare.c +++ b/src/util/src/tcompare.c @@ -152,11 +152,18 @@ int32_t compareLenPrefixedStr(const void *pLeft, const void *pRight) { int32_t compareLenPrefixedWStr(const void *pLeft, const void *pRight) { int32_t len1 = varDataLen(pLeft); int32_t len2 = varDataLen(pRight); - + if (len1 != len2) { return len1 > len2? 1:-1; } else { - int32_t ret = wcsncmp(varDataVal(pLeft), varDataVal(pRight), len1/TSDB_NCHAR_SIZE); + char pLeftTerm[len1 + 1]; + char pRightTerm[len2 + 1]; + memset(pLeftTerm, 0, len1 + 1); + memset(pRightTerm, 0, len2 + 1); + memcpy(pLeftTerm, varDataVal(pLeft), len1); + memcpy(pRightTerm, varDataVal(pRight), len2); + + int32_t ret = wcsncmp((void *)pLeftTerm, (void *)pRightTerm, len1/TSDB_NCHAR_SIZE); if (ret == 0) { return 0; } else { From c859b1ff7f47f186c4c20feb64fd5e6a048e09d2 Mon Sep 17 00:00:00 2001 From: Ganlin Zhao Date: Sun, 15 Aug 2021 23:01:57 +0800 Subject: [PATCH 2/6] [TD-6054]: Filtered by tag with nchar value not as expected --- src/util/src/tcompare.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/util/src/tcompare.c b/src/util/src/tcompare.c index 1043ee4c37..ee367b459c 100644 --- a/src/util/src/tcompare.c +++ b/src/util/src/tcompare.c @@ -156,14 +156,16 @@ int32_t compareLenPrefixedWStr(const void *pLeft, const void *pRight) { if (len1 != len2) { return len1 > len2? 1:-1; } else { - char pLeftTerm[len1 + 1]; - char pRightTerm[len2 + 1]; - memset(pLeftTerm, 0, len1 + 1); - memset(pRightTerm, 0, len2 + 1); + char *pLeftTerm = (char *)tcalloc(len1 + 1, sizeof(char)); + char *pRightTerm = (char *)tcalloc(len1 + 1, sizeof(char)); memcpy(pLeftTerm, varDataVal(pLeft), len1); memcpy(pRightTerm, varDataVal(pRight), len2); int32_t ret = wcsncmp((void *)pLeftTerm, (void *)pRightTerm, len1/TSDB_NCHAR_SIZE); + + tfree(pLeftTerm); + tfree(pRightTerm); + if (ret == 0) { return 0; } else { From be09ee1411d6d21ffa405a307002055077c8b981 Mon Sep 17 00:00:00 2001 From: Ganlin Zhao Date: Sun, 15 Aug 2021 23:01:57 +0800 Subject: [PATCH 3/6] [TD-6054]: Filtered by tag with nchar value not as expected --- src/util/src/tcompare.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/util/src/tcompare.c b/src/util/src/tcompare.c index ee367b459c..dbb4c87369 100644 --- a/src/util/src/tcompare.c +++ b/src/util/src/tcompare.c @@ -475,7 +475,16 @@ int32_t doCompare(const char* f1, const char* f2, int32_t type, size_t size) { return t1->len > t2->len? 1:-1; } - int32_t ret = wcsncmp((wchar_t*) t1->data, (wchar_t*) t2->data, t2->len/TSDB_NCHAR_SIZE); + char *t1_term = (char *)tcalloc(t1->len + 1, sizeof(char)); + char *t2_term = (char *)tcalloc(t2->len + 1, sizeof(char)); + memcpy(t1_term, t1->data, t1->len); + memcpy(t2_term, t2->data, t2->len); + + int32_t ret = wcsncmp((wchar_t*) t1_term, (wchar_t*) t2_term, t2->len/TSDB_NCHAR_SIZE); + + tfree(t1_term); + tfree(t2_term); + if (ret == 0) { return ret; } From d22530a7f2d10c02c7537873ad222271b556749c Mon Sep 17 00:00:00 2001 From: Ganlin Zhao Date: Sun, 15 Aug 2021 23:01:57 +0800 Subject: [PATCH 4/6] [TD-6054]: Filtered by tag with nchar value not as expected --- src/util/src/tcompare.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/util/src/tcompare.c b/src/util/src/tcompare.c index dbb4c87369..56d03cc394 100644 --- a/src/util/src/tcompare.c +++ b/src/util/src/tcompare.c @@ -161,7 +161,7 @@ int32_t compareLenPrefixedWStr(const void *pLeft, const void *pRight) { memcpy(pLeftTerm, varDataVal(pLeft), len1); memcpy(pRightTerm, varDataVal(pRight), len2); - int32_t ret = wcsncmp((void *)pLeftTerm, (void *)pRightTerm, len1/TSDB_NCHAR_SIZE); + int32_t ret = wcsncmp((wchar_t*) pLeftTerm, (wchar_t*) pRightTerm, len1/TSDB_NCHAR_SIZE); tfree(pLeftTerm); tfree(pRightTerm); From 7e9c7e77ac7b3e0eebaac01c5098300138368445 Mon Sep 17 00:00:00 2001 From: zhaoyanggh Date: Mon, 16 Aug 2021 09:53:19 +0800 Subject: [PATCH 5/6] [TD-6081] add test case for filter within multiple nchar tags --- tests/pytest/query/filterWithinMultiNchar.py | 45 ++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 tests/pytest/query/filterWithinMultiNchar.py diff --git a/tests/pytest/query/filterWithinMultiNchar.py b/tests/pytest/query/filterWithinMultiNchar.py new file mode 100644 index 0000000000..3a43785e69 --- /dev/null +++ b/tests/pytest/query/filterWithinMultiNchar.py @@ -0,0 +1,45 @@ +################################################################### +# 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 sys +import taos +from util.log import tdLog +from util.cases import tdCases +from util.sql import tdSql + + +class TDTestCase: + def init(self, conn, logSql): + tdLog.debug("start to execute %s" % __file__) + tdSql.init(conn.cursor(), logSql) + + def run(self): + tdSql.prepare() + + print("==============step1") + tdSql.execute( + "create stable t6 (ts timestamp,val int,flow nchar(36)) tags(dev nchar(36),gr nchar(36))") + tdSql.execute("insert into t6004 using t6 (dev,gr) tags ('b50c79bc-b102-48e6-bda1-4212263e46d0','b50c79bc-b102-48e6-bda1-4212263e46d0') values(now,1,'b50c79bc-b102-48e6-bda1-4212263e46d0')") + + + print("==============step2") + tdSql.query("select * from t6 where dev='b50c79bc-b102-48e6-bda1-4212263e46d0'") + tdSql.checkRows(1) + + def stop(self): + tdSql.close() + tdLog.success("%s successfully executed" % __file__) + + +tdCases.addWindows(__file__, TDTestCase()) +tdCases.addLinux(__file__, TDTestCase()) From 07c007fc364879d4bcdc2e79ccbcd9ab41b507b1 Mon Sep 17 00:00:00 2001 From: Ganlin Zhao Date: Mon, 16 Aug 2021 10:25:29 +0800 Subject: [PATCH 6/6] [TD-6081] add test case for filter within multiple nchar tags --- tests/pytest/query/filterWithinMultiNchar.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/tests/pytest/query/filterWithinMultiNchar.py b/tests/pytest/query/filterWithinMultiNchar.py index 3a43785e69..15fcf4e24b 100644 --- a/tests/pytest/query/filterWithinMultiNchar.py +++ b/tests/pytest/query/filterWithinMultiNchar.py @@ -28,14 +28,20 @@ class TDTestCase: print("==============step1") tdSql.execute( - "create stable t6 (ts timestamp,val int,flow nchar(36)) tags(dev nchar(36),gr nchar(36))") - tdSql.execute("insert into t6004 using t6 (dev,gr) tags ('b50c79bc-b102-48e6-bda1-4212263e46d0','b50c79bc-b102-48e6-bda1-4212263e46d0') values(now,1,'b50c79bc-b102-48e6-bda1-4212263e46d0')") + "create stable t6 (ts timestamp,val int,flow nchar(36)) tags(dev nchar(36),dev1 nchar(36),dev2 nchar(36))") + tdSql.execute("insert into t6004 using t6 (dev,dev1,dev2) tags ('b50c79bc-b102-48e6-bda1-4212263e46d0','b50c79bc-b102-48e6-bda1-4212263e46d0', 'b50c79bc-b102-48e6-bda1-4212263e46d0') values(now,1,'b50c79bc-b102-48e6-bda1-4212263e46d0')") - print("==============step2") + print("==============step2") tdSql.query("select * from t6 where dev='b50c79bc-b102-48e6-bda1-4212263e46d0'") tdSql.checkRows(1) + tdSql.query("select * from t6 where dev1='b50c79bc-b102-48e6-bda1-4212263e46d0'") + tdSql.checkRows(1) + + tdSql.query("select * from t6 where dev2='b50c79bc-b102-48e6-bda1-4212263e46d0'") + tdSql.checkRows(1) + def stop(self): tdSql.close() tdLog.success("%s successfully executed" % __file__)