Skip to content

Commit

Permalink
SQL: Introduce support for NULL values (#34573)
Browse files Browse the repository at this point in the history
Make SQL aware of missing and/or unmapped fields treating them as NULL
Make _all_ functions and operators null-safe aware, including when used
in filtering or sorting contexts
Add missing and null-safe doc value extractor
Modify dataset to have null fields spread around (in groups of 10)
Enforce missing last and unmapped_type inside sorting
Consolidate Predicate templating and declaration
Add support for Like/RLike in scripting
Generalize NULLS LAST/FIRST
Introduce early schema declaration for CSV spec tests: to keep the doc
snippets in place (introduce schema:: prefix for declaration)
upfront.

Fix #32079
  • Loading branch information
costin committed Oct 19, 2018
1 parent 4236358 commit 52104aa
Show file tree
Hide file tree
Showing 118 changed files with 3,324 additions and 2,896 deletions.
4 changes: 3 additions & 1 deletion docs/reference/sql/endpoints/translate.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,9 @@ Which returns:
"sort" : [
{
"page_count" : {
"order" : "desc"
"order" : "desc",
"missing" : "_first",
"unmapped_type" : "short"
}
}
]
Expand Down
5 changes: 4 additions & 1 deletion x-pack/plugin/sql/src/main/antlr/SqlBase.g4
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ queryTerm
;

orderBy
: expression ordering=(ASC | DESC)?
: expression ordering=(ASC | DESC)? (NULLS nullOrdering=(FIRST | LAST))?
;

querySpecification
Expand Down Expand Up @@ -357,6 +357,7 @@ EXISTS: 'EXISTS';
EXPLAIN: 'EXPLAIN';
EXTRACT: 'EXTRACT';
FALSE: 'FALSE';
FIRST: 'FIRST';
FORMAT: 'FORMAT';
FROM: 'FROM';
FULL: 'FULL';
Expand All @@ -368,6 +369,7 @@ IN: 'IN';
INNER: 'INNER';
IS: 'IS';
JOIN: 'JOIN';
LAST: 'LAST';
LEFT: 'LEFT';
LIKE: 'LIKE';
LIMIT: 'LIMIT';
Expand All @@ -376,6 +378,7 @@ MATCH: 'MATCH';
NATURAL: 'NATURAL';
NOT: 'NOT';
NULL: 'NULL';
NULLS: 'NULLS';
ON: 'ON';
OPTIMIZED: 'OPTIMIZED';
OR: 'OR';
Expand Down
294 changes: 150 additions & 144 deletions x-pack/plugin/sql/src/main/antlr/SqlBase.tokens
Original file line number Diff line number Diff line change
Expand Up @@ -25,85 +25,88 @@ EXISTS=24
EXPLAIN=25
EXTRACT=26
FALSE=27
FORMAT=28
FROM=29
FULL=30
FUNCTIONS=31
GRAPHVIZ=32
GROUP=33
HAVING=34
IN=35
INNER=36
IS=37
JOIN=38
LEFT=39
LIKE=40
LIMIT=41
MAPPED=42
MATCH=43
NATURAL=44
NOT=45
NULL=46
ON=47
OPTIMIZED=48
OR=49
ORDER=50
OUTER=51
PARSED=52
PHYSICAL=53
PLAN=54
RIGHT=55
RLIKE=56
QUERY=57
SCHEMAS=58
SELECT=59
SHOW=60
SYS=61
TABLE=62
TABLES=63
TEXT=64
TRUE=65
TYPE=66
TYPES=67
USING=68
VERIFY=69
WHERE=70
WITH=71
ESCAPE_ESC=72
FUNCTION_ESC=73
LIMIT_ESC=74
DATE_ESC=75
TIME_ESC=76
TIMESTAMP_ESC=77
GUID_ESC=78
ESC_END=79
EQ=80
NEQ=81
LT=82
LTE=83
GT=84
GTE=85
PLUS=86
MINUS=87
ASTERISK=88
SLASH=89
PERCENT=90
CONCAT=91
DOT=92
PARAM=93
STRING=94
INTEGER_VALUE=95
DECIMAL_VALUE=96
IDENTIFIER=97
DIGIT_IDENTIFIER=98
TABLE_IDENTIFIER=99
QUOTED_IDENTIFIER=100
BACKQUOTED_IDENTIFIER=101
SIMPLE_COMMENT=102
BRACKETED_COMMENT=103
WS=104
UNRECOGNIZED=105
DELIMITER=106
FIRST=28
FORMAT=29
FROM=30
FULL=31
FUNCTIONS=32
GRAPHVIZ=33
GROUP=34
HAVING=35
IN=36
INNER=37
IS=38
JOIN=39
LAST=40
LEFT=41
LIKE=42
LIMIT=43
MAPPED=44
MATCH=45
NATURAL=46
NOT=47
NULL=48
NULLS=49
ON=50
OPTIMIZED=51
OR=52
ORDER=53
OUTER=54
PARSED=55
PHYSICAL=56
PLAN=57
RIGHT=58
RLIKE=59
QUERY=60
SCHEMAS=61
SELECT=62
SHOW=63
SYS=64
TABLE=65
TABLES=66
TEXT=67
TRUE=68
TYPE=69
TYPES=70
USING=71
VERIFY=72
WHERE=73
WITH=74
ESCAPE_ESC=75
FUNCTION_ESC=76
LIMIT_ESC=77
DATE_ESC=78
TIME_ESC=79
TIMESTAMP_ESC=80
GUID_ESC=81
ESC_END=82
EQ=83
NEQ=84
LT=85
LTE=86
GT=87
GTE=88
PLUS=89
MINUS=90
ASTERISK=91
SLASH=92
PERCENT=93
CONCAT=94
DOT=95
PARAM=96
STRING=97
INTEGER_VALUE=98
DECIMAL_VALUE=99
IDENTIFIER=100
DIGIT_IDENTIFIER=101
TABLE_IDENTIFIER=102
QUOTED_IDENTIFIER=103
BACKQUOTED_IDENTIFIER=104
SIMPLE_COMMENT=105
BRACKETED_COMMENT=106
WS=107
UNRECOGNIZED=108
DELIMITER=109
'('=1
')'=2
','=3
Expand Down Expand Up @@ -131,68 +134,71 @@ DELIMITER=106
'EXPLAIN'=25
'EXTRACT'=26
'FALSE'=27
'FORMAT'=28
'FROM'=29
'FULL'=30
'FUNCTIONS'=31
'GRAPHVIZ'=32
'GROUP'=33
'HAVING'=34
'IN'=35
'INNER'=36
'IS'=37
'JOIN'=38
'LEFT'=39
'LIKE'=40
'LIMIT'=41
'MAPPED'=42
'MATCH'=43
'NATURAL'=44
'NOT'=45
'NULL'=46
'ON'=47
'OPTIMIZED'=48
'OR'=49
'ORDER'=50
'OUTER'=51
'PARSED'=52
'PHYSICAL'=53
'PLAN'=54
'RIGHT'=55
'RLIKE'=56
'QUERY'=57
'SCHEMAS'=58
'SELECT'=59
'SHOW'=60
'SYS'=61
'TABLE'=62
'TABLES'=63
'TEXT'=64
'TRUE'=65
'TYPE'=66
'TYPES'=67
'USING'=68
'VERIFY'=69
'WHERE'=70
'WITH'=71
'{ESCAPE'=72
'{FN'=73
'{LIMIT'=74
'{D'=75
'{T'=76
'{TS'=77
'{GUID'=78
'}'=79
'='=80
'<'=82
'<='=83
'>'=84
'>='=85
'+'=86
'-'=87
'*'=88
'/'=89
'%'=90
'||'=91
'.'=92
'?'=93
'FIRST'=28
'FORMAT'=29
'FROM'=30
'FULL'=31
'FUNCTIONS'=32
'GRAPHVIZ'=33
'GROUP'=34
'HAVING'=35
'IN'=36
'INNER'=37
'IS'=38
'JOIN'=39
'LAST'=40
'LEFT'=41
'LIKE'=42
'LIMIT'=43
'MAPPED'=44
'MATCH'=45
'NATURAL'=46
'NOT'=47
'NULL'=48
'NULLS'=49
'ON'=50
'OPTIMIZED'=51
'OR'=52
'ORDER'=53
'OUTER'=54
'PARSED'=55
'PHYSICAL'=56
'PLAN'=57
'RIGHT'=58
'RLIKE'=59
'QUERY'=60
'SCHEMAS'=61
'SELECT'=62
'SHOW'=63
'SYS'=64
'TABLE'=65
'TABLES'=66
'TEXT'=67
'TRUE'=68
'TYPE'=69
'TYPES'=70
'USING'=71
'VERIFY'=72
'WHERE'=73
'WITH'=74
'{ESCAPE'=75
'{FN'=76
'{LIMIT'=77
'{D'=78
'{T'=79
'{TS'=80
'{GUID'=81
'}'=82
'='=83
'<'=85
'<='=86
'>'=87
'>='=88
'+'=89
'-'=90
'*'=91
'/'=92
'%'=93
'||'=94
'.'=95
'?'=96
Loading

0 comments on commit 52104aa

Please sign in to comment.