diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/HiveLexer.g ql/src/java/org/apache/hadoop/hive/ql/parse/HiveLexer.g index 43ad7dd632..7a63cc4159 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/HiveLexer.g +++ ql/src/java/org/apache/hadoop/hive/ql/parse/HiveLexer.g @@ -126,6 +126,7 @@ KW_SMALLINT: 'SMALLINT'; KW_INT: 'INT' | 'INTEGER'; KW_BIGINT: 'BIGINT'; KW_FLOAT: 'FLOAT'; +KW_REAL: 'REAL'; KW_DOUBLE: 'DOUBLE'; KW_PRECISION: 'PRECISION'; KW_DATE: 'DATE'; diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g index 324c80487e..75a25d5147 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g +++ ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g @@ -123,6 +123,7 @@ TOK_INT; TOK_BIGINT; TOK_BOOLEAN; TOK_FLOAT; +TOK_REAL; TOK_DOUBLE; TOK_DATE; TOK_DATELITERAL; @@ -517,6 +518,7 @@ import org.apache.hadoop.hive.conf.HiveConf; xlateMap.put("KW_INT", "INT"); xlateMap.put("KW_BIGINT", "BIGINT"); xlateMap.put("KW_FLOAT", "FLOAT"); + xlateMap.put("KW_REAL", "REAL"); xlateMap.put("KW_DOUBLE", "DOUBLE"); xlateMap.put("KW_PRECISION", "PRECISION"); xlateMap.put("KW_DATE", "DATE"); @@ -2522,6 +2524,7 @@ primitiveType | KW_BIGINT -> TOK_BIGINT | KW_BOOLEAN -> TOK_BOOLEAN | KW_FLOAT -> TOK_FLOAT + | KW_REAL -> TOK_FLOAT | KW_DOUBLE KW_PRECISION? -> TOK_DOUBLE | KW_DATE -> TOK_DATE | KW_DATETIME -> TOK_DATETIME diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/IdentifiersParser.g ql/src/java/org/apache/hadoop/hive/ql/parse/IdentifiersParser.g index 7dc6146c9e..9e43ad557d 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/IdentifiersParser.g +++ ql/src/java/org/apache/hadoop/hive/ql/parse/IdentifiersParser.g @@ -721,6 +721,7 @@ sysFuncNames | KW_INT | KW_BIGINT | KW_FLOAT + | KW_REAL | KW_DOUBLE | KW_BOOLEAN | KW_STRING @@ -844,5 +845,5 @@ nonReserved //The following SQL2011 reserved keywords are used as function name only, but not as identifiers. sql11ReservedKeywordsUsedAsFunctionName : - KW_IF | KW_ARRAY | KW_MAP | KW_BIGINT | KW_BINARY | KW_BOOLEAN | KW_CURRENT_DATE | KW_CURRENT_TIMESTAMP | KW_DATE | KW_DOUBLE | KW_FLOAT | KW_GROUPING | KW_INT | KW_SMALLINT | KW_TIMESTAMP + KW_IF | KW_ARRAY | KW_MAP | KW_BIGINT | KW_BINARY | KW_BOOLEAN | KW_CURRENT_DATE | KW_CURRENT_TIMESTAMP | KW_DATE | KW_DOUBLE | KW_FLOAT | KW_REAL | KW_GROUPING | KW_INT | KW_SMALLINT | KW_TIMESTAMP ; diff --git ql/src/test/org/apache/hadoop/hive/ql/parse/TestSQL11ReservedKeyWordsNegative.java ql/src/test/org/apache/hadoop/hive/ql/parse/TestSQL11ReservedKeyWordsNegative.java index 2ad2990ee0..ea0f4d668a 100644 --- ql/src/test/org/apache/hadoop/hive/ql/parse/TestSQL11ReservedKeyWordsNegative.java +++ ql/src/test/org/apache/hadoop/hive/ql/parse/TestSQL11ReservedKeyWordsNegative.java @@ -35,7 +35,7 @@ * ,BOOLEAN,BOTH,BY,CONSTRAINT * ,CREATE,CUBE,CURRENT_DATE,CURRENT_TIMESTAMP,CURSOR, * DATE,DECIMAL,DELETE,DESCRIBE - * ,DOUBLE,DROP,EXISTS,EXTERNAL,FALSE,FETCH,FLOAT,FOR + * ,DOUBLE,DROP,EXISTS,EXTERNAL,FALSE,FETCH,FLOAT,REAL,FOR * ,FOREIGN,FULL,GRANT,GROUP,GROUPING * ,IMPORT,IN,INNER,INSERT,INT,INTERSECT,INTO,IS * ,LATERAL,LEFT,LIKE,LOCAL,MINUS,NONE,NULL @@ -435,6 +435,17 @@ public void testSQL11ReservedKeyWords_FLOAT() { } } + @Test + public void testSQL11ReservedKeyWords_REAL() { + try { + parse("CREATE TABLE REAL (col STRING)"); + Assert.assertFalse("Expected ParseException", true); + } catch (ParseException ex) { + Assert.assertEquals("Failure didn't match.", + "line 1:13 cannot recognize input near 'REAL' '(' 'col' in table name", ex.getMessage()); + } + } + @Test public void testSQL11ReservedKeyWords_FOR() { try { diff --git ql/src/test/queries/clientpositive/real.q ql/src/test/queries/clientpositive/real.q new file mode 100644 index 0000000000..bdc5ff8888 --- /dev/null +++ ql/src/test/queries/clientpositive/real.q @@ -0,0 +1,2 @@ +create table realtype (a real, b real); +describe realtype; \ No newline at end of file diff --git ql/src/test/results/clientpositive/real.q.out ql/src/test/results/clientpositive/real.q.out new file mode 100644 index 0000000000..0a72fba392 --- /dev/null +++ ql/src/test/results/clientpositive/real.q.out @@ -0,0 +1,16 @@ +PREHOOK: query: create table realtype (a real, b real) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@realtype +POSTHOOK: query: create table realtype (a real, b real) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@realtype +PREHOOK: query: describe realtype +PREHOOK: type: DESCTABLE +PREHOOK: Input: default@realtype +POSTHOOK: query: describe realtype +POSTHOOK: type: DESCTABLE +POSTHOOK: Input: default@realtype +a float +b float