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

Reply via email to