1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-07-30 19:23:07 +03:00

Fix "column1 LIKE column2" for columns from same table (#2776)

This WHERE part will be performed with FilterCommand, which did not had
LIKE operator implemented until now.
This commit is contained in:
Sergey Zefirov
2023-03-17 13:10:53 +03:00
committed by GitHub
parent 760c1ba13e
commit a2d7a21196
3 changed files with 37 additions and 0 deletions

View File

@ -0,0 +1,12 @@
DROP DATABASE IF EXISTS mcol5418;
CREATE DATABASE mcol5418;
USE mcol5418;
CREATE TABLE tcs(d1 CHAR(6), d2 CHAR(6)) ENGINE=columnstore;
INSERT INTO tcs(d1, d2) VALUES ('a','a'), ('a', 'b');
SELECT 'columnstore like', d1, d2 FROM tcs WHERE (d1 LIKE d2);
columnstore like d1 d2
columnstore like a a
SELECT 'columnstore not like', d1, d2 FROM tcs WHERE (d1 NOT LIKE d2);
columnstore not like d1 d2
columnstore not like a b
DROP DATABASE mcol5418;

View File

@ -0,0 +1,21 @@
# This test tests the (NOT) LIKE test in filters that is added
# to a FilterCommand in primproc.
# This is a very rare situation, yet somehow I managed to trigger it.
--disable_warnings
DROP DATABASE IF EXISTS mcol5418;
--enable_warnings
CREATE DATABASE mcol5418;
USE mcol5418;
CREATE TABLE tcs(d1 CHAR(6), d2 CHAR(6)) ENGINE=columnstore;
INSERT INTO tcs(d1, d2) VALUES ('a','a'), ('a', 'b');
SELECT 'columnstore like', d1, d2 FROM tcs WHERE (d1 LIKE d2);
SELECT 'columnstore not like', d1, d2 FROM tcs WHERE (d1 NOT LIKE d2);
DROP DATABASE mcol5418;

View File

@ -488,6 +488,10 @@ void StrFilterCmd::setCompareFunc(uint32_t columns)
static inline bool compareString(const datatypes::Charset& cs, const utils::ConstString& s0, static inline bool compareString(const datatypes::Charset& cs, const utils::ConstString& s0,
const utils::ConstString& s1, uint8_t fBOP) const utils::ConstString& s1, uint8_t fBOP)
{ {
if (fBOP == COMPARE_LIKE || fBOP == COMPARE_NLIKE)
{
return cs.like(fBOP == COMPARE_NLIKE, s0, s1);
}
int cmp = cs.strnncollsp(s0, s1); int cmp = cs.strnncollsp(s0, s1);
switch (fBOP) switch (fBOP)
{ {