fix: wildcard character in both target and pattern

This commit is contained in:
factosea 2024-01-08 01:13:53 +08:00
parent 3d6818b2f0
commit c5932c9d1c
2 changed files with 56 additions and 8 deletions

View File

@ -1102,10 +1102,13 @@ int32_t patternMatch(const char *pattern, size_t psize, const char *str, size_t
c1 = str[j++];
++nMatchChar;
if (c == '\\' && pattern[i] == c1 &&
(c1 == '_' || c1 == '%')) {
i++;
continue;
if (c == '\\' && (pattern[i] == '_' || pattern[i] == '%')) {
if (c1 != pattern[i]) {
return TSDB_PATTERN_NOMATCH;
} else {
i++;
continue;
}
}
if (c == c1 || tolower(c) == tolower(c1) || (c == pInfo->matchOne && c1 != 0)) {
@ -1176,10 +1179,13 @@ int32_t wcsPatternMatch(const TdUcs4 *pattern, size_t psize, const TdUcs4 *str,
c1 = str[j++];
nMatchChar++;
if (c == '\\' && pattern[i] == c1 &&
(c1 == '_' || c1 == '%')) {
i++;
continue;
if (c == '\\' && (pattern[i] == '_' || pattern[i] == '%')) {
if (c1 != pattern[i]) {
return TSDB_PATTERN_NOMATCH;
} else {
i++;
continue;
}
}
if (c == c1 || towlower(c) == towlower(c1) || (c == pInfo->umatchOne && c1 != 0)) {

View File

@ -126,6 +126,47 @@ class TDTestCase:
tdSql.query("select * from db.t4x where c1 like '\%\_%\%%'")
tdSql.checkRows(1)
def like_wildcard_test2(self):
tdSql.execute("create table db.t5x (ts timestamp, c1 varchar(100))")
tdSql.execute("insert into db.t5x values(now(), 'a\%c')")
tdSql.execute("insert into db.t5x values(now+1s, 'a\%bbbc')")
tdSql.execute("insert into db.t5x values(now()+2s, 'a%c')")
tdSql.query("select * from db.t5x where c1 like 'a\%c'")
tdSql.checkRows(1)
tdSql.checkData(0, 1, "a%c")
tdSql.execute("create table db.t6x (ts timestamp, c1 varchar(100))")
tdSql.execute("insert into db.t6x values(now(), '\%c')")
tdSql.execute("insert into db.t6x values(now+1s, '\%bbbc')")
tdSql.execute("insert into db.t6x values(now()+2s, '%c')")
tdSql.query("select * from db.t6x where c1 like '\%c'")
tdSql.checkRows(1)
tdSql.checkData(0, 1, "%c")
tdSql.execute("create table db.t7x (ts timestamp, c1 varchar(100))")
tdSql.execute("insert into db.t7x values(now(), 'a\_c')")
tdSql.execute("insert into db.t7x values(now+1s, 'a\_bbbc')")
tdSql.execute("insert into db.t7x values(now()+2s, 'a_c')")
tdSql.query("select * from db.t7x where c1 like 'a\_c'")
tdSql.checkRows(1)
tdSql.checkData(0, 1, "a_c")
tdSql.execute("create table db.t8x (ts timestamp, c1 varchar(100))")
tdSql.execute("insert into db.t8x values(now(), '\_c')")
tdSql.execute("insert into db.t8x values(now+1s, '\_bbbc')")
tdSql.execute("insert into db.t8x values(now()+2s, '_c')")
tdSql.query("select * from db.t8x where c1 like '\_c'")
tdSql.checkRows(1)
tdSql.checkData(0, 1, "_c")
def run(self):
tdLog.printNoPrefix("==========start like_wildcard_test run ...............")
tdSql.prepare(replica = self.replicaVar)
@ -135,6 +176,7 @@ class TDTestCase:
self.like_wildcard_test()
self.like_cnc_wildcard_test()
self.like_multi_wildcard_test()
self.like_wildcard_test2()
tdLog.printNoPrefix("==========end like_wildcard_test run ...............")
self.stopTest()