support encoding grammar in old planner
diff --git a/fe/fe-core/src/main/cup/sql_parser.cup b/fe/fe-core/src/main/cup/sql_parser.cup
index 8abddcc..5c27604 100644
--- a/fe/fe-core/src/main/cup/sql_parser.cup
+++ b/fe/fe-core/src/main/cup/sql_parser.cup
@@ -375,6 +375,7 @@
     KW_DYNAMIC,
     KW_ELSE,
     KW_ENABLE,
+    KW_ENCODING,
     KW_ENCRYPTKEY,
     KW_ENCRYPTKEYS,
     KW_END,
@@ -809,6 +810,8 @@
 nonterminal List<TypeDef> type_def_list, type_def_nullable_list;
 nonterminal FunctionArgsDef func_args_def;
 nonterminal Type type;
+nonterminal ScalarType scalar_type;
+nonterminal String opt_encoding;
 nonterminal Expr cast_expr, case_else_clause, analytic_expr;
 nonterminal LiteralExpr literal;
 nonterminal CaseExpr case_expr;
@@ -6883,7 +6886,18 @@
   {: RESULT = new LimitElement(offset.longValue(), limit.longValue()); :}
   ;
 
-type ::=
+opt_encoding ::=
+    /* empty */
+    {:
+        RESULT = "";
+    :}
+    | KW_ENCODING STRING_LITERAL:encoding
+    {:
+        RESULT = encoding;
+    :}
+    ;
+
+scalar_type ::=
   KW_TINYINT opt_field_length
   {: RESULT = Type.TINYINT; :}
   | KW_SMALLINT opt_field_length
@@ -6953,12 +6967,6 @@
   {: RESULT = ScalarType.createVarcharType(-1); :}
   | KW_VARCHAR
   {: RESULT = ScalarType.createVarcharType(-1); :}
-  | KW_ARRAY LESSTHAN type:value_type GREATERTHAN
-  {: RESULT = new ArrayType(value_type); :}
-  | KW_MAP LESSTHAN type:key_type COMMA type:value_type GREATERTHAN
-  {: RESULT = new MapType(key_type,value_type); :}
-  | KW_STRUCT LESSTHAN struct_field_list:fields GREATERTHAN
-  {: RESULT = new StructType(fields); :}
   | KW_CHAR LPAREN INTEGER_LITERAL:len RPAREN
   {: ScalarType type = ScalarType.createCharType(len.intValue());
      RESULT = type;
@@ -7003,15 +7011,26 @@
   {: ScalarType type = ScalarType.createHllType();
      RESULT = type;
   :}
+  | KW_ALL
+  {: RESULT = Type.ALL; :}
+  ;
+
+type ::=
+  // ignore encoding in old planner
+  scalar_type:scalaType opt_encoding:encoding
+  {: RESULT = scalaType; :}
+  | KW_ARRAY LESSTHAN type:value_type GREATERTHAN
+  {: RESULT = new ArrayType(value_type); :}
+  | KW_MAP LESSTHAN type:key_type COMMA type:value_type GREATERTHAN
+  {: RESULT = new MapType(key_type,value_type); :}
+  | KW_STRUCT LESSTHAN struct_field_list:fields GREATERTHAN
+  {: RESULT = new StructType(fields); :}
   | KW_AGG_STATE LESSTHAN IDENT:fnName LPAREN type_def_nullable_list:list RPAREN GREATERTHAN
   {:
     RESULT = Expr.createAggStateType(fnName,
             list.stream().map(TypeDef::getType).collect(Collectors.toList()),
             list.stream().map(TypeDef::getNullable).collect(Collectors.toList()));
   :}
-  | KW_ALL
-  {: RESULT = Type.ALL; :}
-  ;
 
 opt_field_length ::=
   LPAREN INTEGER_LITERAL:length RPAREN
@@ -8548,6 +8567,8 @@
     | time_unit:id
     {: RESULT = id; :}
     | KW_ENABLE:id
+    | KW_ENCODING:id
+    {: RESULT = id; :}
     {: RESULT = id; :}
     | KW_FEATURE:id
     {: RESULT = id; :}
diff --git a/fe/fe-core/src/main/jflex/sql_scanner.flex b/fe/fe-core/src/main/jflex/sql_scanner.flex
index 9903675..5a2f594 100644
--- a/fe/fe-core/src/main/jflex/sql_scanner.flex
+++ b/fe/fe-core/src/main/jflex/sql_scanner.flex
@@ -215,6 +215,7 @@
         keywordMap.put("dynamic", new Integer(SqlParserSymbols.KW_DYNAMIC));
         keywordMap.put("else", new Integer(SqlParserSymbols.KW_ELSE));
         keywordMap.put("enable", new Integer(SqlParserSymbols.KW_ENABLE));
+        keywordMap.put("encoding", new Integer(SqlParserSymbols.KW_ENCODING));
         keywordMap.put("encryptkey", new Integer(SqlParserSymbols.KW_ENCRYPTKEY));
         keywordMap.put("encryptkeys", new Integer(SqlParserSymbols.KW_ENCRYPTKEYS));
         keywordMap.put("end", new Integer(SqlParserSymbols.KW_END));