blob: a266bda880fc3bd3d0070b5075b85bf0dff1091c [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.drill.exec.expr.fn.impl;
import static org.junit.Assert.assertTrue;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.drill.categories.UnlikelyTest;
import org.apache.drill.test.BaseTestQuery;
import org.apache.drill.categories.SqlFunctionTest;
import org.apache.drill.exec.util.Text;
import org.junit.Test;
import com.google.common.collect.ImmutableList;
import org.junit.experimental.categories.Category;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
@Category({SqlFunctionTest.class, UnlikelyTest.class})
public class TestStringFunctions extends BaseTestQuery {
@Test
public void testStrPosMultiByte() throws Exception {
testBuilder()
.sqlQuery("select `position`('a', 'abc') res1 from (values(1))")
.ordered()
.baselineColumns("res1")
.baselineValues(1L)
.go();
testBuilder()
.sqlQuery("select `position`('\\u11E9', '\\u11E9\\u0031') res1 from (values(1))")
.ordered()
.baselineColumns("res1")
.baselineValues(1L)
.go();
}
@Test
public void testSplitPart() throws Exception {
testBuilder()
.sqlQuery("select split_part(a, '~@~', 1) res1 from (values('abc~@~def~@~ghi'), ('qwe~@~rty~@~uio')) as t(a)")
.ordered()
.baselineColumns("res1")
.baselineValues("abc")
.baselineValues("qwe")
.go();
testBuilder()
.sqlQuery("select split_part(a, '~@~', 2) res1 from (values('abc~@~def~@~ghi'), ('qwe~@~rty~@~uio')) as t(a)")
.ordered()
.baselineColumns("res1")
.baselineValues("def")
.baselineValues("rty")
.go();
testBuilder()
.sqlQuery("select split_part(a, '~@~', -2) res1 from (values('abc~@~def~@~ghi'), ('qwe~@~rty~@~uio')) as t(a)")
.ordered()
.baselineColumns("res1")
.baselineValues("def")
.baselineValues("rty")
.go();
// with a multi-byte splitter
testBuilder()
.sqlQuery("select split_part('abc\\u1111drill\\u1111ghi', '\\u1111', 2) res1 from (values(1))")
.ordered()
.baselineColumns("res1")
.baselineValues("drill")
.go();
testBuilder()
.sqlQuery("select split_part('abc\\u1111drill\\u1111ghi', '\\u1111', -2) res1 from (values(1))")
.ordered()
.baselineColumns("res1")
.baselineValues("drill")
.go();
// going beyond the last available index, returns empty string
testBuilder()
.sqlQuery("select split_part('a,b,c', ',', 4) res1 from (values(1))")
.ordered()
.baselineColumns("res1")
.baselineValues("")
.go();
testBuilder()
.sqlQuery("select split_part('a,b,c', ',', -4) res1 from (values(1))")
.ordered()
.baselineColumns("res1")
.baselineValues("")
.go();
// if the delimiter does not appear in the string, 1 returns the whole string
testBuilder()
.sqlQuery("select split_part('a,b,c', ' ', 1) res1 from (values(1))")
.ordered()
.baselineColumns("res1")
.baselineValues("a,b,c")
.go();
testBuilder()
.sqlQuery("select split_part('a,b,c', ' ', -1) res1 from (values(1))")
.ordered()
.baselineColumns("res1")
.baselineValues("a,b,c")
.go();
}
@Test
public void testSplitPartStartEnd() throws Exception {
testBuilder()
.sqlQuery("select split_part(a, '~@~', 1, 2) res1 from (" +
"values('abc~@~def~@~ghi'), ('qwe~@~rty~@~uio')) as t(a)")
.ordered()
.baselineColumns("res1")
.baselineValues("abc~@~def")
.baselineValues("qwe~@~rty")
.go();
testBuilder()
.sqlQuery("select split_part(a, '~@~', 2, 3) res1 from (" +
"values('abc~@~def~@~ghi'), ('qwe~@~rty~@~uio')) as t(a)")
.ordered()
.baselineColumns("res1")
.baselineValues("def~@~ghi")
.baselineValues("rty~@~uio")
.go();
testBuilder()
.sqlQuery("select split_part(a, '~@~', -2, -1) res1 from (" +
"values('abc~@~def~@~ghi'), ('qwe~@~rty~@~uio')) as t(a)")
.ordered()
.baselineColumns("res1")
.baselineValues("def~@~ghi")
.baselineValues("rty~@~uio")
.go();
// with a multi-byte splitter
testBuilder()
.sqlQuery("select split_part('abc\\u1111drill\\u1111ghi', '\\u1111', 2, 2) " +
"res1 from (values(1))")
.ordered()
.baselineColumns("res1")
.baselineValues("drill")
.go();
testBuilder()
.sqlQuery("select split_part('abc\\u1111drill\\u1111ghi', '\\u1111', -2, -2) " +
"res1 from (values(1))")
.ordered()
.baselineColumns("res1")
.baselineValues("drill")
.go();
// start index going beyond the last available index, returns empty string
testBuilder()
.sqlQuery("select split_part('a,b,c', ',', 4, 5) res1 from (values(1))")
.ordered()
.baselineColumns("res1")
.baselineValues("")
.go();
testBuilder()
.sqlQuery("select split_part('a,b,c', ',', -5, -4) res1 from (values(1))")
.ordered()
.baselineColumns("res1")
.baselineValues("")
.go();
// end index going beyond the last available index, returns remaining string
testBuilder()
.sqlQuery("select split_part('a,b,c', ',', 1, 10) res1 from (values(1))")
.ordered()
.baselineColumns("res1")
.baselineValues("a,b,c")
.go();
testBuilder()
.sqlQuery("select split_part('a,b,c', ',', -10, -1) res1 from (values(1))")
.ordered()
.baselineColumns("res1")
.baselineValues("a,b,c")
.go();
// if the delimiter does not appear in the string, 1 returns the whole string
testBuilder()
.sqlQuery("select split_part('a,b,c', ' ', 1, 2) res1 from (values(1))")
.ordered()
.baselineColumns("res1")
.baselineValues("a,b,c")
.go();
testBuilder()
.sqlQuery("select split_part('a,b,c', ' ', -2, -1) res1 from (values(1))")
.ordered()
.baselineColumns("res1")
.baselineValues("a,b,c")
.go();
}
@Test
public void testInvalidSplitPartParameters() {
boolean expectedErrorEncountered;
try {
testBuilder()
.sqlQuery("select split_part('abc~@~def~@~ghi', '~@~', 0) res1 from " +
"(values(1))")
.ordered()
.baselineColumns("res1")
.baselineValues("abc")
.go();
expectedErrorEncountered = false;
} catch (Exception ex) {
assertTrue(ex.getMessage(),
ex.getMessage().contains("Index in split_part can not be zero"));
expectedErrorEncountered = true;
}
if (!expectedErrorEncountered) {
throw new RuntimeException("Missing expected error on invalid index for " +
"split_part function");
}
try {
testBuilder()
.sqlQuery("select split_part('abc~@~def~@~ghi', '~@~', 2, 1) res1 from " +
"(values(1))")
.ordered()
.baselineColumns("res1")
.baselineValues("abc")
.go();
expectedErrorEncountered = false;
} catch (Exception ex) {
assertTrue(ex.getMessage(),
ex.getMessage().contains("End index in split_part must be greater or equal to start index"));
expectedErrorEncountered = true;
}
if (!expectedErrorEncountered) {
throw new RuntimeException("Missing expected error on invalid index for " +
"split_part function");
}
try {
testBuilder()
.sqlQuery("select split_part('abc~@~def~@~ghi', '~@~', -1, -2) res1 from " +
"(values(1))")
.ordered()
.baselineColumns("res1")
.baselineValues("abc")
.go();
expectedErrorEncountered = false;
} catch (Exception ex) {
assertTrue(ex.getMessage(),
ex.getMessage().contains("End index in split_part must be greater or equal to start index"));
expectedErrorEncountered = true;
}
if (!expectedErrorEncountered) {
throw new RuntimeException("Missing expected error on invalid index for " +
"split_part function");
}
try {
testBuilder()
.sqlQuery("select split_part('abc~@~def~@~ghi', '~@~', -1, 2) res1 from " +
"(values(1))")
.ordered()
.baselineColumns("res1")
.baselineValues("abc")
.go();
expectedErrorEncountered = false;
} catch (Exception ex) {
assertTrue(ex.getMessage(),
ex.getMessage().contains("End index in split_part must has the same sign as the start index"));
expectedErrorEncountered = true;
}
if (!expectedErrorEncountered) {
throw new RuntimeException("Missing expected error on invalid index for " +
"split_part function");
}
}
@Test
public void testRegexpMatches() throws Exception {
testBuilder()
.sqlQuery("select regexp_matches(a, '^a.*') res1, regexp_matches(b, '^a.*') res2 " +
"from (values('abc', 'bcd'), ('bcd', 'abc')) as t(a,b)")
.unOrdered()
.baselineColumns("res1", "res2")
.baselineValues(true, false)
.baselineValues(false, true)
.build()
.run();
}
@Test
public void testRegexpMatchesNonAscii() throws Exception {
testBuilder()
.sqlQuery("select regexp_matches(a, 'München') res1, regexp_matches(b, 'AMünchenA') res2 " +
"from (values('München', 'MünchenA'), ('MünchenA', 'AMünchenA')) as t(a,b)")
.unOrdered()
.baselineColumns("res1", "res2")
.baselineValues(true, false)
.baselineValues(false, true)
.build()
.run();
}
@Test
public void testRegexpReplace() throws Exception {
testBuilder()
.sqlQuery("select regexp_replace(a, 'a|c', 'x') res1, regexp_replace(b, 'd', 'zzz') res2 " +
"from (values('abc', 'bcd'), ('bcd', 'abc')) as t(a,b)")
.unOrdered()
.baselineColumns("res1", "res2")
.baselineValues("xbx", "bczzz")
.baselineValues("bxd", "abc")
.build()
.run();
}
@Test
public void testReplaceOutBuffer() throws Exception {
String originValue = RandomStringUtils.randomAlphabetic(8192).toLowerCase() + "12345";
String expectValue = originValue.replace("12345", "67890");
String sql = "select replace(c1, '12345', '67890') as col from (values('" + originValue + "')) as t(c1)";
testBuilder()
.sqlQuery(sql)
.ordered()
.baselineColumns("col")
.baselineValues(expectValue)
.go();
}
@Test
public void testLikeStartsWith() throws Exception {
// all ASCII.
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'), ('ABD'), ('ABCD'),('ABCDE')," +
"('AABCD'),('ABABCD'),('ABC$XYZ'), (''),('abcd')," +
"('x'), ('xyz'), ('%')) tbl(id) " +
"where id like 'ABC%'")
.unOrdered()
.baselineColumns("id")
.baselineValues("ABC")
.baselineValues("ABCD")
.baselineValues("ABCDE")
.baselineValues("ABC$XYZ")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'), ('ABD')," +
"('ABCD'),('ABCDE'),('AABCD'),('ABAB CD'),('ABC$XYZ')," +
"(''),('abcd'), ('x'), ('xyz'), ('%')) tbl(id)" +
"where id like 'AB%'")
.unOrdered()
.baselineColumns("id")
.baselineValues("AB")
.baselineValues("ABC")
.baselineValues("ABD")
.baselineValues("ABCD")
.baselineValues("ABCDE")
.baselineValues("ABAB CD")
.baselineValues("ABC$XYZ")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'), ('ABC'), ('ABD'), ('ABCD')," +
"('ABCDE'),('AABCD'),('ABAB CD'),('ABC$XYZ'), ('')," +
"('abcd'), ('x'), ('xyz'), ('%')) tbl(id)" +
"where id like 'A%'")
.unOrdered()
.baselineColumns("id")
.baselineValues("A")
.baselineValues("AB")
.baselineValues("ABC")
.baselineValues("ABD")
.baselineValues("ABCD")
.baselineValues("ABCDE")
.baselineValues("AABCD")
.baselineValues("ABAB CD")
.baselineValues("ABC$XYZ")
.build()
.run();
// no match
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'),('ABCD'),('ABCDE')," +
"('AABCD'), ('ABABCD'),('ABC$XYZ'), (''),('abcd')," +
"('x'), ('xyz'), ('%')) tbl(id)" +
" where id like 'z%'")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
// patternLength > txtLength
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'),('ABCD'),('ABCDE'),('AABCD')," +
"('ABABCD'),('ABC$XYZ'), (''),('abcd'), ('x'), ('xyz'), ('%')) tbl(id)" +
"where id like 'ABCDEXYZRST%'")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
// non ASCII
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('ABC'), ('¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~')," +
" ('xyz'), ('%')) tbl(id)" +
" where id like '¤%'")
.unOrdered()
.baselineColumns("id")
.baselineValues("¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('ABC'), ('ABC¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~'), " +
"('xyz'), ('%')) tbl(id)" +
" where id like 'ABC¤%'")
.unOrdered()
.baselineColumns("id")
.baselineValues("ABC¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('ABC'), ('ABC¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~'), ('xyz'), ('%')) tbl(id)" +
" where id like 'A%'")
.unOrdered()
.baselineColumns("id")
.baselineValues("ABC")
.baselineValues("ABC¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~")
.build()
.run();
// no match
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('ABC'), ('¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~'), ('xyz'), ('%')) tbl(id) " +
"where id like 'Z%'")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
}
@Test
public void testLikeEndsWith() throws Exception {
// all ASCII. End with multiple characters
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'), ('ABD'), ('ABCD'),('ABCDE')," +
"('AABCD'),('ABABCD'),('ABC$XYZ'), (''),('abcd'), " +
"('x'), ('xyz'), ('%')) tbl(id) " +
"where id like '%BCD'")
.unOrdered()
.baselineColumns("id")
.baselineValues("ABCD")
.baselineValues("AABCD")
.baselineValues("ABABCD")
.build()
.run();
// all ASCII. End with single character.
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'), ('ABD'), ('ABCD'),('ABCDE')," +
"('AABCD'),('ABABCD'),('ABC$XYZ'), (''),('abcd'), " +
"('x'), ('xyz'), ('%')) tbl(id)" +
"where id like '%D'")
.unOrdered()
.baselineColumns("id")
.baselineValues("ABD")
.baselineValues("ABCD")
.baselineValues("AABCD")
.baselineValues("ABABCD")
.build()
.run();
// all ASCII. End with nothing. Should match all.
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'), ('ABD'), ('ABCD'),('ABCDE')," +
"('AABCD'),('ABABCD'),('ABC$XYZ'), (''),('abcd'), " +
"('x'), ('xyz'), ('%')) tbl(id)" +
"where id like '%'")
.unOrdered()
.baselineColumns("id")
.baselineValues("A")
.baselineValues("AB")
.baselineValues("ABC")
.baselineValues("ABD")
.baselineValues("ABCD")
.baselineValues("ABCDE")
.baselineValues("AABCD")
.baselineValues("ABABCD")
.baselineValues("ABC$XYZ")
.baselineValues("")
.baselineValues("abcd")
.baselineValues("x")
.baselineValues("xyz")
.baselineValues("%")
.build()
.run();
// no match
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'),('ABCD'),('ABCDE'),('AABCD')," +
"('ABABCD'),('ABC$XYZ'), (''),('abcd'), ('x'), ('xyz'), ('%')) tbl(id)" +
"where id like '%F'")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
// patternLength > txtLength
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'),('ABCD'),('ABCDE'),('AABCD'),('ABABCD')," +
"('ABC$XYZ'), (''),('abcd'), ('x'), ('xyz'), ('%')) tbl(id) " +
"where id like '%ABCDEXYZRST'")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
// patternLength == txtLength
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'),('ABCD'),('ABCDE'),('AABCD'),('ABABCD')," +
"('ABC$XYZ'), (''),('abcd'), ('x'), ('xyz'), ('%')) tbl(id) " +
"where id like '%ABC'")
.unOrdered()
.baselineColumns("id")
.baselineValues("ABC")
.build()
.run();
// non ASCII. End with single character
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('ABC'), ('¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~'), ('')," +
"('¶TÆU2~~'), ('xyz'), ('%')) tbl(id) " +
"where id like '%~~'")
.unOrdered()
.baselineColumns("id")
.baselineValues("¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~")
.baselineValues("¶TÆU2~~")
.build()
.run();
// non ASCII. End with multiple characters
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('ABC'), ('ABC¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~'), " +
"(''), ('¶TÆU2~~'), ('xyz'), ('%')) tbl(id)" +
"where id like '%¶TÆU2~~'")
.unOrdered()
.baselineColumns("id")
.baselineValues("ABC¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~")
.baselineValues("¶TÆU2~~")
.build()
.run();
// non ASCII, no match
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('ABC'), ('ABC¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~'), ('')," +
"('xyz'), ('%')) tbl(id)" +
"where id like '%E'")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
}
@Test
public void testLikeContains() throws Exception {
// all ASCII. match at the beginning, middle and end.
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'), ('ABD'), ('ABCD'),('DEABC')," +
"('AABCD'), ('ABABCDEF'),('AABC$XYZ'), (''),('abcd'), ('x'), " +
"('xyz'), ('%')) tbl(id) " +
"where id like '%ABC%'")
.unOrdered()
.baselineColumns("id")
.baselineValues("ABC")
.baselineValues("ABCD")
.baselineValues("DEABC")
.baselineValues("AABCD")
.baselineValues("ABABCDEF")
.baselineValues("AABC$XYZ")
.build()
.run();
// all ASCII. match at the beginning, middle and end, single character.
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'), ('ABD'), ('ABCD'),('ABCDE')," +
"('AABCD'),('ABABCD'),('CAB$XYZ'), (''),('abcd'), ('x'), " +
"('xyz'), ('%')) tbl(id)" +
"where id like '%C%'")
.unOrdered()
.baselineColumns("id")
.baselineValues("ABC")
.baselineValues("ABCD")
.baselineValues("ABCDE")
.baselineValues("AABCD")
.baselineValues("ABABCD")
.baselineValues("CAB$XYZ")
.build()
.run();
// no match
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'), ('ABD'), ('ABCD'),('ABCDE')," +
"('AABCD'),('ABABCD'),('CAB$XYZ'), (''),('abcd'), ('x')," +
"('xyz'), ('%')) tbl(id)" +
"where id like '%FGH%'")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
// patternLength > txtLength
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'),('ABCD'),('ABCDE'),('AABCD'),('ABABCD')," +
"('ABC$XYZ'), (''),('abcd'), ('x'), ('xyz'), ('%')) tbl(id)" +
"where id like '%ABCDEXYZRST%'")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
// all match
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'),('ABCD'),('ABCDE'),('AABCD'),('ABABCD')," +
"('ABC$XYZ'), (''),('abcd'), ('x'), ('xyz'), ('%')) tbl(id)" +
"where id like '%%'")
.unOrdered()
.baselineColumns("id")
.baselineValues("A")
.baselineValues("AB")
.baselineValues("ABC")
.baselineValues("ABCD")
.baselineValues("ABCDE")
.baselineValues("AABCD")
.baselineValues("ABABCD")
.baselineValues("ABC$XYZ")
.baselineValues("")
.baselineValues("abcd")
.baselineValues("x")
.baselineValues("xyz")
.baselineValues("%")
.build()
.run();
// non ASCII
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('ABC'), ('¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~'), " +
"(''), ('¶TÆU2~~'), ('xyz'), ('%')) tbl(id)" +
"where id like '%ÆU2%'")
.unOrdered()
.baselineColumns("id")
.baselineValues("¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~")
.baselineValues("¶TÆU2~~")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('ABC'), ('ABC¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~'), " +
"(''), ('¶TÆU2~~'), ('xyz'), ('%')) tbl(id)" +
"where id like '%EÀsÆW%'")
.unOrdered()
.baselineColumns("id")
.baselineValues("ABC¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~")
.build()
.run();
// no match
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('ABC'), ('ABC¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~'), ('')," +
"('xyz'), ('%')) tbl(id) where id like '%¶T¶T%'")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
}
@Test
public void testLikeConstant() throws Exception {
// all ASCII
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'), ('ABD'), " +
"('ABCD'),('ABCDE'),('AABCD'),('ABABCD'),('ABC$XYZ'), ('')," +
"('abcd'), ('x'), ('xyz'), ('%')) tbl(id) " +
"where id like 'ABC'")
.unOrdered()
.baselineColumns("id")
.baselineValues("ABC")
.build()
.run();
// Multiple same values
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'), ('ABC')," +
"('ABD'), ('ABCD'),('ABCDE'),('AABCD'),('ABABCD'),('ABC$XYZ')," +
"(''),('abcd'), ('x'), ('xyz'), ('%')) tbl(id)" +
"where id like 'ABC'")
.unOrdered()
.baselineColumns("id")
.baselineValues("ABC")
.baselineValues("ABC")
.build()
.run();
// match empty string
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'), ('ABD'), ('ABCD'),('ABCDE')," +
"('AABCD'),('ABABCD'),('ABC$XYZ'), (''),('abcd'), ('x')," +
" ('xyz'), ('%')) tbl(id)" +
"where id like ''")
.unOrdered()
.baselineColumns("id")
.baselineValues("")
.build()
.run();
// no match
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'),('ABCD'),('ABCDE'),('AABCD')," +
"('ABABCD'),('ABC$XYZ'), (''),('abcd'), ('x'), ('xyz')," +
"('%')) tbl(id) where id like 'EFGH'")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
// patternLength > txtLength
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'),('ABCD'),('ABCDE'),('AABCD'),('ABABCD')," +
"('ABC$XYZ'), (''),('abcd'), ('x'), ('xyz'), ('%')) tbl(id)" +
" where id like 'ABCDEXYZRST'")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
// non ASCII
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('ABC'), ('¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~'), (''), " +
"('¶TÆU2~~'), ('xyz'), ('%')) tbl(id)" +
" where id like '¶TÆU2~~'")
.unOrdered()
.baselineColumns("id")
.baselineValues("¶TÆU2~~")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('ABC'), ('ABC¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~'), ('')," +
"('¶TÆU2~~'), ('xyz'), ('%')) tbl(id)" +
"where id like 'ABC¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~'")
.unOrdered()
.baselineColumns("id")
.baselineValues("ABC¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~")
.build()
.run();
// no match
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('ABC'), ('ABC¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~'), (''), " +
"('xyz'), ('%')) tbl(id) where id like '¶T¶T'")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
}
@Test
public void testLikeWithEscapeStartsWith() throws Exception {
// all ASCII
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC%'), ('ABD'), ('ABCD'),('ABCDE')," +
"('AABCD'),('ABABCD'),('ABC$XYZ'), (''),('abcd'), ('x')," +
"('xyz'), ('%')) tbl(id) " +
"where id like 'ABC#%' escape '#'")
.unOrdered()
.baselineColumns("id")
.baselineValues("ABC%")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('A%B'),('A%B%C%'), ('ABD'), ('ABCD')," +
"('ABCDE'),('AABCD'),('A%BABCD'),('ABC$XYZ'), ('')," +
"('abcd'), ('x'), ('xyz'), ('%')) tbl (id)" +
"where id like 'A#%B%' escape '#'")
.unOrdered()
.baselineColumns("id")
.baselineValues("A%B")
.baselineValues("A%B%C%")
.baselineValues("A%BABCD")
.build()
.run();
// Multiple escape characters
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A_'),('AB'),('ABC'), ('ABD'), ('A_BC%D_')," +
"('ABCDE'), ('A_BC%D_XYZ'),('ABABCD'),('A_BC%D_$%XYZ')," +
" (''),('abcd'), ('x'), ('%')) tbl(id)" +
"where id like 'A#_BC#%D#_%' escape '#'")
.unOrdered()
.baselineColumns("id")
.baselineValues("A_BC%D_")
.baselineValues("A_BC%D_XYZ")
.baselineValues("A_BC%D_$%XYZ")
.build()
.run();
// Escape character followed by escape character
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A_'),('AB'),('ABC'), ('ABD'), ('ABC%D_')," +
"('A#BC%D_E'),('A_BC%D_XYZ'),('ABABCD'),('A#BC%D_$%XYZ')," +
" (''),('abcd'), ('x'), ('%')) tbl(id)" +
"where id like 'A##BC#%D#_%' escape '#'")
.unOrdered()
.baselineColumns("id")
.baselineValues("A#BC%D_E")
.baselineValues("A#BC%D_$%XYZ")
.build()
.run();
// no match
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'),('ABCD'),('ABCDE'),('AABCD')," +
"('ABABCD'),('ABC$XYZ'), (''),('abcd'), ('x'), ('xyz'), ('%')) tbl(id)" +
" where id like 'z#%' escape '#'")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
// patternLength > txtLength
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'),('ABCD'),('ABCDE'),('AABCD')," +
"('ABABCD'),('ABC$XYZ'), (''),('abcd'), ('x'), ('xyz'), ('%')) tbl(id)" +
" where id like 'ABCDEXYZRST#_%' escape '#'")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
// non ASCII
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('ABC'), ('¤E_ÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~')," +
" ('xyz'), ('%')) tbl(id)" +
" where id like '¤E#_%' escape '#'")
.unOrdered()
.baselineColumns("id")
.baselineValues("¤E_ÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('ABC'), ('ABC¤EÀ%sÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~'), " +
"('xyz'), ('%')) tbl(id)" +
" where id like 'ABC¤EÀ#%sÆW%' escape '#'")
.unOrdered()
.baselineColumns("id")
.baselineValues("ABC¤EÀ%sÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('AB%C'), " +
"('AB%C¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~'), ('xyz'), ('%')) tbl(id)" +
" where id like 'AB#%C%' escape '#'")
.unOrdered()
.baselineColumns("id")
.baselineValues("AB%C")
.baselineValues("AB%C¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~")
.build()
.run();
// no match
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('ABC'), ('¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~')," +
" ('xyz'), ('%')) tbl(id)" +
"where id like 'Z$%%' escape '$'")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
}
@Test
public void testLikeWithEscapeEndsWith() throws Exception {
// all ASCII
testBuilder().sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'),('AB%C'),('ABCDE'),('AABCD')," +
"('ABAB%C'),('ABC$XYZAB%C'), (''),('abcd'), ('x'), ('xyz'), ('%')) tbl(id) " +
"where id like '%AB$%C' escape '$'")
.unOrdered()
.baselineColumns("id")
.baselineValues("AB%C")
.baselineValues("ABAB%C")
.baselineValues("ABC$XYZAB%C")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB_'),('AB%C%AB_'), ('ABD'), ('ABCD')," +
"('ABCDE'), ('AABCD'),('AB%ABCD'),('ABC$XYZAB_'), ('')," +
"('abcd'), ('x'), ('xyz'), ('%')) tbl(id)" +
"where id like '%AB#_' escape '#'")
.unOrdered()
.baselineColumns("id")
.baselineValues("AB_")
.baselineValues("AB%C%AB_")
.baselineValues("ABC$XYZAB_")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A_'),('AB'),('ABC'), ('ABD'), ('A_BCD'),('ABCDEA_')," +
"('A_ABCD'),('ABABCDA_'),('A_BC$XYZA_'), (''),('abcd')," +
" ('x'), ('xyz'), ('%')) tbl(id)" +
"where id like '%A#_' escape '#'")
.unOrdered()
.baselineColumns("id")
.baselineValues(("A_"))
.baselineValues("ABCDEA_")
.baselineValues("ABABCDA_")
.baselineValues("A_BC$XYZA_")
.build()
.run();
// Multiple escape characters
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A_'),('AB'),('ABC'), ('ABD'), ('A_BC%D_'),('ABCDE')," +
"('XYZA_BC%D_'),('ABABCD'),('$%XYZA_BC%D_'), ('')," +
"('abcd'), ('x'), ('%')) tbl(id)" +
" where id like '%A#_BC#%D#_' escape '#'")
.unOrdered()
.baselineColumns("id")
.baselineValues("A_BC%D_")
.baselineValues("XYZA_BC%D_")
.baselineValues("$%XYZA_BC%D_")
.build()
.run();
// Escape character followed by escape character
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A_'),('AB'),('ABC'), ('ABD'), ('A#BC%D_'),('A#BC%D_E')," +
"('A_BC%D_XYZ'),('ABABCD'),('$%XYZA#BC%D_'), ('')," +
"('abcd'), ('x'), ('%')) tbl(id)" +
" where id like '%A##BC#%D#_' escape '#'")
.unOrdered()
.baselineColumns("id")
.baselineValues("A#BC%D_")
.baselineValues("$%XYZA#BC%D_")
.build()
.run();
// non ASCII
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('ABC'), ('¤E_ÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2_~~')," +
" ('xyz'), ('%')) tbl(id)" +
" where id like '%2#_~~' escape '#'")
.unOrdered()
.baselineColumns("id")
.baselineValues("¤E_ÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2_~~")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('ABC'), ('ABC¤EÀ%sÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~ABC¤EÀ%sÆW'), " +
"('xyz'), ('%')) tbl(id)" +
" where id like '%ABC¤EÀ#%sÆW' escape '#'")
.unOrdered()
.baselineColumns("id")
.baselineValues("ABC¤EÀ%sÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~ABC¤EÀ%sÆW")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('AB%C'), " +
"('AB%C¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~AB%C'), ('xyz'), ('%')) tbl(id)" +
" where id like '%AB#%C' escape '#'")
.unOrdered()
.baselineColumns("id")
.baselineValues("AB%C")
.baselineValues("AB%C¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~AB%C")
.build()
.run();
// no match
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('ABC'), ('¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~')," +
" ('xyz'), ('%')) tbl(id)" +
"where id like '%$%' escape '$'")
.unOrdered()
.baselineColumns("id")
.baselineValues("%")
.build()
.run();
}
@Test
public void testLikeWithEscapeContains() throws Exception {
// test EndsWith
testBuilder().sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC'),('AB%C'),('ABCDE'),('AB%AB%CDED')," +
"('ABAB%CDE'),('ABC$XYZAB%C'), (''),('abcd'), ('x'), ('xyz'), ('%')) tbl(id)" +
"where id like '%AB$%C%' escape '$'")
.unOrdered()
.baselineColumns("id")
.baselineValues("ABAB%CDE")
.baselineValues("AB%AB%CDED")
.baselineValues("AB%C")
.baselineValues("ABC$XYZAB%C")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB_'),('%AB%C%AB_'), ('%AB%D'), ('ABCD')," +
"('AB%AC%AB%DE'), ('AABCD'),('AB%AB%CD'),('ABC$XYZAB_')," +
"(''),('abcd'), ('x'), ('xyz'), ('%')) tbl(id)" +
"where id like '%#%AB#%%' escape '#'")
.unOrdered()
.baselineColumns("id")
.baselineValues("%AB%C%AB_")
.baselineValues("%AB%D")
.baselineValues("AB%AB%CD")
.baselineValues("AB%AC%AB%DE")
.build()
.run();
// no match
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB_'),('%AB%C%AB_'), ('%AB%D'), ('ABCD')," +
"('AB%AC%AB%DE'), ('AABCD'),('AB%AB%CD'),('ABC$XYZAB_')," +
"(''),('abcd'), ('x'), ('xyz'), ('%')) tbl(id)" +
"where id like '%#%A#_B#%%' escape '#'")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A_'),('AB'),('ABC'), ('ABD'), ('A_BCD'),('ABA_CDEA_')," +
"('A_ABCD'),('ABABCDA_'),('A_BC$XYZA_'), ('')," +
"('abcd'), ('x'), ('xyz'), ('%')) tbl(id)" +
"where id like '%A#_%' escape '#'")
.unOrdered()
.baselineColumns("id")
.baselineValues(("A_"))
.baselineValues("A_BCD")
.baselineValues("ABA_CDEA_")
.baselineValues("A_ABCD")
.baselineValues("A_BC$XYZA_")
.baselineValues("ABABCDA_")
.build()
.run();
// Multiple escape characters
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A_'),('AB'),('ABC'), ('ABD'), ('A_BC%D_'),('ABCDE')," +
"('XYZA_BC%D_'),('ABABCD'),('$%XYZA_BC%D_'), ('')," +
"('abcd'), ('x'), ('%')) tbl" +
"(id) where id like '%A#_BC#%D#_' escape '#'")
.unOrdered()
.baselineColumns("id")
.baselineValues("A_BC%D_")
.baselineValues("XYZA_BC%D_")
.baselineValues("$%XYZA_BC%D_")
.build()
.run();
// Escape character followed by escape character
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A_'),('AB'),('ABC'), ('ABDA#BC%D_'), ('A#BC%D_')," +
"('A#BC%BC%D_E'),('A_BC%D_XYZ'),('ABABCD'),('$%XYZA#BC%D_')," +
" (''),('abcd'), ('x'), ('%')) tbl(id)" +
" where id like '%A##BC#%D#_%' escape '#'")
.unOrdered()
.baselineColumns("id")
.baselineValues("A#BC%D_")
.baselineValues("$%XYZA#BC%D_")
.baselineValues("ABDA#BC%D_")
.build()
.run();
}
@Test
public void testLikeWithEscapeConstant() throws Exception {
// test startsWith
testBuilder().sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC%'),('ABCD'),('ABCDE'),('AABCD')," +
"('ABABCD'),('ABC$XYZ'), (''),('abcd'), ('x'), ('xyz'), ('%')) tbl(id) " +
"where id like 'ABC%%' escape '%' ")
.unOrdered()
.baselineColumns("id")
.baselineValues("ABC%")
.build()
.run();
testBuilder().sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('%ABC'),('ABCD'),('ABCDE'),('AABCD')," +
"('ABABCD'),('ABC$XYZ'), (''),('abcd'), ('x'), ('xyz'), ('%')) tbl(id) " +
"where id like '%%ABC' escape '%' ")
.unOrdered()
.baselineColumns("id")
.baselineValues("%ABC")
.build()
.run();
testBuilder().sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('AB%C'),('ABCD'),('ABCDE'),('AABCD'),('ABABCD')," +
"('ABC$XYZ'), (''),('abcd'), ('x'), ('xyz'), ('%')) tbl(id) " +
"where id like 'AB%%C' escape '%' ")
.unOrdered()
.baselineColumns("id")
.baselineValues("AB%C")
.build()
.run();
// Multiple escape characters
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A_'),('AB'),('ABC'), ('ABD'), ('%_BC%D_'),('ABCDE')," +
"('XYZA_BC%D_'),('ABABCD'),('$%XYZA_BC%D_'), (''),('abcd'), ('x'), ('%')) tbl(id)" +
" where id like '%%_BC%%D%_' escape '%'")
.unOrdered()
.baselineColumns("id")
.baselineValues("%_BC%D_")
.build()
.run();
// Escape character followed by escape character
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('A_'),('AB'),('ABC'), ('ABDA#BC%D_'), ('A#BC%D_'),('A#BA#BC%D_E')," +
"('A_BC%D_XYZ'),('ABABCD'),('$%XYZA#BC%D_'), (''),('abcd'), ('x'), ('%')) tbl(id)" +
" where id like 'A##BC#%D#_' escape '#'")
.unOrdered()
.baselineColumns("id")
.baselineValues("A#BC%D_")
.build()
.run();
// no match
testBuilder().sqlQuery(" SELECT id FROM (" +
"VALUES('A'),('AB'),('ABC%'),('ABCD'),('ABCDE'),('AABCD')," +
"('ABABCD'),('ABC$XYZ'), (''),('abcd'), ('x'), ('xyz'), ('%')) tbl(id) " +
"where id like '%_ABC%%' escape '%' ")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
}
@Test
public void testLikeRandom() throws Exception {
// test Random queries with like
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('aeiou'),('abcdef'),('afdrgt'),('abcdt'),('aaaa'),('a'),('aeiou'),(''),('a aa')) tbl(id)" +
"where id not like 'a %'")
.unOrdered()
.baselineColumns("id")
.baselineValues("aeiou")
.baselineValues("abcdef")
.baselineValues("afdrgt")
.baselineValues("abcdt")
.baselineValues("aaaa")
.baselineValues("a")
.baselineValues("aeiou")
.baselineValues("")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('aeiou'),('abcdefizu'),('afdrgt'),('abcdt'),('aaaa'),('a'),('aeiou'),(''),('a aa')) tbl(id)" +
"where id like 'a%i_u'")
.unOrdered()
.baselineColumns("id")
.baselineValues("aeiou")
.baselineValues("aeiou")
.baselineValues("abcdefizu")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('xyzaeioughbcd'),('abcdefizu'),('afdrgt'),('abcdt'),('aaaa'),('a'),('aeiou'),(''),('a aa')) tbl(id)" +
"where id like '%a_i_u%bcd%'")
.unOrdered()
.baselineColumns("id")
.baselineValues("xyzaeioughbcd")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('abc')) tbl(id)" +
"where id like 'ab'")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('abc')) tbl(id)" +
"where id like '%ab'")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('abc')) tbl(id)" +
"where id like 'ab%'")
.unOrdered()
.baselineColumns("id")
.baselineValues("abc")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('abc')) tbl(id)" +
"where id like '%ab%'")
.unOrdered()
.baselineColumns("id")
.baselineValues("abc")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('abc')) tbl(id)" +
"where id like 'abc'")
.unOrdered()
.baselineColumns("id")
.baselineValues("abc")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('abc')) tbl(id)" +
"where id like 'abc%'")
.unOrdered()
.baselineColumns("id")
.baselineValues("abc")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('abc')) tbl(id)" +
"where id like '%abc'")
.unOrdered()
.baselineColumns("id")
.baselineValues("abc")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('abc')) tbl(id)" +
"where id like '%abc%'")
.unOrdered()
.baselineColumns("id")
.baselineValues("abc")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('abc')) tbl(id)" +
"where id like 'abcd'")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('abc')) tbl(id)" +
"where id like 'abcd%'")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('abc')) tbl(id)" +
"where id like '%abcd'")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('abc')) tbl(id)" +
"where id like '%abcd%'")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('abc')) tbl(id)" +
"where id like ''")
.unOrdered()
.baselineColumns("id")
.expectsEmptyResultSet()
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('abc')) tbl(id)" +
"where id like '%'")
.unOrdered()
.baselineColumns("id")
.baselineValues("abc")
.build()
.run();
testBuilder()
.sqlQuery(" SELECT id FROM (" +
"VALUES('abc')) tbl(id)" +
"where id like '%%'")
.unOrdered()
.baselineColumns("id")
.baselineValues("abc")
.build()
.run();
}
@Test
public void testILike() throws Exception {
testBuilder()
.sqlQuery("select n_name from cp.`tpch/nation.parquet` where `ilike`(n_name, '%united%') = true")
.unOrdered()
.baselineColumns("n_name")
.baselineValues("UNITED STATES")
.baselineValues("UNITED KINGDOM")
.build()
.run();
}
@Test
public void testILikeEscape() throws Exception {
testBuilder()
.sqlQuery("select a from (select concat(r_name , '_region') a from cp.`tpch/region.parquet`) where `ilike`(a, 'asia#_region', '#') = true")
.unOrdered()
.baselineColumns("a")
.baselineValues("ASIA_region")
.build()
.run();
}
@Test
public void testSubstr() throws Exception {
testBuilder()
.sqlQuery("select substr(n_name, 'UN.TE.') a from cp.`tpch/nation.parquet` where `ilike`(n_name, 'united%') = true")
.unOrdered()
.baselineColumns("a")
.baselineValues("UNITED")
.baselineValues("UNITED")
.build()
.run();
}
@Test
public void testLpadTwoArgConvergeToLpad() throws Exception {
final String query_1 = "SELECT lpad(r_name, 25) \n" +
"FROM cp.`tpch/region.parquet`";
final String query_2 = "SELECT lpad(r_name, 25, ' ') \n" +
"FROM cp.`tpch/region.parquet`";
testBuilder()
.sqlQuery(query_1)
.unOrdered()
.sqlBaselineQuery(query_2)
.build()
.run();
}
@Test
public void testRpadTwoArgConvergeToRpad() throws Exception {
final String query_1 = "SELECT rpad(r_name, 25) \n" +
"FROM cp.`tpch/region.parquet`";
final String query_2 = "SELECT rpad(r_name, 25, ' ') \n" +
"FROM cp.`tpch/region.parquet`";
testBuilder()
.sqlQuery(query_1)
.unOrdered()
.sqlBaselineQuery(query_2)
.build()
.run();
}
@Test
public void testLtrimOneArgConvergeToLtrim() throws Exception {
final String query_1 = "SELECT ltrim(concat(' ', r_name, ' ')) \n" +
"FROM cp.`tpch/region.parquet`";
final String query_2 = "SELECT ltrim(concat(' ', r_name, ' '), ' ') \n" +
"FROM cp.`tpch/region.parquet`";
testBuilder()
.sqlQuery(query_1)
.unOrdered()
.sqlBaselineQuery(query_2)
.build()
.run();
}
@Test
public void testRtrimOneArgConvergeToRtrim() throws Exception {
final String query_1 = "SELECT rtrim(concat(' ', r_name, ' ')) \n" +
"FROM cp.`tpch/region.parquet`";
final String query_2 = "SELECT rtrim(concat(' ', r_name, ' '), ' ') \n" +
"FROM cp.`tpch/region.parquet`";
testBuilder()
.sqlQuery(query_1)
.unOrdered()
.sqlBaselineQuery(query_2)
.build()
.run();
}
@Test
public void testBtrimOneArgConvergeToBtrim() throws Exception {
final String query_1 = "SELECT btrim(concat(' ', r_name, ' ')) \n" +
"FROM cp.`tpch/region.parquet`";
final String query_2 = "SELECT btrim(concat(' ', r_name, ' '), ' ') \n" +
"FROM cp.`tpch/region.parquet`";
testBuilder()
.sqlQuery(query_1)
.unOrdered()
.sqlBaselineQuery(query_2)
.build()
.run();
}
@Test
public void testSplit() throws Exception {
testBuilder()
.sqlQuery("select split(n_name, ' ') words from cp.`tpch/nation.parquet` where n_nationkey = 24")
.unOrdered()
.baselineColumns("words")
.baselineValues(ImmutableList.of(new Text("UNITED"), new Text("STATES")))
.build()
.run();
}
@Test
public void testSplitWithNullInput() throws Exception {
// Contents of the generated file:
/*
{"a": "aaaaaa.bbb.cc.ddddd"}
{"a": null}
{"a": "aa"}
*/
try (BufferedWriter writer = new BufferedWriter(new FileWriter(new File(dirTestWatcher.getRootDir(), "nullable_strings.json")))) {
String[] fieldValue = {"\"aaaaaa.bbb.cc.ddddd\"", null, "\"aa\""};
for (String value : fieldValue) {
String entry = String.format("{ \"a\": %s}\n", value);
writer.write(entry);
}
}
testBuilder()
.sqlQuery("select split(a, '.') wordsCount from dfs.`nullable_strings.json` t")
.unOrdered()
.baselineColumns("wordsCount")
.baselineValues(ImmutableList.of(new Text("aaaaaa"), new Text("bbb"), new Text("cc"), new Text("ddddd")))
.baselineValues(ImmutableList.of())
.baselineValues(ImmutableList.of(new Text("aa")))
.go();
}
@Test
public void testReverse() throws Exception {
testBuilder()
.sqlQuery("select reverse('qwerty') words from (values(1))")
.unOrdered()
.baselineColumns("words")
.baselineValues("ytrewq")
.build()
.run();
}
@Test // DRILL-5424
public void testReverseLongVarChars() throws Exception {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(new File(dirTestWatcher.getRootDir(), "table_with_long_varchars.json")))) {
for (int i = 0; i < 10; i++) {
writer.write("{ \"a\": \"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz\"}");
}
}
test("select reverse(a) from dfs.`table_with_long_varchars.json` t");
}
@Test
public void testLower() throws Exception {
testBuilder()
.sqlQuery("select\n" +
"lower('ABC') col_upper,\n" +
"lower('abc') col_lower,\n" +
"lower('AbC aBc') col_space,\n" +
"lower('123ABC$!abc123.') as col_special,\n" +
"lower('') as col_empty,\n" +
"lower(cast(null as varchar(10))) as col_null\n" +
"from (values(1))")
.unOrdered()
.baselineColumns("col_upper", "col_lower", "col_space", "col_special", "col_empty", "col_null")
.baselineValues("abc", "abc", "abc abc", "123abc$!abc123.", "", null)
.build()
.run();
}
@Test
public void testUpper() throws Exception {
testBuilder()
.sqlQuery("select\n" +
"upper('ABC')as col_upper,\n" +
"upper('abc') as col_lower,\n" +
"upper('AbC aBc') as col_space,\n" +
"upper('123ABC$!abc123.') as col_special,\n" +
"upper('') as col_empty,\n" +
"upper(cast(null as varchar(10))) as col_null\n" +
"from (values(1))")
.unOrdered()
.baselineColumns("col_upper", "col_lower", "col_space", "col_special", "col_empty", "col_null")
.baselineValues("ABC", "ABC", "ABC ABC", "123ABC$!ABC123.", "", null)
.build()
.run();
}
@Test
public void testInitcap() throws Exception {
testBuilder()
.sqlQuery("select\n" +
"initcap('ABC')as col_upper,\n" +
"initcap('abc') as col_lower,\n" +
"initcap('AbC aBc') as col_space,\n" +
"initcap('123ABC$!abc123.') as col_special,\n" +
"initcap('') as col_empty,\n" +
"initcap(cast(null as varchar(10))) as col_null\n" +
"from (values(1))")
.unOrdered()
.baselineColumns("col_upper", "col_lower", "col_space", "col_special", "col_empty", "col_null")
.baselineValues("Abc", "Abc", "Abc Abc", "123abc$!Abc123.", "", null)
.build()
.run();
}
@Test
public void testMultiByteEncoding() throws Exception {
testBuilder()
.sqlQuery("select\n" +
"upper('привет')as col_upper,\n" +
"lower('ПРИВЕТ') as col_lower,\n" +
"initcap('приВЕТ') as col_initcap\n" +
"from (values(1))")
.unOrdered()
.baselineColumns("col_upper", "col_lower", "col_initcap")
.baselineValues("ПРИВЕТ", "привет", "Привет")
.build()
.run();
}
}