Revert "[SPARK-28310][SQL] Support (FIRST_VALUE|LAST_VALUE)(expr[ (IGNORE|RESPECT) NULLS]?) syntax"

### What changes were proposed in this pull request?

This reverts commit b89c3de1a4.

### Why are the changes needed?

`FIRST_VALUE` is used only for window expression. Please see the discussion on https://github.com/apache/spark/pull/25082 .

### Does this PR introduce any user-facing change?

Yes.

### How was this patch tested?

Pass the Jenkins.

Closes #27458 from dongjoon-hyun/SPARK-28310.

Authored-by: Dongjoon Hyun <dhyun@apple.com>
Signed-off-by: Dongjoon Hyun <dhyun@apple.com>
This commit is contained in:
Dongjoon Hyun 2020-02-04 17:26:46 -08:00
parent 7631275f97
commit 898716980d
4 changed files with 2 additions and 26 deletions

View file

@ -119,7 +119,6 @@ Below is a list of all the keywords in Spark SQL.
<tr><td>FILTER</td><td>reserved</td><td>non-reserved</td><td>reserved</td></tr>
<tr><td>FILEFORMAT</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
<tr><td>FIRST</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
<tr><td>FIRST_VALUE</td><td>reserved</td><td>non-reserved</td><td>reserved</td></tr>
<tr><td>FOLLOWING</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
<tr><td>FOR</td><td>reserved</td><td>non-reserved</td><td>reserved</td></tr>
<tr><td>FOREIGN</td><td>reserved</td><td>non-reserved</td><td>reserved</td></tr>
@ -153,7 +152,6 @@ Below is a list of all the keywords in Spark SQL.
<tr><td>JOIN</td><td>reserved</td><td>strict-non-reserved</td><td>reserved</td></tr>
<tr><td>KEYS</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
<tr><td>LAST</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
<tr><td>LAST_VALUE</td><td>reserved</td><td>non-reserved</td><td>reserved</td></tr>
<tr><td>LATERAL</td><td>non-reserved</td><td>non-reserved</td><td>reserved</td></tr>
<tr><td>LAZY</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
<tr><td>LEADING</td><td>reserved</td><td>non-reserved</td><td>reserved</td></tr>
@ -221,7 +219,6 @@ Below is a list of all the keywords in Spark SQL.
<tr><td>REPAIR</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
<tr><td>REPLACE</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
<tr><td>RESET</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
<tr><td>RESPECT</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
<tr><td>RESTRICT</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
<tr><td>REVOKE</td><td>non-reserved</td><td>non-reserved</td><td>reserved</td></tr>
<tr><td>RIGHT</td><td>reserved</td><td>strict-non-reserved</td><td>reserved</td></tr>

View file

@ -771,8 +771,8 @@ primaryExpression
| CASE value=expression whenClause+ (ELSE elseExpression=expression)? END #simpleCase
| CAST '(' expression AS dataType ')' #cast
| STRUCT '(' (argument+=namedExpression (',' argument+=namedExpression)*)? ')' #struct
| (FIRST | FIRST_VALUE) '(' expression ((IGNORE | RESPECT) NULLS)? ')' #first
| (LAST | LAST_VALUE) '(' expression ((IGNORE | RESPECT) NULLS)? ')' #last
| FIRST '(' expression (IGNORE NULLS)? ')' #first
| LAST '(' expression (IGNORE NULLS)? ')' #last
| POSITION '(' substr=valueExpression IN str=valueExpression ')' #position
| constant #constantDefault
| ASTERISK #star
@ -1120,7 +1120,6 @@ ansiNonReserved
| REPAIR
| REPLACE
| RESET
| RESPECT
| RESTRICT
| REVOKE
| RLIKE
@ -1280,7 +1279,6 @@ nonReserved
| FIELDS
| FILEFORMAT
| FIRST
| FIRST_VALUE
| FOLLOWING
| FOR
| FOREIGN
@ -1310,7 +1308,6 @@ nonReserved
| ITEMS
| KEYS
| LAST
| LAST_VALUE
| LATERAL
| LAZY
| LEADING
@ -1374,7 +1371,6 @@ nonReserved
| REPAIR
| REPLACE
| RESET
| RESPECT
| RESTRICT
| REVOKE
| RLIKE
@ -1531,7 +1527,6 @@ FIELDS: 'FIELDS';
FILTER: 'FILTER';
FILEFORMAT: 'FILEFORMAT';
FIRST: 'FIRST';
FIRST_VALUE: 'FIRST_VALUE';
FOLLOWING: 'FOLLOWING';
FOR: 'FOR';
FOREIGN: 'FOREIGN';
@ -1565,7 +1560,6 @@ ITEMS: 'ITEMS';
JOIN: 'JOIN';
KEYS: 'KEYS';
LAST: 'LAST';
LAST_VALUE: 'LAST_VALUE';
LATERAL: 'LATERAL';
LAZY: 'LAZY';
LEADING: 'LEADING';
@ -1632,7 +1626,6 @@ RENAME: 'RENAME';
REPAIR: 'REPAIR';
REPLACE: 'REPLACE';
RESET: 'RESET';
RESPECT: 'RESPECT';
RESTRICT: 'RESTRICT';
REVOKE: 'REVOKE';
RIGHT: 'RIGHT';

View file

@ -771,15 +771,6 @@ class ExpressionParserSuite extends AnalysisTest {
assertEqual("last(a)", Last('a, Literal(false)).toAggregateExpression())
}
test("Support respect nulls keywords for first_value and last_value") {
assertEqual("first_value(a ignore nulls)", First('a, Literal(true)).toAggregateExpression())
assertEqual("first_value(a respect nulls)", First('a, Literal(false)).toAggregateExpression())
assertEqual("first_value(a)", First('a, Literal(false)).toAggregateExpression())
assertEqual("last_value(a ignore nulls)", Last('a, Literal(true)).toAggregateExpression())
assertEqual("last_value(a respect nulls)", Last('a, Literal(false)).toAggregateExpression())
assertEqual("last_value(a)", Last('a, Literal(false)).toAggregateExpression())
}
test("timestamp literals") {
DateTimeTestUtils.outstandingTimezones.foreach { timeZone =>
withSQLConf(SQLConf.SESSION_LOCAL_TIMEZONE.key -> timeZone.getID) {

View file

@ -369,7 +369,6 @@ class TableIdentifierParserSuite extends SparkFunSuite with SQLHelper {
"fields",
"fileformat",
"first",
"first_value",
"following",
"for",
"foreign",
@ -403,7 +402,6 @@ class TableIdentifierParserSuite extends SparkFunSuite with SQLHelper {
"join",
"keys",
"last",
"last_value",
"lateral",
"lazy",
"leading",
@ -467,7 +465,6 @@ class TableIdentifierParserSuite extends SparkFunSuite with SQLHelper {
"repair",
"replace",
"reset",
"respect",
"restrict",
"revoke",
"right",
@ -562,7 +559,6 @@ class TableIdentifierParserSuite extends SparkFunSuite with SQLHelper {
"except",
"false",
"fetch",
"first_value",
"for",
"foreign",
"from",
@ -577,7 +573,6 @@ class TableIdentifierParserSuite extends SparkFunSuite with SQLHelper {
"into",
"join",
"is",
"last_value",
"leading",
"left",
"minute",