This is an automated email from the ASF dual-hosted git repository.
jark pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git
The following commit(s) were added to refs/heads/master by this push:
new 10f1962 [FLINK-21847][table] Support DESC as an abbreviation of the
DESCRIBE statement
10f1962 is described below
commit 10f1962f9b06c719485751f36ab8b11f76544d5b
Author: hackergin <[email protected]>
AuthorDate: Sun Mar 21 20:50:34 2021 +0800
[FLINK-21847][table] Support DESC as an abbreviation of the DESCRIBE
statement
This closes #15285
---
.../apache/flink/table/client/cli/CliClient.java | 1 -
.../flink/table/client/cli/SqlCommandParser.java | 2 -
.../table/client/cli/SqlCommandParserTest.java | 10 ++++-
.../src/test/resources/sql/table.q | 19 ++++++++
.../src/main/codegen/includes/parserImpls.ftl | 6 +--
.../parser/hive/FlinkHiveSqlParserImplTest.java | 9 ++++
.../src/main/codegen/includes/parserImpls.ftl | 8 ++--
.../flink/sql/parser/FlinkSqlParserImplTest.java | 10 +++++
.../flink/table/api/TableEnvironmentTest.scala | 50 ++++++++++++----------
.../api/batch/BatchTableEnvironmentTest.scala | 15 ++++---
10 files changed, 89 insertions(+), 41 deletions(-)
diff --git
a/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/CliClient.java
b/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/CliClient.java
index 08c3f4b..962c17e 100644
---
a/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/CliClient.java
+++
b/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/CliClient.java
@@ -310,7 +310,6 @@ public class CliClient implements AutoCloseable {
case USE:
callUseDatabase(cmdCall);
break;
- case DESC:
case DESCRIBE:
callDescribe(cmdCall);
break;
diff --git
a/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/SqlCommandParser.java
b/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/SqlCommandParser.java
index 64ceda9..d27cdab 100644
---
a/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/SqlCommandParser.java
+++
b/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/SqlCommandParser.java
@@ -284,8 +284,6 @@ public final class SqlCommandParser {
DROP_CATALOG,
- DESC("DESC\\s+(.*)", SINGLE_OPERAND),
-
DESCRIBE,
// supports both `explain xx` and `explain plan for xx` now
diff --git
a/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/SqlCommandParserTest.java
b/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/SqlCommandParserTest.java
index 305d40a..ac2ed80 100644
---
a/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/SqlCommandParserTest.java
+++
b/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/SqlCommandParserTest.java
@@ -63,9 +63,15 @@ public class SqlCommandParserTest {
TestItem.validSql("eXiT;",
SqlCommand.QUIT).cannotParseComment(),
TestItem.validSql("CLEAR;",
SqlCommand.CLEAR).cannotParseComment(),
// desc xx
- TestItem.validSql("DESC MyTable", SqlCommand.DESC,
"MyTable")
+ TestItem.validSql(
+ "DESC MyTable",
+ SqlCommand.DESCRIBE,
+
"`default_catalog`.`default_database`.`MyTable`")
.cannotParseComment(),
- TestItem.validSql("DESC MyTable ",
SqlCommand.DESC, "MyTable")
+ TestItem.validSql(
+ "DESC MyTable ",
+ SqlCommand.DESCRIBE,
+
"`default_catalog`.`default_database`.`MyTable`")
.cannotParseComment(),
TestItem.invalidSql(
"DESC ", // no table name
diff --git a/flink-table/flink-sql-client/src/test/resources/sql/table.q
b/flink-table/flink-sql-client/src/test/resources/sql/table.q
index a7a6a4b..bed6fa8 100644
--- a/flink-table/flink-sql-client/src/test/resources/sql/table.q
+++ b/flink-table/flink-sql-client/src/test/resources/sql/table.q
@@ -34,6 +34,11 @@ describe non_exist;
org.apache.flink.table.api.ValidationException: Tables or views with the
identifier 'default_catalog.default_database.non_exist' doesn't exist
!error
+desc non_exist;
+[ERROR] Could not execute SQL statement. Reason:
+org.apache.flink.table.api.ValidationException: Tables or views with the
identifier 'default_catalog.default_database.non_exist' doesn't exist
+!error
+
alter table non_exist rename to non_exist2;
[ERROR] Could not execute SQL statement. Reason:
org.apache.flink.table.api.ValidationException: Table
`default_catalog`.`default_database`.`non_exist` doesn't exist or is a
temporary table.
@@ -98,6 +103,20 @@ describe orders2;
5 rows in set
!ok
+# test desc table
+desc orders2;
++---------+-------------------------+-------+-----------+---------------+----------------------------+
+| name | type | null | key | extras |
watermark |
++---------+-------------------------+-------+-----------+---------------+----------------------------+
+| user | BIGINT | false | PRI(user) | |
|
+| product | VARCHAR(32) | true | | |
|
+| amount | INT | true | | |
|
+| ts | TIMESTAMP(3) *ROWTIME* | true | | | `ts`
- INTERVAL '1' SECOND |
+| ptime | TIMESTAMP(3) *PROCTIME* | false | | AS PROCTIME() |
|
++---------+-------------------------+-------+-----------+---------------+----------------------------+
+5 rows in set
+!ok
+
# ==========================================================================
# test drop table
# ==========================================================================
diff --git
a/flink-table/flink-sql-parser-hive/src/main/codegen/includes/parserImpls.ftl
b/flink-table/flink-sql-parser-hive/src/main/codegen/includes/parserImpls.ftl
index 4866eb0..c39f476 100644
---
a/flink-table/flink-sql-parser-hive/src/main/codegen/includes/parserImpls.ftl
+++
b/flink-table/flink-sql-parser-hive/src/main/codegen/includes/parserImpls.ftl
@@ -171,7 +171,7 @@ SqlDescribeDatabase SqlDescribeDatabase() :
boolean isExtended = false;
}
{
- <DESCRIBE> ( <DATABASE> | <SCHEMA> ) { pos = getPos();}
+ ( <DESCRIBE> | <DESC> ) ( <DATABASE> | <SCHEMA> ) { pos = getPos();}
[ <EXTENDED> { isExtended = true;} ]
databaseName = CompoundIdentifier()
{
@@ -263,7 +263,7 @@ SqlRichDescribeTable SqlRichDescribeTable() :
boolean formatted = false;
}
{
- <DESCRIBE> { pos = getPos();}
+ ( <DESCRIBE> | <DESC> ) { pos = getPos();}
[ LOOKAHEAD(2)
( <EXTENDED> { extended = true; }
|
@@ -1090,7 +1090,7 @@ SqlDescribeCatalog SqlDescribeCatalog() :
SqlParserPos pos;
}
{
- <DESCRIBE> <CATALOG> { pos = getPos();}
+ ( <DESCRIBE> | <DESC> ) <CATALOG> { pos = getPos();}
catalogName = SimpleIdentifier()
{
return new SqlDescribeCatalog(pos, catalogName);
diff --git
a/flink-table/flink-sql-parser-hive/src/test/java/org/apache/flink/sql/parser/hive/FlinkHiveSqlParserImplTest.java
b/flink-table/flink-sql-parser-hive/src/test/java/org/apache/flink/sql/parser/hive/FlinkHiveSqlParserImplTest.java
index 0f5441f..255fc5f 100644
---
a/flink-table/flink-sql-parser-hive/src/test/java/org/apache/flink/sql/parser/hive/FlinkHiveSqlParserImplTest.java
+++
b/flink-table/flink-sql-parser-hive/src/test/java/org/apache/flink/sql/parser/hive/FlinkHiveSqlParserImplTest.java
@@ -100,6 +100,9 @@ public class FlinkHiveSqlParserImplTest extends
SqlParserTest {
public void testDescribeDatabase() {
sql("describe schema db1").ok("DESCRIBE DATABASE `DB1`");
sql("describe database extended db1").ok("DESCRIBE DATABASE EXTENDED
`DB1`");
+
+ sql("desc schema db1").ok("DESCRIBE DATABASE `DB1`");
+ sql("desc database extended db1").ok("DESCRIBE DATABASE EXTENDED
`DB1`");
}
@Test
@@ -114,6 +117,10 @@ public class FlinkHiveSqlParserImplTest extends
SqlParserTest {
sql("describe tbl").ok("DESCRIBE `TBL`");
sql("describe extended tbl").ok("DESCRIBE EXTENDED `TBL`");
sql("describe formatted tbl").ok("DESCRIBE FORMATTED `TBL`");
+
+ sql("desc tbl").ok("DESCRIBE `TBL`");
+ sql("desc extended tbl").ok("DESCRIBE EXTENDED `TBL`");
+ sql("desc formatted tbl").ok("DESCRIBE FORMATTED `TBL`");
}
@Test
@@ -279,6 +286,8 @@ public class FlinkHiveSqlParserImplTest extends
SqlParserTest {
@Test
public void testDescribeCatalog() {
sql("describe catalog cat").ok("DESCRIBE CATALOG `CAT`");
+
+ sql("desc catalog cat").ok("DESCRIBE CATALOG `CAT`");
}
@Test
diff --git
a/flink-table/flink-sql-parser/src/main/codegen/includes/parserImpls.ftl
b/flink-table/flink-sql-parser/src/main/codegen/includes/parserImpls.ftl
index ab8af2f..355176b 100644
--- a/flink-table/flink-sql-parser/src/main/codegen/includes/parserImpls.ftl
+++ b/flink-table/flink-sql-parser/src/main/codegen/includes/parserImpls.ftl
@@ -79,7 +79,7 @@ SqlDescribeCatalog SqlDescribeCatalog() :
SqlParserPos pos;
}
{
- <DESCRIBE> <CATALOG> { pos = getPos();}
+ ( <DESCRIBE> | <DESC> ) <CATALOG> { pos = getPos();}
catalogName = SimpleIdentifier()
{
return new SqlDescribeCatalog(pos, catalogName);
@@ -254,7 +254,7 @@ SqlDescribeDatabase SqlDescribeDatabase() :
boolean isExtended = false;
}
{
- <DESCRIBE> <DATABASE> { pos = getPos();}
+ ( <DESCRIBE> | <DESC> ) <DATABASE> { pos = getPos();}
[ <EXTENDED> { isExtended = true;} ]
databaseName = CompoundIdentifier()
{
@@ -416,7 +416,7 @@ SqlShowTables SqlShowTables() :
}
/**
- * DESCRIBE [ EXTENDED] [[catalogName.] dataBasesName].tableName sql call.
+ * DESCRIBE | DESC [ EXTENDED] [[catalogName.] dataBasesName].tableName sql
call.
* Here we add Rich in className to distinguish from calcite's original
SqlDescribeTable.
*/
SqlRichDescribeTable SqlRichDescribeTable() :
@@ -426,7 +426,7 @@ SqlRichDescribeTable SqlRichDescribeTable() :
boolean isExtended = false;
}
{
- <DESCRIBE> { pos = getPos();}
+ ( <DESCRIBE> | <DESC> ) { pos = getPos();}
[ <EXTENDED> { isExtended = true;} ]
tableName = CompoundIdentifier()
{
diff --git
a/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/FlinkSqlParserImplTest.java
b/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/FlinkSqlParserImplTest.java
index 7c5675d..87b5294 100644
---
a/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/FlinkSqlParserImplTest.java
+++
b/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/FlinkSqlParserImplTest.java
@@ -56,6 +56,8 @@ public class FlinkSqlParserImplTest extends SqlParserTest {
@Test
public void testDescribeCatalog() {
sql("describe catalog a").ok("DESCRIBE CATALOG `A`");
+
+ sql("desc catalog a").ok("DESCRIBE CATALOG `A`");
}
/**
@@ -151,6 +153,10 @@ public class FlinkSqlParserImplTest extends SqlParserTest {
sql("describe database db1").ok("DESCRIBE DATABASE `DB1`");
sql("describe database catlog1.db1").ok("DESCRIBE DATABASE
`CATLOG1`.`DB1`");
sql("describe database extended db1").ok("DESCRIBE DATABASE EXTENDED
`DB1`");
+
+ sql("desc database db1").ok("DESCRIBE DATABASE `DB1`");
+ sql("desc database catlog1.db1").ok("DESCRIBE DATABASE
`CATLOG1`.`DB1`");
+ sql("desc database extended db1").ok("DESCRIBE DATABASE EXTENDED
`DB1`");
}
@Test
@@ -190,6 +196,10 @@ public class FlinkSqlParserImplTest extends SqlParserTest {
sql("describe tbl").ok("DESCRIBE `TBL`");
sql("describe catlog1.db1.tbl").ok("DESCRIBE `CATLOG1`.`DB1`.`TBL`");
sql("describe extended db1").ok("DESCRIBE EXTENDED `DB1`");
+
+ sql("desc tbl").ok("DESCRIBE `TBL`");
+ sql("desc catlog1.db1.tbl").ok("DESCRIBE `CATLOG1`.`DB1`.`TBL`");
+ sql("desc extended db1").ok("DESCRIBE EXTENDED `DB1`");
}
/**
diff --git
a/flink-table/flink-table-planner-blink/src/test/scala/org/apache/flink/table/api/TableEnvironmentTest.scala
b/flink-table/flink-table-planner-blink/src/test/scala/org/apache/flink/table/api/TableEnvironmentTest.scala
index 1d10f07..f635ea0 100644
---
a/flink-table/flink-table-planner-blink/src/test/scala/org/apache/flink/table/api/TableEnvironmentTest.scala
+++
b/flink-table/flink-table-planner-blink/src/test/scala/org/apache/flink/table/api/TableEnvironmentTest.scala
@@ -1323,10 +1323,7 @@ class TableEnvironmentTest {
tableEnv.executeSql(sourceDDL)
tableEnv.executeSql(viewDDL)
- val tableResult1 = tableEnv.executeSql("describe T1")
- assertEquals(ResultKind.SUCCESS_WITH_CONTENT, tableResult1.getResultKind)
- checkData(
- util.Arrays.asList(
+ val expectedResult1 = util.Arrays.asList(
Row.of("f0", "CHAR(10)", Boolean.box(true), null, null, null),
Row.of("f1", "VARCHAR(10)", Boolean.box(true), null, null, null),
Row.of("f2", "STRING", Boolean.box(true), null, null, null),
@@ -1356,19 +1353,24 @@ class TableEnvironmentTest {
Row.of("f26", "ROW<`f0` INT NOT NULL, `f1` INT>", Boolean.box(false),
"PRI(f24, f26)", null, null),
Row.of("ts", "TIMESTAMP(3) *ROWTIME*", Boolean.box(true), null, "AS
TO_TIMESTAMP(`f25`)",
- "`ts` - INTERVAL '1' SECOND")
- ).iterator(),
- tableResult1.collect())
-
- val tableResult2 = tableEnv.executeSql("describe T2")
+ "`ts` - INTERVAL '1' SECOND"))
+ val tableResult1 = tableEnv.executeSql("describe T1")
+ assertEquals(ResultKind.SUCCESS_WITH_CONTENT, tableResult1.getResultKind)
+ checkData(expectedResult1.iterator(), tableResult1.collect())
+ val tableResult2 = tableEnv.executeSql("desc T1")
assertEquals(ResultKind.SUCCESS_WITH_CONTENT, tableResult2.getResultKind)
- checkData(
- util.Arrays.asList(
- Row.of("d", "INT", Boolean.box(false), null, null, null),
- Row.of("e", "STRING", Boolean.box(false), null, null, null),
- Row.of("f", "ROW<`f0` INT NOT NULL, `f1` INT>", Boolean.box(false),
null, null, null)
- ).iterator(),
- tableResult2.collect())
+ checkData(expectedResult1.iterator(), tableResult2.collect())
+
+ val expectedResult2 = util.Arrays.asList(
+ Row.of("d", "INT", Boolean.box(false), null, null, null),
+ Row.of("e", "STRING", Boolean.box(false), null, null, null),
+ Row.of("f", "ROW<`f0` INT NOT NULL, `f1` INT>", Boolean.box(false),
null, null, null))
+ val tableResult3 = tableEnv.executeSql("describe T2")
+ assertEquals(ResultKind.SUCCESS_WITH_CONTENT, tableResult3.getResultKind)
+ checkData(expectedResult2.iterator(), tableResult3.collect())
+ val tableResult4 = tableEnv.executeSql("desc T2")
+ assertEquals(ResultKind.SUCCESS_WITH_CONTENT, tableResult4.getResultKind)
+ checkData(expectedResult2.iterator(), tableResult4.collect())
// temporary view T2(x, y) masks permanent view T2(d, e, f)
val temporaryViewDDL =
@@ -1377,13 +1379,17 @@ class TableEnvironmentTest {
""".stripMargin
tableEnv.executeSql(temporaryViewDDL)
- val tableResult3 = tableEnv.executeSql("describe T2")
- assertEquals(ResultKind.SUCCESS_WITH_CONTENT, tableResult3.getResultKind)
+ val expectedResult3 = util.Arrays.asList(
+ Row.of("x", "INT", Boolean.box(false), null, null, null),
+ Row.of("y", "STRING", Boolean.box(false), null, null, null));
+ val tableResult5 = tableEnv.executeSql("describe T2")
+ assertEquals(ResultKind.SUCCESS_WITH_CONTENT, tableResult5.getResultKind)
+ checkData(expectedResult3.iterator(), tableResult5.collect())
+ val tableResult6 = tableEnv.executeSql("desc T2")
+ assertEquals(ResultKind.SUCCESS_WITH_CONTENT, tableResult6.getResultKind)
checkData(
- util.Arrays.asList(
- Row.of("x", "INT", Boolean.box(false), null, null, null),
- Row.of("y", "STRING", Boolean.box(false), null, null,
null)).iterator(),
- tableResult3.collect())
+ expectedResult3.iterator(),
+ tableResult6.collect())
}
private def checkData(expected: util.Iterator[Row], actual:
util.Iterator[Row]): Unit = {
diff --git
a/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/api/batch/BatchTableEnvironmentTest.scala
b/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/api/batch/BatchTableEnvironmentTest.scala
index 9919f4c..83430b8 100644
---
a/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/api/batch/BatchTableEnvironmentTest.scala
+++
b/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/api/batch/BatchTableEnvironmentTest.scala
@@ -564,15 +564,16 @@ class BatchTableEnvironmentTest extends TableTestBase {
val tableResult1 = testUtil.tableEnv.executeSql(createTableStmt)
assertEquals(ResultKind.SUCCESS, tableResult1.getResultKind)
+ val expectedResult = java.util.Arrays.asList(
+ Row.of("a", "BIGINT", Boolean.box(true), null, null, null),
+ Row.of("b", "INT", Boolean.box(true), null, null, null),
+ Row.of("c", "STRING", Boolean.box(true), null, null, null))
val tableResult2 = testUtil.tableEnv.executeSql("DESCRIBE tbl1")
assertEquals(ResultKind.SUCCESS_WITH_CONTENT, tableResult2.getResultKind)
- checkData(
- java.util.Arrays.asList(
- Row.of("a", "BIGINT", Boolean.box(true), null, null, null),
- Row.of("b", "INT", Boolean.box(true), null, null, null),
- Row.of("c", "STRING", Boolean.box(true), null, null, null)
- ).iterator(),
- tableResult2.collect())
+ checkData(expectedResult.iterator(), tableResult2.collect())
+ val tableResult3 = testUtil.tableEnv.executeSql("DESC tbl1")
+ assertEquals(ResultKind.SUCCESS_WITH_CONTENT, tableResult3.getResultKind)
+ checkData(expectedResult.iterator(), tableResult3.collect())
}
@Test