fix: wildcard character in both target and pattern
This commit is contained in:
parent
3d6818b2f0
commit
c5932c9d1c
|
@ -1102,10 +1102,13 @@ int32_t patternMatch(const char *pattern, size_t psize, const char *str, size_t
|
||||||
c1 = str[j++];
|
c1 = str[j++];
|
||||||
++nMatchChar;
|
++nMatchChar;
|
||||||
|
|
||||||
if (c == '\\' && pattern[i] == c1 &&
|
if (c == '\\' && (pattern[i] == '_' || pattern[i] == '%')) {
|
||||||
(c1 == '_' || c1 == '%')) {
|
if (c1 != pattern[i]) {
|
||||||
i++;
|
return TSDB_PATTERN_NOMATCH;
|
||||||
continue;
|
} else {
|
||||||
|
i++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c == c1 || tolower(c) == tolower(c1) || (c == pInfo->matchOne && c1 != 0)) {
|
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++];
|
c1 = str[j++];
|
||||||
nMatchChar++;
|
nMatchChar++;
|
||||||
|
|
||||||
if (c == '\\' && pattern[i] == c1 &&
|
if (c == '\\' && (pattern[i] == '_' || pattern[i] == '%')) {
|
||||||
(c1 == '_' || c1 == '%')) {
|
if (c1 != pattern[i]) {
|
||||||
i++;
|
return TSDB_PATTERN_NOMATCH;
|
||||||
continue;
|
} else {
|
||||||
|
i++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c == c1 || towlower(c) == towlower(c1) || (c == pInfo->umatchOne && c1 != 0)) {
|
if (c == c1 || towlower(c) == towlower(c1) || (c == pInfo->umatchOne && c1 != 0)) {
|
||||||
|
|
|
@ -126,6 +126,47 @@ class TDTestCase:
|
||||||
tdSql.query("select * from db.t4x where c1 like '\%\_%\%%'")
|
tdSql.query("select * from db.t4x where c1 like '\%\_%\%%'")
|
||||||
tdSql.checkRows(1)
|
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):
|
def run(self):
|
||||||
tdLog.printNoPrefix("==========start like_wildcard_test run ...............")
|
tdLog.printNoPrefix("==========start like_wildcard_test run ...............")
|
||||||
tdSql.prepare(replica = self.replicaVar)
|
tdSql.prepare(replica = self.replicaVar)
|
||||||
|
@ -135,6 +176,7 @@ class TDTestCase:
|
||||||
self.like_wildcard_test()
|
self.like_wildcard_test()
|
||||||
self.like_cnc_wildcard_test()
|
self.like_cnc_wildcard_test()
|
||||||
self.like_multi_wildcard_test()
|
self.like_multi_wildcard_test()
|
||||||
|
self.like_wildcard_test2()
|
||||||
tdLog.printNoPrefix("==========end like_wildcard_test run ...............")
|
tdLog.printNoPrefix("==========end like_wildcard_test run ...............")
|
||||||
|
|
||||||
self.stopTest()
|
self.stopTest()
|
||||||
|
|
Loading…
Reference in New Issue