Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,52 +22,65 @@
// which is also demostrated in
// http://dev.mysql.com/doc/internals/en/com-query-response.html
public enum MysqlColType {
MYSQL_TYPE_DECIMAL(0, "DECIMAL"),
MYSQL_TYPE_TINY(1, "TINY INT"),
MYSQL_TYPE_SHORT(2, "SMALL INT"),
MYSQL_TYPE_LONG(3, "INT"),
MYSQL_TYPE_FLOAT(4, "FLOAT"),
MYSQL_TYPE_DOUBLE(5, "DOUBLE"),
MYSQL_TYPE_NULL(6, "NULL"),
MYSQL_TYPE_TIMESTAMP(7, "TIMESTAMP"),
MYSQL_TYPE_LONGLONG(8, "LONGLONG"),
MYSQL_TYPE_INT24(9, "INT24"),
MYSQL_TYPE_DATE(10, "DATE"),
MYSQL_TYPE_TIME(11, "TIME"),
MYSQL_TYPE_DATETIME(12, "DATETIME"),
MYSQL_TYPE_YEAR(13, "YEAR"),
MYSQL_TYPE_NEWDATE(14, "NEWDATE"),
MYSQL_TYPE_VARCHAR(15, "VARCHAR"),
MYSQL_TYPE_BIT(16, "BIT"),
MYSQL_TYPE_TIMESTAMP2(17, "TIMESTAMP2"),
MYSQL_TYPE_DATETIME2(18, "DATETIME2"),
MYSQL_TYPE_TIME2(19, "TIME2"),
MYSQL_TYPE_JSON(245, "JSON"),
MYSQL_TYPE_NEWDECIMAL(246, "NEW DECIMAL"),
MYSQL_TYPE_ENUM(247, "ENUM"),
MYSQL_TYPE_SET(248, "SET"),
MYSQL_TYPE_TINY_BLOB(249, "TINY BLOB"),
MYSQL_TYPE_MEDIUM_BLOB(250, "MEDIUM BLOB"),
MYSQL_TYPE_LONG_BLOB(251, "LONG BLOB"),
MYSQL_TYPE_BLOB(252, "BLOB"),
MYSQL_TYPE_VARSTRING(253, "VAR STRING"),
MYSQL_TYPE_STRING(254, "STRING"),
MYSQL_TYPE_GEOMETRY(255, "GEOMETRY"),
MYSQL_TYPE_MAP(400, "MAP");
MYSQL_TYPE_DECIMAL(0, "DECIMAL", "DECIMAL"),
MYSQL_TYPE_TINY(1, "TINY INT", "TINYINT"),
MYSQL_TYPE_SHORT(2, "SMALL INT", "SMALLINT"),
MYSQL_TYPE_LONG(3, "INT", "INTEGER"),
MYSQL_TYPE_FLOAT(4, "FLOAT", "FLOAT"),
MYSQL_TYPE_DOUBLE(5, "DOUBLE", "DOUBLE"),
MYSQL_TYPE_NULL(6, "NULL", "NULL"),
MYSQL_TYPE_TIMESTAMP(7, "TIMESTAMP", "TIMESTAMP"),
MYSQL_TYPE_LONGLONG(8, "LONGLONG", "BIGINT"),
MYSQL_TYPE_INT24(9, "INT24", "INT24"),
MYSQL_TYPE_DATE(10, "DATE", "DATE"),
MYSQL_TYPE_TIME(11, "TIME", "TIME"),
MYSQL_TYPE_DATETIME(12, "DATETIME", "DATETIME"),
MYSQL_TYPE_YEAR(13, "YEAR", "YEAR"),
MYSQL_TYPE_NEWDATE(14, "NEWDATE", "NEWDATE"),
MYSQL_TYPE_VARCHAR(15, "VARCHAR", "VARCHAR"),
MYSQL_TYPE_BIT(16, "BIT", "BIT"),
MYSQL_TYPE_TIMESTAMP2(17, "TIMESTAMP2", "TIMESTAMP2"),
MYSQL_TYPE_DATETIME2(18, "DATETIME2", "DATETIME2"),
MYSQL_TYPE_TIME2(19, "TIME2", "TIME2"),
MYSQL_TYPE_JSON(245, "JSON", "JSON"),
MYSQL_TYPE_NEWDECIMAL(246, "NEW DECIMAL", "NEWDECIMAL"),
MYSQL_TYPE_ENUM(247, "ENUM", "CHAR"),
MYSQL_TYPE_SET(248, "SET", "CHAR"),
MYSQL_TYPE_TINY_BLOB(249, "TINY BLOB", "TINYBLOB"),
MYSQL_TYPE_MEDIUM_BLOB(250, "MEDIUM BLOB", "MEDIUMBLOB"),
MYSQL_TYPE_LONG_BLOB(251, "LONG BLOB", "LONGBLOB"),
MYSQL_TYPE_BLOB(252, "BLOB", "BLOB"),
MYSQL_TYPE_VARSTRING(253, "VAR STRING", "VARSTRING"),
MYSQL_TYPE_STRING(254, "STRING", "CHAR"),
MYSQL_TYPE_GEOMETRY(255, "GEOMETRY", "GEOMETRY"),
MYSQL_TYPE_MAP(400, "MAP", "MAP");

private MysqlColType(int code, String desc) {
private MysqlColType(int code, String desc, String jdbcColumnTypeName) {
this.code = code;
this.desc = desc;
this.jdbcColumnTypeName = jdbcColumnTypeName;
}

// used in network
private int code;

// for debug, string description of mysql column type code.
private String desc;

// MysqlTypeName to JdbcColumnTypeName, refer to:
// https://dev.mysql.com/doc/connector-j/en/connector-j-reference-type-conversions.html
// In plsql/Var.defineType(), Plsql Var type will be found through the Mysql type name string.
// TODO, supports the correspondence between Doris type and Plsql Var.
private final String jdbcColumnTypeName;

public int getCode() {
return code;
}

public String getJdbcColumnTypeName() {
return jdbcColumnTypeName;
}

@Override
public String toString() {
return desc;
Expand Down
7 changes: 6 additions & 1 deletion fe/fe-core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -887,7 +887,12 @@ under the License.
<configuration>
<visitor>true</visitor>
<sourceDirectory>src/main/antlr4</sourceDirectory>
<treatWarningsAsErrors>true</treatWarningsAsErrors>
<!-->import DorisParser in PLParser.g4 will prompt warning options { tokenVocab = DorisLexer; }
ignored, this is expected behavior, antlr/antlr4#2209, hope to ignore this warning alone,
but it seems that can only delete this treatWarningsAsErrors.
Other warnings should not be ignored.<-->
<!--<treatWarningsAsErrors>true</treatWarningsAsErrors>-->
<libDirectory>src/main/antlr4/org/apache/doris/nereids</libDirectory>
</configuration>
</plugin>
<!-- jmockit -->
Expand Down
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we going to support this feature only with nereid planner? no plans to support with legacy planner?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, only supports nereids planner.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok, legacy planner will be supported later?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No plans at the moment, do you need to use legacy planner?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was wondering how grammers can be merged in case of legacy planner as sql statements are defined using cup file

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

actually, it's easy. legacy planner only needs to forward the original SQL of create procedure stmt and call stmt to PlSqlOperation for execution.

However, many new features only supported in the nereids planner, and it seems unnecessary to support the legacy planner.

Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,12 @@ singleStatement
;

statement
: statementBase # statementBaseAlias
| CALL name=multipartIdentifier LEFT_PAREN (expression (COMMA expression)*)? RIGHT_PAREN #callProcedure
| (ALTER | CREATE (OR REPLACE)? | REPLACE) (PROCEDURE | PROC) name=multipartIdentifier LEFT_PAREN .*? RIGHT_PAREN .*? #createProcedure
;

statementBase
: explain? query outFileClause? #statementDefault
| CREATE ROW POLICY (IF NOT EXISTS)? name=identifier
ON table=multipartIdentifier
Expand Down Expand Up @@ -103,7 +109,6 @@ statement
| ALTER TABLE table=multipartIdentifier
DROP CONSTRAINT constraintName=errorCapturingIdentifier #dropConstraint
| SHOW CONSTRAINTS FROM table=multipartIdentifier #showConstraint
| CALL functionName=identifier LEFT_PAREN (expression (COMMA expression)*)? RIGHT_PAREN #callProcedure
;

constraint
Expand Down
216 changes: 216 additions & 0 deletions fe/fe-core/src/main/antlr4/org/apache/doris/nereids/PLLexer.g4
Original file line number Diff line number Diff line change
@@ -0,0 +1,216 @@
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
// https://github.com/apache/hive/blob/master/hplsql/src/main/antlr4/org/apache/hive/hplsql/HPlsql.g4
// and modified by Doris

lexer grammar PLLexer;

// Notice: If syntax parser fails and the exception error is lexer token mismatch,
// check whether have conflict between PLLexer and DorisLexer,
// or the PLLexer.tokens file is not updated.
import DorisLexer;

// Lexer rules
ACTION: 'ACTION';
ALLOCATE: 'ALLOCATE';
ANSI_NULLS: 'ANSI_NULLS';
ANSI_PADDING: 'ANSI_PADDING';
ASSOCIATE: 'ASSOCIATE';
AVG: 'AVG';
BATCHSIZE: 'BATCHSIZE';
BINARY_DOUBLE: 'BINARY_DOUBLE';
BINARY_FLOAT: 'BINARY_FLOAT';
BINARY_INTEGER: 'BINARY_INTEGER';
BIT: 'BIT';
BODY: 'BODY';
BREAK: 'BREAK';
BULK: 'BULK';
BYTE: 'BYTE';
CALLER: 'CALLER';
CASCADE: 'CASCADE';
CASESPECIFIC: 'CASESPECIFIC';
CLIENT: 'CLIENT';
CLOSE: 'CLOSE';
CLUSTERED: 'CLUSTERED';
CMP: 'CMP';
COLLECT: 'COLLECT';
COLLECTION: 'COLLECTION';
COMPRESS: 'COMPRESS';
CONCAT: 'CONCAT';
CONDITION: 'CONDITION';
CONSTANT: 'CONSTANT';
CONTINUE: 'CONTINUE';
COUNT_BIG: 'COUNT_BIG';
CREATOR: 'CREATOR';
CS: 'CS';
CURRENT_SCHEMA: 'CURRENT_SCHEMA';
CURSOR: 'CURSOR';
DAYS: 'DAYS';
DEC: 'DEC';
DECLARE: 'DECLARE';
DEFINED: 'DEFINED';
DEFINER: 'DEFINER';
DEFINITION: 'DEFINITION';
DELIMITED: 'DELIMITED';
DELIMITER: 'DELIMITER';
DIAGNOSTICS: 'DIAGNOSTICS';
DIR: 'DIR';
DIRECTORY: 'DIRECTORY';
DISTRIBUTE: 'DISTRIBUTE';
ELSEIF: 'ELSEIF';
ELSIF: 'ELSIF';
ESCAPED: 'ESCAPED';
EXEC: 'EXEC';
EXCEPTION: 'EXCEPTION';
EXCLUSIVE: 'EXCLUSIVE';
EXIT: 'EXIT';
FALLBACK: 'FALLBACK';
FETCH: 'FETCH';
FILES: 'FILES';
FOUND: 'FOUND';
GET: 'GET';
GO: 'GO';
HANDLER: 'HANDLER';
HOST: 'HOST';
IDENTITY: 'IDENTITY';
INCLUDE: 'INCLUDE';
INITRANS: 'INITRANS';
INOUT: 'INOUT';
INT2: 'INT2';
INT4: 'INT4';
INT8: 'INT8';
INVOKER: 'INVOKER';
ISOPEN: 'ISOPEN';
ITEMS: 'ITEMS';
KEEP: 'KEEP';
LANGUAGE: 'LANGUAGE';
LEAVE: 'LEAVE';
LOCATOR: 'LOCATOR';
LOCATORS: 'LOCATORS';
LOCKS: 'LOCKS';
LOG: 'LOG';
LOGGED: 'LOGGED';
LOGGING: 'LOGGING';
LOOP: 'LOOP';
MATCHED: 'MATCHED';
MAXTRANS: 'MAXTRANS';
MESSAGE_TEXT: 'MESSAGE_TEXT';
MICROSECOND: 'MICROSECOND';
MICROSECONDS: 'MICROSECONDS';
MULTISET: 'MULTISET';
NCHAR: 'NCHAR';
NEW: 'NEW';
NVARCHAR: 'NVARCHAR';
NOCOUNT: 'NOCOUNT';
NOCOMPRESS: 'NOCOMPRESS';
NOLOGGING: 'NOLOGGING';
NONE: 'NONE';
NOTFOUND: 'NOTFOUND';
NUMERIC: 'NUMERIC';
NUMBER: 'NUMBER';
OBJECT: 'OBJECT';
OFF: 'OFF';
OUT: 'OUT';
OWNER: 'OWNER';
PACKAGE: 'PACKAGE';
PCTFREE: 'PCTFREE';
PCTUSED: 'PCTUSED';
PLS_INTEGER: 'PLS_INTEGER';
PRECISION: 'PRECISION';
PRESERVE: 'PRESERVE';
PRINT: 'PRINT';
QUALIFY: 'QUALIFY';
QUERY_BAND: 'QUERY_BAND';
QUIT: 'QUIT';
QUOTED_IDENTIFIER: 'QUOTED_IDENTIFIER';
RAISE: 'RAISE';
RESIGNAL: 'RESIGNAL';
RESTRICT: 'RESTRICT';
RESULT: 'RESULT';
RESULT_SET_LOCATOR: 'RESULT_SET_LOCATOR';
RETURN: 'RETURN';
REVERSE: 'REVERSE';
ROWTYPE: 'ROWTYPE';
ROW_COUNT: 'ROW_COUNT';
RR: 'RR';
RS: 'RS';
PWD: 'PWD';
SECONDS: 'SECONDS';
SECURITY: 'SECURITY';
SEGMENT: 'SEGMENT';
SEL: 'SEL';
SESSIONS: 'SESSIONS';
SHARE: 'SHARE';
SIGNAL: 'SIGNAL';
SIMPLE_DOUBLE: 'SIMPLE_DOUBLE';
SIMPLE_FLOAT: 'SIMPLE_FLOAT';
SIMPLE_INTEGER: 'SIMPLE_INTEGER';
SMALLDATETIME: 'SMALLDATETIME';
SQL: 'SQL';
SQLEXCEPTION: 'SQLEXCEPTION';
SQLINSERT: 'SQLINSERT';
SQLSTATE: 'SQLSTATE';
SQLWARNING: 'SQLWARNING';
STATISTICS: 'STATISTICS';
STEP: 'STEP';
STORED: 'STORED';
SUBDIR: 'SUBDIR';
SUBSTRING: 'SUBSTRING';
SUMMARY: 'SUMMARY';
SYS_REFCURSOR: 'SYS_REFCURSOR';
TABLESPACE: 'TABLESPACE';
TEXTIMAGE_ON: 'TEXTIMAGE_ON';
TITLE: 'TITLE';
TOP: 'TOP';
UR: 'UR';
VAR: 'VAR';
VARCHAR2: 'VARCHAR2';
VARYING: 'VARYING';
VOLATILE: 'VOLATILE';
WHILE: 'WHILE';
WITHOUT: 'WITHOUT';
XACT_ABORT: 'XACT_ABORT';
XML: 'XML';
YES: 'YES';

//Functionswithspecificsyntax
ACTIVITY_COUNT: 'ACTIVITY_COUNT';
CUME_DIST: 'CUME_DIST';
DENSE_RANK: 'DENSE_RANK';
FIRST_VALUE: 'FIRST_VALUE';
LAG: 'LAG';
LAST_VALUE: 'LAST_VALUE';
LEAD: 'LEAD';
MAX_PART_STRING: 'MAX_PART_STRING';
MIN_PART_STRING: 'MIN_PART_STRING';
MAX_PART_INT: 'MAX_PART_INT';
MIN_PART_INT: 'MIN_PART_INT';
MAX_PART_DATE: 'MAX_PART_DATE';
MIN_PART_DATE: 'MIN_PART_DATE';
PART_COUNT: 'PART_COUNT';
PART_LOC: 'PART_LOC';
RANK: 'RANK';
ROW_NUMBER: 'ROW_NUMBER';
STDEV: 'STDEV';
SYSDATE: 'SYSDATE';
VARIANCE: 'VARIANCE';

DOT2: '..';

LABEL_PL
: ([a-zA-Z] | DIGIT | '_')* ':'
;
Loading