Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SQL: Fix bug in REPLACE function. Adds more tests to all string functions #33478

Merged
merged 2 commits into from
Sep 11, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import static java.lang.String.format;
import static org.elasticsearch.xpack.sql.expression.function.scalar.script.ParamsBuilder.paramsBuilder;
import static org.elasticsearch.xpack.sql.expression.function.scalar.script.ScriptTemplate.formatTemplate;
import static org.elasticsearch.xpack.sql.expression.function.scalar.string.SubstringFunctionProcessor.doProcess;
import static org.elasticsearch.xpack.sql.expression.function.scalar.string.ReplaceFunctionProcessor.doProcess;

/**
* Search the source string for occurrences of the pattern, and replace with the replacement string.
Expand Down
127 changes: 127 additions & 0 deletions x-pack/qa/sql/src/main/resources/string-functions.sql-spec
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
stringAscii
SELECT ASCII(first_name) s FROM "test_emp" WHERE emp_no < 10010 ORDER BY emp_no;

stringChar
SELECT CHAR(emp_no % 10000) m, first_name FROM "test_emp" WHERE emp_no < 10010 ORDER BY emp_no;

Expand All @@ -9,19 +10,115 @@ SELECT emp_no, ASCII(first_name) a FROM "test_emp" WHERE ASCII(first_name) < 100
stringAsciiEqualsConstant
SELECT emp_no, ASCII(first_name) a, first_name name FROM "test_emp" WHERE ASCII(first_name) = 65 ORDER BY emp_no;

stringAsciiInline
SELECT ASCII('E') e;

//https://github.com/elastic/elasticsearch/issues/31863
//stringSelectConstantAsciiEqualsConstant
//SELECT ASCII('A') = 65 a FROM "test_emp" WHERE ASCII('A') = 65 ORDER BY emp_no;

stringCharFilter
SELECT emp_no, CHAR(emp_no % 10000) m FROM "test_emp" WHERE CHAR(emp_no % 10000) = 'A';

stringSelectCharInline1
SELECT CHAR(250) c;

stringSelectCharInline2
SELECT CHAR(2) c;

charLengthInline1
SELECT CAST(CHAR_LENGTH('Elasticsearch') AS INT) charlength;

charLengthInline2
SELECT CAST(CHAR_LENGTH(' Elasticsearch ') AS INT) charlength;

charLengthInline3
SELECT CAST(CHAR_LENGTH('') AS INT) charlength;

concatInline1
SELECT CONCAT('Elastic','search') concat;

concatInline2
SELECT CONCAT(CONCAT('Lucene And ', 'Elastic'),'search') concat;

concatInline3
SELECT CONCAT(CONCAT('Lucene And ', 'Elastic'),CONCAT('search','')) concat;

lcaseFilter
SELECT LCASE(first_name) lc, CHAR(ASCII(LCASE(first_name))) chr FROM "test_emp" WHERE CHAR(ASCII(LCASE(first_name))) = 'a';

lcaseInline1
SELECT LCASE('') L;

lcaseInline2
SELECT LCASE('ElAsTiC fantastic') lower;

leftInline1
SELECT LEFT('Elasticsearch', 7) leftchars;

leftInline2
SELECT LEFT('Elasticsearch', 1) leftchars;

leftInline3
SELECT LEFT('Elasticsearch', 25) leftchars;

leftInline4
SELECT LEFT('Elasticsearch', LENGTH('abcdefghijklmnop')) leftchars;

ltrimFilter
SELECT LTRIM(first_name) lt FROM "test_emp" WHERE LTRIM(first_name) = 'Bob';

ltrimInline1
SELECT LTRIM(' Elastic ') trimmed;

ltrimInline2
SELECT LTRIM(' ') trimmed;

locateInline1
SELECT LOCATE('a', 'Elasticsearch', 8) location;

locateInline2
SELECT LOCATE('a', 'Elasticsearch') location;

locateInline3
SELECT LOCATE('x', 'Elasticsearch') location;

insertInline1
SELECT INSERT('Insert [here] your comment!', 8, 6, '(random thoughts about Elasticsearch)') ins;

insertInline2
SELECT INSERT('Insert [here] your comment!', 8, 20, '(random thoughts about Elasticsearch)') ins;

insertInline3
SELECT INSERT('Insert [here] your comment!', 8, 19, '(random thoughts about Elasticsearch)') ins;

positionInline1
SELECT POSITION('a','Elasticsearch') pos;

positionInline2
SELECT POSITION('x','Elasticsearch') pos;

repeatInline1
SELECT REPEAT('Elastic',2) rep;

repeatInline2
SELECT REPEAT('Elastic',1) rep;

replaceInline1
SELECT REPLACE('Elasticsearch','sea','A') repl;

replaceInline2
SELECT REPLACE('Elasticsearch','x','A') repl;

rightInline1
SELECT RIGHT('Elasticsearch', LENGTH('Search')) rightchars;

rightInline2
SELECT RIGHT(CONCAT('Elastic','search'), LENGTH('Search')) rightchars;

rightInline3
SELECT RIGHT('Elasticsearch', 0) rightchars;

// Unsupported yet
// Functions combined with 'LIKE' should perform the match inside a Painless script, whereas at the moment it's handled as a regular `match` query in ES.
//ltrimFilterWithLike
Expand All @@ -30,15 +127,45 @@ SELECT LTRIM(first_name) lt FROM "test_emp" WHERE LTRIM(first_name) = 'Bob';
rtrimFilter
SELECT RTRIM(first_name) rt FROM "test_emp" WHERE RTRIM(first_name) = 'Johnny';

rtrimInline1
SELECT RTRIM(' Elastic ') trimmed;

rtrimInline2
SELECT RTRIM(' ') trimmed;

spaceFilter
SELECT SPACE(languages) spaces, languages FROM "test_emp" WHERE SPACE(languages) = ' ';

spaceFilterWithLengthFunctions
SELECT SPACE(languages) spaces, languages, first_name FROM "test_emp" WHERE CHAR_LENGTH(SPACE(languages)) = 3 ORDER BY first_name;

spaceInline1
SELECT SPACE(5) space;

spaceInline1
SELECT SPACE(0) space;

substringInline1
SELECT SUBSTRING('Elasticsearch', 1, 7) sub;

substringInline2
SELECT SUBSTRING('Elasticsearch', 1, 15) sub;

substringInline3
SELECT SUBSTRING('Elasticsearch', 10, 10) sub;

ucaseFilter
SELECT UCASE(gender) uppercased, COUNT(*) count FROM "test_emp" WHERE UCASE(gender) = 'F' GROUP BY UCASE(gender);

ucaseInline1
SELECT UCASE('ElAsTiC') upper;

ucaseInline2
SELECT UCASE('') upper;

ucaseInline3
SELECT UCASE(' elastic ') upper;

//
// Group and order by
//
Expand Down