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++];
|
||||
++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)) {
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue