diff --git a/datafusion/sqllogictest/test_files/string/dictionary_utf8.slt b/datafusion/sqllogictest/test_files/string/dictionary_utf8.slt index c43f3a4cc16b3..d0039f8dcd32b 100644 --- a/datafusion/sqllogictest/test_files/string/dictionary_utf8.slt +++ b/datafusion/sqllogictest/test_files/string/dictionary_utf8.slt @@ -59,6 +59,8 @@ Raphael datafusionДатаФусион false false false false under_score un iść core false false false false percent pan Tadeusz ma iść w kąt false false false false (empty) (empty) false false false false +% (empty) false false false false +_ (empty) false false false false NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL diff --git a/datafusion/sqllogictest/test_files/string/init_data.slt.part b/datafusion/sqllogictest/test_files/string/init_data.slt.part index e3914ea498554..e1248c73da5fb 100644 --- a/datafusion/sqllogictest/test_files/string/init_data.slt.part +++ b/datafusion/sqllogictest/test_files/string/init_data.slt.part @@ -23,6 +23,8 @@ create table test_source as values ('under_score', 'un_____core', 'un iść core', 'chrząszcz na łące w 東京都'), ('percent', 'p%t', 'pan Tadeusz ma iść w kąt', 'Pan Tadeusz ma frunąć stąd w kąt'), ('', '%', '', ''), + ('%', '\%', '', ''), + ('_', '\_', '', ''), (NULL, '%', NULL, NULL), (NULL, 'R', NULL, '🔥'); diff --git a/datafusion/sqllogictest/test_files/string/large_string.slt b/datafusion/sqllogictest/test_files/string/large_string.slt index 1cf906d7dc751..5b738d0041e4d 100644 --- a/datafusion/sqllogictest/test_files/string/large_string.slt +++ b/datafusion/sqllogictest/test_files/string/large_string.slt @@ -44,6 +44,8 @@ Raphael R datafusionДатаФусион аФус under_score un_____core un iść core chrząszcz na łące w 東京都 percent p%t pan Tadeusz ma iść w kąt Pan Tadeusz ma frunąć stąd w kąt (empty) % (empty) (empty) +% \% (empty) (empty) +_ \_ (empty) (empty) NULL % NULL NULL NULL R NULL 🔥 @@ -64,6 +66,8 @@ Raphael datafusionДатаФусион false false false false under_score un iść core false false false false percent pan Tadeusz ma iść w kąt false false false false (empty) (empty) false false false false +% (empty) false false false false +_ (empty) false false false false NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL diff --git a/datafusion/sqllogictest/test_files/string/string.slt b/datafusion/sqllogictest/test_files/string/string.slt index 9e97712b68717..4e173de84f484 100644 --- a/datafusion/sqllogictest/test_files/string/string.slt +++ b/datafusion/sqllogictest/test_files/string/string.slt @@ -51,6 +51,8 @@ Raphael datafusionДатаФусион false false false false under_score un iść core false false false false percent pan Tadeusz ma iść w kąt false false false false (empty) (empty) false false false false +% (empty) false false false false +_ (empty) false false false false NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL @@ -74,13 +76,19 @@ SELECT unicode_2, 'is LIKE', ascii_2 FROM test_basic_operator WHERE unicode_2 LI UNION ALL SELECT unicode_2, 'is NOT LIKE', ascii_2 FROM test_basic_operator WHERE unicode_2 NOT LIKE ascii_2 ---- +% is LIKE \% (empty) is LIKE % (empty) is LIKE % (empty) is LIKE % +(empty) is NOT LIKE \% +(empty) is NOT LIKE \% +(empty) is NOT LIKE \_ +(empty) is NOT LIKE \_ Andrew is NOT LIKE X Pan Tadeusz ma frunąć stąd w kąt is NOT LIKE p%t Raphael is NOT LIKE R Xiangpeng is LIKE Xiangpeng +_ is LIKE \_ chrząszcz na łące w 東京都 is NOT LIKE un_____core datafusionДатаФусион is NOT LIKE R datafusion数据融合 is NOT LIKE Xiangpeng @@ -105,12 +113,14 @@ SELECT (unicode_2 LIKE ascii_2) AS unicode_2_like_ascii_2 FROM test_basic_operator ---- +% \% (empty) (empty) true true false false (empty) % (empty) (empty) true false true true Andrew X datafusion📊🔥 🔥 false false false false NULL % NULL NULL NULL NULL NULL NULL NULL R NULL 🔥 NULL NULL NULL false Raphael R datafusionДатаФусион аФус false false false false Xiangpeng Xiangpeng datafusion数据融合 datafusion数据融合 true true false false +_ \_ (empty) (empty) true false false false percent p%t pan Tadeusz ma iść w kąt Pan Tadeusz ma frunąć stąd w kąt true false true false under_score un_____core un iść core chrząszcz na łące w 東京都 true false true false @@ -129,13 +139,19 @@ SELECT unicode_2, 'is ILIKE', ascii_2 FROM test_basic_operator WHERE unicode_2 I UNION ALL SELECT unicode_2, 'is NOT ILIKE', ascii_2 FROM test_basic_operator WHERE unicode_2 NOT ILIKE ascii_2 ---- +% is ILIKE \% (empty) is ILIKE % (empty) is ILIKE % (empty) is ILIKE % +(empty) is NOT ILIKE \% +(empty) is NOT ILIKE \% +(empty) is NOT ILIKE \_ +(empty) is NOT ILIKE \_ Andrew is NOT ILIKE X Pan Tadeusz ma frunąć stąd w kąt is ILIKE p%t Raphael is NOT ILIKE R Xiangpeng is ILIKE Xiangpeng +_ is ILIKE \_ chrząszcz na łące w 東京都 is NOT ILIKE un_____core datafusionДатаФусион is NOT ILIKE R datafusion数据融合 is NOT ILIKE Xiangpeng @@ -160,12 +176,14 @@ SELECT (unicode_2 ILIKE ascii_2) AS unicode_2_ilike_ascii_2 FROM test_basic_operator ---- +% \% (empty) (empty) true true false false (empty) % (empty) (empty) true false true true Andrew X datafusion📊🔥 🔥 false false false false NULL % NULL NULL NULL NULL NULL NULL NULL R NULL 🔥 NULL NULL NULL false Raphael R datafusionДатаФусион аФус false false false false Xiangpeng Xiangpeng datafusion数据融合 datafusion数据融合 true true false false +_ \_ (empty) (empty) true false false false percent p%t pan Tadeusz ma iść w kąt Pan Tadeusz ma frunąć stąd w kąt true false true true under_score un_____core un iść core chrząszcz na łące w 東京都 true false true false diff --git a/datafusion/sqllogictest/test_files/string/string_literal.slt b/datafusion/sqllogictest/test_files/string/string_literal.slt index 6d12d83773941..a64ae0d320d7f 100644 --- a/datafusion/sqllogictest/test_files/string/string_literal.slt +++ b/datafusion/sqllogictest/test_files/string/string_literal.slt @@ -15,6 +15,15 @@ # specific language governing permissions and limitations # under the License. +# a backslash in a string literal is not a special character +query T +VALUES ('\'), ('\\'), ('\\\'), ('\\\\') +---- +\ +\\ +\\\ +\\\\ + query T SELECT substr('alphabet', -3) ---- @@ -829,3 +838,472 @@ SELECT 'a' LIKE '%' ---- NULL true true + +# \ is an implicit escape character +query BBBB +SELECT + 'a' LIKE '\%', + '\a' LIKE '\%', + '%' LIKE '\%', + '\%' LIKE '\%' +---- +false false true false + +# \ is an implicit escape character +query BBBBBB +SELECT + 'a' LIKE '\_', + '\a' LIKE '\_', + '_' LIKE '\_', + '\_' LIKE '\_', + 'abc' LIKE 'a_c', + 'abc' LIKE 'a\_c' +---- +false false true false true false + +# \ as an explicit escape character is currently not supported +query error DataFusion error: SQL error: ParserError\("Expected end of statement, found: \\\\"\) +SELECT + 'a' LIKE '\%' ESCAPE '\', + '\a' LIKE '\%' ESCAPE '\', + '%' LIKE '\%' ESCAPE '\', + '\%' LIKE '\% ESCAPE '\'' + +# \ as an explicit escape character is currently not supported +query error DataFusion error: Execution error: LIKE does not support escape_char +SELECT + 'a' LIKE '\_' ESCAPE '\', + '\a' LIKE '\_' ESCAPE '\', + '_' LIKE '\_' ESCAPE '\', + '\_' LIKE '\_' ESCAPE '\', + 'abc' LIKE 'a_c' ESCAPE '\', + 'abc' LIKE 'a\_c' ESCAPE '\' + +# a LIKE pattern containing escape can never match an empty string +query BBBBB +SELECT + '' LIKE '\', + '' LIKE '\\', + '' LIKE '\_', + '' LIKE '\%', + '' LIKE '\a' +---- +false false false false false + +# escape before non-wildcard matches the escape itself +query BBBBBBB +SELECT + 'a' LIKE '\a', + '\a' LIKE '\a', + '\a' LIKE '\b', + '\' LIKE '\', + '\\' LIKE '\', + '\' LIKE '\\', + '\\' LIKE '\\' +---- +false true false true false false true + +# if "%%" in the pattern was simplified to "%", the pattern semantics would change +query BBBBB +SELECT + '%' LIKE '\%%', + '%%' LIKE '\%%', + '\%%' LIKE '\%%', + '%abc' LIKE '\%%', + '\%abc' LIKE '\%%' +---- +true true false true false + +statement ok +create table inputs AS SELECT * FROM (VALUES ('%'), ('%%'), ('\%%'), ('%abc'), ('\%abc')) t(a); + +# if "%%" in the pattern was simplified to "%", the pattern semantics would change +# same as above query, but with data coming from a table, so that constant folding cannot kick in, but expression simplification can +query TB +SELECT a, a LIKE '\%%' FROM inputs +---- +% true +%% true +\%% false +%abc true +\%abc false + +statement ok +drop table inputs; + +# constant folding and expression simplification cannot kick in +query TTB +WITH data(a) AS (VALUES + (NULL), (''), + ('\'), ('\\'), ('\\\'), ('\\\\'), + ('a'), ('\a'), + ('%'), ('\%'), + ('%%'), ('\%%'), + ('_'), ('\_'), + ('__'), ('\__'), + ('abc'), ('a_c'), ('a\_c') +) +SELECT l.a, r.a, l.a LIKE r.a +FROM data l CROSS JOIN data r +---- +NULL NULL NULL +NULL (empty) NULL +NULL \ NULL +NULL \\ NULL +NULL \\\ NULL +NULL \\\\ NULL +NULL a NULL +NULL \a NULL +NULL % NULL +NULL \% NULL +NULL %% NULL +NULL \%% NULL +NULL _ NULL +NULL \_ NULL +NULL __ NULL +NULL \__ NULL +NULL abc NULL +NULL a_c NULL +NULL a\_c NULL +(empty) NULL NULL +(empty) (empty) true +(empty) \ false +(empty) \\ false +(empty) \\\ false +(empty) \\\\ false +(empty) a false +(empty) \a false +(empty) % true +(empty) \% false +(empty) %% true +(empty) \%% false +(empty) _ false +(empty) \_ false +(empty) __ false +(empty) \__ false +(empty) abc false +(empty) a_c false +(empty) a\_c false +\ NULL NULL +\ (empty) false +\ \ true +\ \\ false +\ \\\ false +\ \\\\ false +\ a false +\ \a false +\ % true +\ \% false +\ %% true +\ \%% false +\ _ true +\ \_ false +\ __ false +\ \__ false +\ abc false +\ a_c false +\ a\_c false +\\ NULL NULL +\\ (empty) false +\\ \ false +\\ \\ true +\\ \\\ false +\\ \\\\ false +\\ a false +\\ \a false +\\ % true +\\ \% false +\\ %% true +\\ \%% false +\\ _ false +\\ \_ false +\\ __ true +\\ \__ false +\\ abc false +\\ a_c false +\\ a\_c false +\\\ NULL NULL +\\\ (empty) false +\\\ \ false +\\\ \\ false +\\\ \\\ true +\\\ \\\\ false +\\\ a false +\\\ \a false +\\\ % true +\\\ \% false +\\\ %% true +\\\ \%% false +\\\ _ false +\\\ \_ false +\\\ __ false +\\\ \__ false +\\\ abc false +\\\ a_c false +\\\ a\_c false +\\\\ NULL NULL +\\\\ (empty) false +\\\\ \ false +\\\\ \\ false +\\\\ \\\ false +\\\\ \\\\ true +\\\\ a false +\\\\ \a false +\\\\ % true +\\\\ \% false +\\\\ %% true +\\\\ \%% false +\\\\ _ false +\\\\ \_ false +\\\\ __ false +\\\\ \__ false +\\\\ abc false +\\\\ a_c false +\\\\ a\_c false +a NULL NULL +a (empty) false +a \ false +a \\ false +a \\\ false +a \\\\ false +a a true +a \a false +a % true +a \% false +a %% true +a \%% false +a _ true +a \_ false +a __ false +a \__ false +a abc false +a a_c false +a a\_c false +\a NULL NULL +\a (empty) false +\a \ false +\a \\ false +\a \\\ false +\a \\\\ false +\a a false +\a \a true +\a % true +\a \% false +\a %% true +\a \%% false +\a _ false +\a \_ false +\a __ true +\a \__ false +\a abc false +\a a_c false +\a a\_c false +% NULL NULL +% (empty) false +% \ false +% \\ false +% \\\ false +% \\\\ false +% a false +% \a false +% % true +% \% true +% %% true +% \%% true +% _ true +% \_ false +% __ false +% \__ false +% abc false +% a_c false +% a\_c false +\% NULL NULL +\% (empty) false +\% \ false +\% \\ false +\% \\\ false +\% \\\\ false +\% a false +\% \a false +\% % true +\% \% false +\% %% true +\% \%% false +\% _ false +\% \_ false +\% __ true +\% \__ false +\% abc false +\% a_c false +\% a\_c false +%% NULL NULL +%% (empty) false +%% \ false +%% \\ false +%% \\\ false +%% \\\\ false +%% a false +%% \a false +%% % true +%% \% false +%% %% true +%% \%% true +%% _ false +%% \_ false +%% __ true +%% \__ false +%% abc false +%% a_c false +%% a\_c false +\%% NULL NULL +\%% (empty) false +\%% \ false +\%% \\ false +\%% \\\ false +\%% \\\\ false +\%% a false +\%% \a false +\%% % true +\%% \% false +\%% %% true +\%% \%% false +\%% _ false +\%% \_ false +\%% __ false +\%% \__ false +\%% abc false +\%% a_c false +\%% a\_c false +_ NULL NULL +_ (empty) false +_ \ false +_ \\ false +_ \\\ false +_ \\\\ false +_ a false +_ \a false +_ % true +_ \% false +_ %% true +_ \%% false +_ _ true +_ \_ true +_ __ false +_ \__ false +_ abc false +_ a_c false +_ a\_c false +\_ NULL NULL +\_ (empty) false +\_ \ false +\_ \\ false +\_ \\\ false +\_ \\\\ false +\_ a false +\_ \a false +\_ % true +\_ \% false +\_ %% true +\_ \%% false +\_ _ false +\_ \_ false +\_ __ true +\_ \__ false +\_ abc false +\_ a_c false +\_ a\_c false +__ NULL NULL +__ (empty) false +__ \ false +__ \\ false +__ \\\ false +__ \\\\ false +__ a false +__ \a false +__ % true +__ \% false +__ %% true +__ \%% false +__ _ false +__ \_ false +__ __ true +__ \__ true +__ abc false +__ a_c false +__ a\_c false +\__ NULL NULL +\__ (empty) false +\__ \ false +\__ \\ false +\__ \\\ false +\__ \\\\ false +\__ a false +\__ \a false +\__ % true +\__ \% false +\__ %% true +\__ \%% false +\__ _ false +\__ \_ false +\__ __ false +\__ \__ false +\__ abc false +\__ a_c false +\__ a\_c false +abc NULL NULL +abc (empty) false +abc \ false +abc \\ false +abc \\\ false +abc \\\\ false +abc a false +abc \a false +abc % true +abc \% false +abc %% true +abc \%% false +abc _ false +abc \_ false +abc __ false +abc \__ false +abc abc true +abc a_c true +abc a\_c false +a_c NULL NULL +a_c (empty) false +a_c \ false +a_c \\ false +a_c \\\ false +a_c \\\\ false +a_c a false +a_c \a false +a_c % true +a_c \% false +a_c %% true +a_c \%% false +a_c _ false +a_c \_ false +a_c __ false +a_c \__ false +a_c abc false +a_c a_c true +a_c a\_c true +a\_c NULL NULL +a\_c (empty) false +a\_c \ false +a\_c \\ false +a\_c \\\ false +a\_c \\\\ false +a\_c a false +a\_c \a false +a\_c % true +a\_c \% false +a\_c %% true +a\_c \%% false +a\_c _ false +a\_c \_ false +a\_c __ false +a\_c \__ false +a\_c abc false +a\_c a_c false +a\_c a\_c false diff --git a/datafusion/sqllogictest/test_files/string/string_query.slt.part b/datafusion/sqllogictest/test_files/string/string_query.slt.part index 4960a02540be4..9536cfee93590 100644 --- a/datafusion/sqllogictest/test_files/string/string_query.slt.part +++ b/datafusion/sqllogictest/test_files/string/string_query.slt.part @@ -29,6 +29,8 @@ Raphael R datafusionДатаФусион аФус under_score un_____core un iść core chrząszcz na łące w 東京都 percent p%t pan Tadeusz ma iść w kąt Pan Tadeusz ma frunąć stąd w kąt (empty) % (empty) (empty) +% \% (empty) (empty) +_ \_ (empty) (empty) NULL % NULL NULL NULL R NULL 🔥 @@ -49,12 +51,16 @@ Raphael R under_score un_____core percent p%t (empty) % +% \% +_ \_ query TT select unicode_1, unicode_2 from test_basic_operator where unicode_1 = unicode_2 ---- datafusion数据融合 datafusion数据融合 (empty) (empty) +(empty) (empty) +(empty) (empty) query TT select unicode_1, unicode_2 from test_basic_operator where unicode_1 <> unicode_2 @@ -77,6 +83,8 @@ Xiangpeng datafusion数据融合 Raphael datafusionДатаФусион under_score un iść core percent pan Tadeusz ma iść w kąt +% (empty) +_ (empty) # -------------------------------------- # column comparison @@ -98,6 +106,8 @@ Raphael R datafusionДатаФусион аФус false true false true false tr under_score un_____core un iść core chrząszcz na łące w 東京都 false true false true false true percent p%t pan Tadeusz ma iść w kąt Pan Tadeusz ma frunąć stąd w kąt false true false true false true (empty) % (empty) (empty) false true true false true false +% \% (empty) (empty) false true true false false true +_ \_ (empty) (empty) false true true false false true NULL % NULL NULL NULL NULL NULL NULL NULL NULL NULL R NULL 🔥 NULL NULL NULL NULL NULL NULL @@ -119,6 +129,8 @@ Raphael datafusionДатаФусион false true false true under_score un iść core false true false true percent pan Tadeusz ma iść w kąt false true false true (empty) (empty) false true false true +% (empty) false true false true +_ (empty) false true false true NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL @@ -140,6 +152,8 @@ Raphael datafusionДатаФусион false true false true under_score un iść core false true false true percent pan Tadeusz ma iść w kąt false true false true (empty) (empty) false true false true +% (empty) false true false true +_ (empty) false true false true NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL @@ -161,6 +175,8 @@ Raphael datafusionДатаФусион false true false true under_score un iść core false true false true percent pan Tadeusz ma iść w kąt false true false true (empty) (empty) false true false true +% (empty) false true false true +_ (empty) false true false true NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL @@ -207,6 +223,8 @@ Rap R dat аФу und un_ un chr per p%t pan Pan (empty) % (empty) (empty) +% \% (empty) (empty) +_ \_ (empty) (empty) NULL % NULL NULL NULL R NULL 🔥 @@ -220,7 +238,7 @@ SELECT FROM test_basic_operator ---- -6 6 +8 6 query II SELECT @@ -236,6 +254,8 @@ GROUP BY ascii_2; 1 1 1 1 1 1 +1 1 +1 1 query II rowsort SELECT @@ -251,7 +271,7 @@ GROUP BY unicode_2; 1 1 1 1 1 1 -1 1 +3 1 # -------------------------------------- # STARTS_WITH function @@ -271,6 +291,8 @@ true false false false false false false false false false false false false true true false +false true true false +false true true false NULL NULL NULL NULL NULL NULL NULL NULL @@ -288,6 +310,8 @@ false false true false false false false false false false false false false false false false +false false false false +false false false false NULL false NULL NULL NULL false NULL false @@ -306,6 +330,8 @@ Raphael under_scrre percent (empty) +% +_ NULL NULL @@ -320,6 +346,8 @@ databusirnДатаФусион un iść crre pan Tadeusz ma iść w kąt (empty) +(empty) +(empty) NULL NULL @@ -339,6 +367,8 @@ Raphafl undfr_score pfrcent (empty) +% +_ NULL NULL @@ -354,6 +384,8 @@ Raphafl undfr_score pfrcent (empty) +% +_ NULL NULL @@ -369,6 +401,8 @@ Raphael bar bar bar +bar +bar NULL NULL @@ -384,6 +418,8 @@ Raphael bar bar bar +bar +bar NULL NULL @@ -408,6 +444,8 @@ Raphael Datafusionдатафусион Under_Score Un Iść Core Percent Pan Tadeusz Ma Iść W KąT (empty) (empty) +% (empty) +_ (empty) NULL NULL NULL NULL @@ -432,6 +470,8 @@ FROM test_basic_operator; 117 117 117 99 112 112 112 80 0 37 0 0 +37 92 0 0 +95 92 0 0 NULL 37 NULL NULL NULL 82 NULL 128293 @@ -456,6 +496,8 @@ Raphael Raphael NULL datafusionДатаФусион datafusionДатаФусио under_score under_score NULL un iść core un iść core NULL percent percent NULL pan Tadeusz ma iść w kąt pan Tadeusz ma iść w kąt NULL (empty) (empty) NULL (empty) (empty) NULL +% % NULL (empty) (empty) NULL +_ _ NULL (empty) (empty) NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL @@ -480,6 +522,8 @@ Raphael aphael NULL datafusionДатаФусион NULL datafusionДатаФус under_score der_score NULL un iść core NULL un iść core percent ercent NULL pan Tadeusz ma iść w kąt NULL pan Tadeusz ma iść w kąt (empty) (empty) NULL (empty) NULL (empty) +% (empty) NULL (empty) NULL (empty) +_ (empty) NULL (empty) NULL (empty) NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL @@ -503,6 +547,8 @@ Raphael Raphael Raphael NULL datafusionДатаФусион under_sco under_s under_score NULL un iść core percent percen percent NULL pan Tadeusz ma iść w kąt (empty) (empty) (empty) NULL (empty) +% (empty) % NULL (empty) +_ (empty) _ NULL (empty) NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL @@ -526,6 +572,8 @@ false true NULL true NULL false false false NULL false NULL false false false NULL false NULL false false false NULL true NULL false +false false NULL true NULL false +false false NULL true NULL false NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL @@ -542,6 +590,8 @@ raphael datafusionдатафусион under_score un iść core percent pan tadeusz ma iść w kąt (empty) (empty) +% (empty) +_ (empty) NULL NULL NULL NULL @@ -558,6 +608,8 @@ RAPHAEL DATAFUSIONДАТАФУСИОН UNDER_SCORE UN IŚĆ CORE PERCENT PAN TADEUSZ MA IŚĆ W KĄT (empty) (empty) +% (empty) +_ (empty) NULL NULL NULL NULL @@ -587,6 +639,8 @@ Raphael:Data RaphaelR Raphael RaphaeldatafusionДатаФусион RaphaelаФ under_score:Data under_scoreun_____core under_score under_scoreun iść core under_scorechrząszcz na łące w 東京都 un iść coreunder_score un iść corechrząszcz na łące w 東京都 un iść core un iść core🔥 🔥 (empty) under_score,un iść core percent:Data percentp%t percent percentpan Tadeusz ma iść w kąt percentPan Tadeusz ma frunąć stąd w kąt pan Tadeusz ma iść w kątpercent pan Tadeusz ma iść w kątPan Tadeusz ma frunąć stąd w kąt pan Tadeusz ma iść w kąt pan Tadeusz ma iść w kąt🔥 🔥 (empty) percent,pan Tadeusz ma iść w kąt :Data % (empty) (empty) (empty) (empty) (empty) (empty) 🔥 🔥 (empty) , +%:Data %\% % % % % (empty) (empty) 🔥 🔥 (empty) %, +_:Data _\_ _ _ _ _ (empty) (empty) 🔥 🔥 (empty) _, :Data % (empty) (empty) (empty) (empty) (empty) (empty) 🔥 🔥 (empty) , :Data R (empty) (empty) 🔥 (empty) 🔥 (empty) 🔥 🔥 (empty) , @@ -610,6 +664,8 @@ Rfooael dfoofusionДатаФусион R🔥phael d🔥tafusionДатаФуси ufoor_score ufoość core u🔥der_score u🔥 iść core NULL NULL pfooent pfooTadeusz ma iść w kąt p🔥rcent p🔥n Tadeusz ma iść w kąt NULL NULL foo foo 🔥 🔥 NULL NULL +foo foo 🔥 🔥 NULL NULL +foo foo 🔥 🔥 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL @@ -633,6 +689,8 @@ Raphael baraphael NULL datafusionДатbarион NULL datafusionДатаФуси under_score under_score NULL un iść core NULL un iść core percent percent NULL pan Tadeusz ma iść w kąt NULL pan Tadeusz ma iść w kąt (empty) (empty) NULL bar NULL (empty) +% % NULL bar NULL (empty) +_ _ NULL bar NULL (empty) NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL @@ -656,6 +714,8 @@ ael (empty) hael ион (empty) afusionДатаФусион ore (empty) er_score ore (empty) iść core ent (empty) cent kąt (empty) Tadeusz ma iść w kąt (empty) (empty) (empty) (empty) (empty) (empty) +% (empty) (empty) (empty) (empty) (empty) +_ (empty) (empty) (empty) (empty) (empty) NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL @@ -680,6 +740,8 @@ Rap (empty) Raph dat (empty) datafusionДатаФус und (empty) under_sc un (empty) un iść c per (empty) perc pan (empty) pan Tadeusz ma iść w (empty) (empty) (empty) (empty) (empty) (empty) +% (empty) (empty) (empty) (empty) (empty) +_ (empty) (empty) (empty) (empty) (empty) NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL @@ -701,6 +763,8 @@ R Raph datafusionД datafusionДат under_score under_score un iść core un iść core percent percent pan Tadeusz ma iść w kąt pan Tadeusz ma iść w kąt (empty) (empty) (empty) (empty) +% % (empty) (empty) +_ _ (empty) (empty) NULL NULL NULL NULL NULL NULL NULL NULL @@ -722,6 +786,8 @@ FROM test_basic_operator; 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 +0 0 0 0 NULL NULL NULL NULL NULL NULL NULL NULL @@ -745,6 +811,8 @@ Raphaelfoo Raphael🔥 datafusionДатаФусионfoo datafusionДатаФу under_scorefoo under_score🔥 un iść corefoo un iść core🔥 percentfoo percent🔥 pan Tadeusz ma iść w kątfoo pan Tadeusz ma iść w kąt🔥 foo 🔥 foo 🔥 +%foo %🔥 foo 🔥 +_foo _🔥 foo 🔥 NULL NULL NULL NULL NULL NULL NULL NULL @@ -764,6 +832,8 @@ RaphaelR RaphaelаФус datafusionДатаФусионR datafusionДатаФу under_scoreun_____core under_scorechrząszcz na łące w 東京都 un iść coreun_____core un iść corechrząszcz na łące w 東京都 percentp%t percentPan Tadeusz ma frunąć stąd w kąt pan Tadeusz ma iść w kątp%t pan Tadeusz ma iść w kątPan Tadeusz ma frunąć stąd w kąt % (empty) % (empty) +%\% % \% (empty) +_\_ _ \_ (empty) NULL NULL NULL NULL NULL NULL NULL NULL @@ -783,6 +853,8 @@ false true false false false false false false +false false +false false NULL NULL NULL NULL @@ -798,6 +870,8 @@ false true false false false false false false +false false +false false NULL NULL NULL NULL @@ -813,6 +887,8 @@ true true true true true true true true +true true +true true NULL NULL NULL NULL @@ -828,6 +904,8 @@ true true true true true true true true +true true +true true NULL NULL NULL NULL @@ -850,6 +928,8 @@ Raphael nice Raphael and R datafusionДатаФусион cool datafusionДат under_score nice under_score and un_____core un iść core cool un iść core and chrząszcz na łące w 東京都 under_score 🔥 un iść core percent nice percent and p%t pan Tadeusz ma iść w kąt cool pan Tadeusz ma iść w kąt and Pan Tadeusz ma frunąć stąd w kąt percent 🔥 pan Tadeusz ma iść w kąt nice and % cool and 🔥 +% nice % and \% cool and % 🔥 +_ nice _ and \_ cool and _ 🔥 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL @@ -888,6 +968,8 @@ Raphael datafusionДатаФусион true true under_score un iść core true true percent pan Tadeusz ma iść w kąt true true (empty) (empty) true true +% (empty) true true +_ (empty) true true NULL NULL NULL NULL NULL NULL NULL NULL @@ -906,6 +988,8 @@ Raphael datafusionДатаФусион false false under_score un iść core false false percent pan Tadeusz ma iść w kąt false false (empty) (empty) false false +% (empty) false false +_ (empty) false false NULL NULL NULL NULL NULL NULL NULL NULL @@ -918,6 +1002,8 @@ Raphael under_score percent (empty) +% +_ query T SELECT ascii_1 FROM test_basic_operator WHERE ascii_1 NOT LIKE '%' @@ -938,6 +1024,8 @@ Raphael datafusionДатаФусион false false false false under_score un iść core false false false false percent pan Tadeusz ma iść w kąt false false false false (empty) (empty) false false false false +% (empty) false false false false +_ (empty) false false false false NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL @@ -958,6 +1046,8 @@ FROM 11 11 7 24 0 0 +1 0 +1 0 NULL NULL NULL NULL @@ -979,6 +1069,8 @@ false true NULL NULL false false NULL NULL false false NULL NULL false false NULL NULL +false false NULL NULL +false false NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL @@ -1000,6 +1092,8 @@ false true NULL NULL false false NULL NULL false false NULL NULL false false NULL NULL +false false NULL NULL +false false NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL @@ -1021,6 +1115,8 @@ FROM test_basic_operator; 8 13 NULL NULL 6 19 NULL NULL 6 14 NULL NULL +6 14 NULL NULL +6 14 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL @@ -1042,6 +1138,8 @@ xxxxxxxxxxxxxRaphael NULL datafusionДатаФусион NULL xxxxxxxxxunder_score NULL 🔥🔥🔥🔥🔥🔥🔥🔥🔥un iść core NULL xxxxxxxxxxxxxpercent NULL pan Tadeusz ma iść w NULL xxxxxxxxxxxxxxxxxxxx NULL 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥 NULL +xxxxxxxxxxxxxxxxxxx% NULL 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥 NULL +xxxxxxxxxxxxxxxxxxx_ NULL 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥 NULL NULL NULL NULL NULL NULL NULL NULL NULL @@ -1058,6 +1156,8 @@ FROM test_basic_operator; under_score un iść core | percent pan Tadeusz ma iść w | | + % | + _ | NULL NULL | NULL NULL | @@ -1079,6 +1179,8 @@ Raphaelxxxxxxxxxxxxx NULL datafusionДатаФусион NULL under_scorexxxxxxxxx NULL un iść core🔥🔥🔥🔥🔥🔥🔥🔥🔥 NULL percentxxxxxxxxxxxxx NULL pan Tadeusz ma iść w NULL xxxxxxxxxxxxxxxxxxxx NULL 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥 NULL +%xxxxxxxxxxxxxxxxxxx NULL 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥 NULL +_xxxxxxxxxxxxxxxxxxx NULL 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥 NULL NULL NULL NULL NULL NULL NULL NULL NULL @@ -1094,6 +1196,8 @@ Raphael datafusionДатаФусион under_score un iść core percent pan Tadeusz ma iść w +% +_ NULL NULL NULL NULL @@ -1121,6 +1225,8 @@ false true NULL NULL false true NULL NULL false false NULL NULL false false NULL NULL false false NULL NULL false false NULL NULL false false NULL NULL false false NULL NULL +false false NULL NULL false false NULL NULL +false false NULL NULL false false NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL @@ -1150,6 +1256,8 @@ NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL +NULL NULL NULL NULL NULL NULL NULL NULL +NULL NULL NULL NULL NULL NULL NULL NULL # -------------------------------------- # Test REPEAT @@ -1167,6 +1275,8 @@ RaphaelRaphaelRaphael datafusionДатаФусионdatafusionДатаФусио under_scoreunder_scoreunder_score un iść coreun iść coreun iść core percentpercentpercent pan Tadeusz ma iść w kątpan Tadeusz ma iść w kątpan Tadeusz ma iść w kąt (empty) (empty) +%%% (empty) +___ (empty) NULL NULL NULL NULL @@ -1190,6 +1300,8 @@ Rapha l NULL datafusionДатаФус он NULL und r_scor NULL un iść core (empty) NULL p rc NULL pan Tadeusz ma iść w kąt (empty) NULL (empty) (empty) NULL (empty) (empty) NULL +% (empty) NULL (empty) (empty) NULL +_ (empty) NULL (empty) (empty) NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL @@ -1209,6 +1321,8 @@ leahpaR ноисуФатаДnoisufatad erocs_rednu eroc ćśi nu tnecrep tąk w ćśi am zsuedaT nap (empty) (empty) +% (empty) +_ (empty) NULL NULL NULL NULL @@ -1232,6 +1346,8 @@ FROM test_basic_operator; 4 0 NULL 0 0 NULL 2 0 NULL 0 0 NULL 0 0 NULL 0 0 NULL +0 0 NULL 0 0 NULL +0 0 NULL 0 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL @@ -1255,5 +1371,7 @@ Rapha Raphael NULL datafusionДатаФус datafusionДатаФусион NULL und under_score NULL un iść core un iść core NULL p percent NULL pan Tadeusz ma iść w kąt pan Tadeusz ma iść w kąt NULL (empty) (empty) NULL (empty) (empty) NULL +% % NULL (empty) (empty) NULL +_ _ NULL (empty) (empty) NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL