Showing preview only (2,632K chars total). Download the full file or copy to clipboard to get everything.
Repository: melin/superior-sql-parser
Branch: branch-4.0
Commit: ca42eea29ca1
Files: 274
Total size: 2.4 MB
Directory structure:
gitextract_hvwwon62/
├── .gitignore
├── LICENSE
├── README.md
├── pom.xml
├── superior-appjar-parser/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── job/
│ │ │ └── antlr4/
│ │ │ ├── AppJarLexer.g4
│ │ │ └── AppJarParser.g4
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── appjar/
│ │ ├── AbstractJarParser.kt
│ │ ├── AppJarAntlr4Visitor.kt
│ │ ├── AppJarHelper.kt
│ │ └── AppJarInfo.kt
│ └── test/
│ ├── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── appjar/
│ │ └── AppJarParserTest.kt
│ └── resources/
│ └── log4j2.xml
├── superior-arithmetic-parser/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── antlr4/
│ │ │ └── arithmetic/
│ │ │ └── Arithmetic.g4
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── arithmetic/
│ │ ├── AbstractArithParser.kt
│ │ ├── ArithmeticAntlr4Visitor.kt
│ │ ├── ArithmeticHelper.kt
│ │ └── Data.kt
│ └── test/
│ ├── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── arithmetic/
│ │ └── ArithmetricParserTest.kt
│ └── resources/
│ └── log4j2.xml
├── superior-common-parser/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── common/
│ │ └── antlr4/
│ │ ├── AntlrCaches.java
│ │ ├── Origin.java
│ │ ├── ParseErrorListener.java
│ │ ├── ParseException.java
│ │ ├── ParserUtils.java
│ │ └── UpperCaseCharStream.java
│ └── kotlin/
│ └── io/
│ └── github/
│ └── melin/
│ └── superior/
│ └── common/
│ ├── AlterActionType.kt
│ ├── PrivilegeType.kt
│ ├── SQLParserException.kt
│ ├── SqlType.kt
│ ├── StatementType.kt
│ ├── TableType.kt
│ ├── relational/
│ │ ├── AnalyzeTable.kt
│ │ ├── DefaultStatement.kt
│ │ ├── FunctionId.kt
│ │ ├── ProcedureId.kt
│ │ ├── SchemaId.kt
│ │ ├── Statement.kt
│ │ ├── TableId.kt
│ │ ├── abs/
│ │ │ ├── AbsDatabaseStatement.kt
│ │ │ └── AbsTableStatement.kt
│ │ ├── alter/
│ │ │ ├── AlterAction.kt
│ │ │ ├── AlterActions.kt
│ │ │ ├── AlterDatabase.kt
│ │ │ ├── AlterDatabaseActions.kt
│ │ │ ├── AlterMaterializedView.kt
│ │ │ ├── AlterTable.kt
│ │ │ ├── AlterView.kt
│ │ │ ├── DeltaAlterActions.kt
│ │ │ └── IcebergAlterActions.kt
│ │ ├── common/
│ │ │ ├── AddResourceStatement.kt
│ │ │ ├── CallProcedure.kt
│ │ │ ├── CancelExport.kt
│ │ │ ├── CommentStatement.kt
│ │ │ ├── DescModel.kt
│ │ │ ├── ListResourceStatement.kt
│ │ │ ├── ReSetStatement.kt
│ │ │ ├── RefreshMaterializedView.kt
│ │ │ ├── RemoveResourceStatement.kt
│ │ │ ├── SetStatement.kt
│ │ │ ├── ShowStatement.kt
│ │ │ ├── SyncStatement.kt
│ │ │ └── UseStatement.kt
│ │ ├── create/
│ │ │ ├── CreateCatalog.kt
│ │ │ ├── CreateDatabase.kt
│ │ │ ├── CreateFunction.kt
│ │ │ ├── CreateMaterializedView.kt
│ │ │ ├── CreateProcedure.kt
│ │ │ ├── CreateSchema.kt
│ │ │ ├── CreateTable.kt
│ │ │ ├── CreateTableAsSelect.kt
│ │ │ ├── CreateTableLike.kt
│ │ │ └── CreateView.kt
│ │ ├── delta/
│ │ │ ├── OptimizeTable.kt
│ │ │ └── VacuumTable.kt
│ │ ├── dml/
│ │ │ ├── DeleteTable.kt
│ │ │ ├── InsertFiles.kt
│ │ │ ├── InsertMode.kt
│ │ │ ├── InsertMultiTable.kt
│ │ │ ├── InsertTable.kt
│ │ │ ├── MergeTable.kt
│ │ │ ├── QueryStmt.kt
│ │ │ └── UpdateTable.kt
│ │ ├── drop/
│ │ │ ├── DropCatalog.kt
│ │ │ ├── DropDatabase.kt
│ │ │ ├── DropFunction.kt
│ │ │ ├── DropMaterializedView.kt
│ │ │ ├── DropProcedure.kt
│ │ │ ├── DropSchema.kt
│ │ │ ├── DropSequence.kt
│ │ │ ├── DropTable.kt
│ │ │ └── DropView.kt
│ │ ├── enums.kt
│ │ ├── io/
│ │ │ ├── AlterLoadTable.kt
│ │ │ ├── CancelLoadTable.kt
│ │ │ ├── ExportTable.kt
│ │ │ └── LoadTable.kt
│ │ └── table/
│ │ ├── ColumnRel.kt
│ │ ├── RepairTable.kt
│ │ └── TruncateTable.kt
│ ├── type/
│ │ ├── AbsDataTimeType.kt
│ │ ├── AbsNumericType.kt
│ │ ├── AbsStringType.kt
│ │ ├── AbsType.kt
│ │ └── Type.kt
│ └── util/
│ ├── CommonUtils.kt
│ └── DateUtils.kt
├── superior-dameng-parser/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── dameng/
│ │ │ └── antlr4/
│ │ │ ├── DmSqlLexer.g4
│ │ │ └── DmSqlParser.g4
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── dameng/
│ │ ├── AbstractSqlParser.kt
│ │ ├── DmSqlAntlr4Visitor.kt
│ │ └── DmSqlHelper.kt
│ └── test/
│ ├── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── dameng/
│ │ ├── DmSqlParserDdlTest.kt
│ │ ├── DmSqlParserDmlTest.kt
│ │ └── DmSqlProcedureParserTest.kt
│ └── resources/
│ ├── insert.sql
│ └── log4j2.xml
├── superior-flink-parser/
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── flink/
│ │ │ └── antlr4/
│ │ │ ├── FlinkSqlLexer.g4
│ │ │ └── FlinkSqlParser.g4
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── flink/
│ │ ├── AbstractSqlParser.kt
│ │ ├── FlinkSqlAntlr4Visitor.kt
│ │ └── FlinkSqlHelper.kt
│ └── test/
│ ├── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── flink/
│ │ ├── FlinkCheckSql.kt
│ │ ├── FlinkSqlParserDdlTest.kt
│ │ └── FlinkSqlParserDmlTest.kt
│ └── resources/
│ └── log4j2.xml
├── superior-mysql-parser/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── mysql/
│ │ │ └── antlr4/
│ │ │ ├── MySqlLexer.g4
│ │ │ └── MySqlParser.g4
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── mysql/
│ │ ├── AbstractSqlParser.kt
│ │ ├── MySqlAntlr4Visitor.kt
│ │ ├── MySqlHelper.kt
│ │ └── type/
│ │ ├── JsonType.kt
│ │ ├── datetime.kt
│ │ ├── numeric.kt
│ │ └── string.kt
│ └── test/
│ ├── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── mysql/
│ │ ├── MySqlParserDdlTest.kt
│ │ ├── MySqlParserDmlTest.kt
│ │ └── MySqlProcedureParserTest.kt
│ └── resources/
│ └── log4j2.xml
├── superior-oracle-parser/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── oracle/
│ │ │ └── antlr4/
│ │ │ ├── OracleLexer.g4
│ │ │ └── OracleParser.g4
│ │ ├── java/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── oracle/
│ │ │ └── antlr4/
│ │ │ ├── OracleLexerBase.java
│ │ │ └── OracleParserBase.java
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── oracle/
│ │ ├── AbstractSqlParser.kt
│ │ ├── OracleSqlAntlr4Visitor.kt
│ │ └── OracleSqlHelper.kt
│ └── test/
│ ├── java/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── oracle/
│ │ ├── OracleProcessParserTest.kt
│ │ ├── OracleSqlParserDdlTest.kt
│ │ └── OracleSqlParserDmlTest.kt
│ └── resources/
│ ├── insert.sql
│ └── log4j2.xml
├── superior-postgres-parser/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── postgre/
│ │ │ └── antlr4/
│ │ │ ├── PostgreSqlLexer.g4
│ │ │ └── PostgreSqlParser.g4
│ │ ├── java/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── postgre/
│ │ │ └── antlr4/
│ │ │ ├── LexerDispatchingErrorListener.java
│ │ │ ├── ParserDispatchingErrorListener.java
│ │ │ ├── PostgreSqlLexerBase.java
│ │ │ └── PostgreSqlParserBase.java
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── postgre/
│ │ ├── AbstractSqlParser.kt
│ │ ├── PostgreSqlAntlr4Visitor.kt
│ │ ├── PostgreSqlHelper.kt
│ │ ├── relational/
│ │ │ └── CreatePartitionTable.kt
│ │ └── type/
│ │ ├── BooleanType.kt
│ │ ├── JsonType.kt
│ │ ├── datetime.kt
│ │ ├── numeric.kt
│ │ └── string.kt
│ └── test/
│ ├── java/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── postgre/
│ │ ├── PostgreSqlParserDdlTest.kt
│ │ ├── PostgreSqlParserDmlTest.kt
│ │ └── PostgreSqlProcessParserTest.kt
│ └── resources/
│ └── log4j2.xml
├── superior-presto-parser/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── presto/
│ │ │ └── antlr4/
│ │ │ └── PrestoSqlBase.g4
│ │ ├── java/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── presto/
│ │ │ └── CaseInsensitiveStream.java
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── presto/
│ │ ├── AbstractSqlParser.kt
│ │ ├── PrestoSqlAntlr4Visitor.kt
│ │ └── PrestoSqlHelper.kt
│ └── test/
│ ├── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── presto/
│ │ └── PrestoSqlParserTest.kt
│ └── resources/
│ └── log4j2.xml
├── superior-redshift-parser/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── redshift/
│ │ │ └── antlr4/
│ │ │ ├── RedshiftLexer.g4
│ │ │ └── RedshiftParser.g4
│ │ ├── java/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── redshift/
│ │ │ └── antlr4/
│ │ │ ├── LexerDispatchingErrorListener.java
│ │ │ ├── ParserDispatchingErrorListener.java
│ │ │ ├── RedshiftLexerBase.java
│ │ │ └── RedshiftParserBase.java
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── postgre/
│ │ ├── AbstractSqlParser.kt
│ │ ├── RedshiftSqlAntlr4Visitor.kt
│ │ ├── RedshiftSqlHelper.kt
│ │ ├── relational/
│ │ │ └── CreatePartitionTable.kt
│ │ └── type/
│ │ ├── BooleanType.kt
│ │ ├── JsonType.kt
│ │ ├── datetime.kt
│ │ ├── numeric.kt
│ │ └── string.kt
│ └── test/
│ ├── java/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── postgre/
│ │ ├── RedshiftSqlParserDdlTest.kt
│ │ ├── RedshiftSqlParserDmlTest.kt
│ │ └── RedshiftSqlProcessParserTest.kt
│ └── resources/
│ └── log4j2.xml
├── superior-spark-parser/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── spark/
│ │ │ └── antlr4/
│ │ │ ├── SparkSqlLexer.g4
│ │ │ ├── SparkSqlParser.g4
│ │ │ ├── SparkStreamSqlLexer.g4
│ │ │ └── SparkStreamSqlParser.g4
│ │ ├── java/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── spark/
│ │ │ └── SparkSqlPostProcessor.java
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── spark/
│ │ ├── AbstractSparkStreamSqlParser.kt
│ │ ├── AbstractSqlParser.kt
│ │ ├── SparkSqlAntlr4Visitor.kt
│ │ ├── SparkSqlHelper.kt
│ │ ├── SparkStreamSqlAntlr4Visitor.kt
│ │ ├── SparkStreamSqlHelper.kt
│ │ └── relational/
│ │ ├── CallHelp.kt
│ │ ├── CreateFileView.kt
│ │ ├── CreateTempViewUsing.kt
│ │ ├── DataTunnelExpr.kt
│ │ ├── DataTunnelHelp.kt
│ │ ├── DistCpExpr.kt
│ │ ├── LoadData.kt
│ │ ├── MergeFileData.kt
│ │ ├── RefreshStatement.kt
│ │ └── cache.kt
│ └── test/
│ ├── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── spark/
│ │ ├── DeltaSqlExtensionsTest.kt
│ │ ├── IcebergSqlExtensionsTest.kt
│ │ ├── SparkSqlParserTest.kt
│ │ └── SparkStreamSqlParserTest.kt
│ └── resources/
│ ├── demo.sql
│ └── log4j2.xml
├── superior-sqlserver-parser/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── sqlserver/
│ │ │ └── antlr4/
│ │ │ ├── SqlServerLexer.g4
│ │ │ └── SqlServerParser.g4
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── sqlserver/
│ │ ├── AbstractSqlParser.kt
│ │ ├── SqlServerAntlr4Visitor.kt
│ │ └── SqlServerHelper.kt
│ └── test/
│ ├── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── sqlserver/
│ │ ├── SqlServerParserDdlTest.kt
│ │ └── SqlServerParserDmlTest.kt
│ └── resources/
│ └── log4j2.xml
├── superior-starrocks-parser/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── starrocks/
│ │ │ └── antlr4/
│ │ │ ├── StarRocksLexer.g4
│ │ │ └── StarRocksParser.g4
│ │ ├── java/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── starrocks/
│ │ │ ├── NodePosition.java
│ │ │ ├── ParsingException.java
│ │ │ ├── PostProcessListener.java
│ │ │ └── SqlModeHelper.java
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── starrocks/
│ │ ├── AbstractSqlParser.kt
│ │ ├── StarRocksAntlr4Visitor.kt
│ │ ├── StarRocksHelper.kt
│ │ └── relational/
│ │ ├── AlterRoutineLoad.kt
│ │ ├── CancelRefreshMaterializedView.kt
│ │ ├── CreateRoutineLoad.kt
│ │ ├── DropTask.kt
│ │ ├── PauseRoutineLoad.kt
│ │ ├── ResumeRoutineLoad.kt
│ │ ├── StopRoutineLoad.kt
│ │ └── SubmitTask.kt
│ └── test/
│ ├── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── starrocks/
│ │ ├── StarRocksSqlParserDdlTest.kt
│ │ ├── StarRocksSqlParserDmlTest.kt
│ │ ├── StarRocksSqlParserLoadAndExportTest.kt
│ │ └── StarRocksSqlParserRoutineLoadTest.kt
│ └── resources/
│ └── log4j2.xml
└── superior-trino-parser/
├── pom.xml
└── src/
├── main/
│ ├── antlr4/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── trino/
│ │ └── antlr4/
│ │ └── TrinoSqlBase.g4
│ ├── java/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── trino/
│ │ └── CaseInsensitiveStream.java
│ └── kotlin/
│ └── io/
│ └── github/
│ └── melin/
│ └── superior/
│ └── parser/
│ └── trino/
│ ├── AbstractSqlParser.kt
│ ├── TrinoSqlAntlr4Visitor.kt
│ └── TrinoSqlHelper.kt
└── test/
├── kotlin/
│ └── io/
│ └── github/
│ └── melin/
│ └── superior/
│ └── parser/
│ └── trino/
│ └── TrinoSqlParserTest.kt
└── resources/
└── log4j2.xml
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
# Created by .ignore support plugin (hsz.mobi)
target
.idea
superior-sql-parser.iml
metastore_db
derby.log
.DS_Store
gen
*.tokens
*.iml
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2022 Ververica Inc.
Licensed 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.
================================================
FILE: README.md
================================================
## 介绍
基于 antlr4 的多种数据库SQL解析器,获取SQL中元数据,可用于数据平台产品中的多个场景:ddl语句提取元数据、sql 权限校验、表级血缘、sql语法校验等场景。支持spark、flink、gauss、starrocks、Oracle、MYSQL、Postgresql,sqlserver,、db2等
```xml
<dependency>
<groupId>io.github.melin.superior</groupId>
<artifactId>superior-[spark|presto|mysql|oracle|...]-parser</artifactId>
<version>4.0.22</version>
</dependency>
```
## Build
```
export GPG_TTY=$(tty)
mvn clean deploy -Pdeploy
```
### API
每个数据库SQL 提供 Helper 类,Helper 方法提供四个方法:
```agsl
1. parseStatement(String sql) // 解析单个完整sql
a. ddl: 获取ddl 详细信息。例如:数据库执行完ddl以后,解析ddl,获取到相关信息,同步到元数据信息。
b. dml: 获取sql中使用到的表,用于构建表级血缘,或者校验表权限。
2. parseMultiStatement(String sql) // 解析多个完整sql,支持空格、换行、分号分隔
3. splitSql(String sql) // sql 文本包含多个完整sql,方法用于分隔sql语句,支持空格、换行、分号分隔
4. checkSqlSyntax(String sql) // 验证单个完整sql语法是否正确
5. sqlKeywords() // 获取sql 关键字,主要用于sql editor 关键字提示
```
## Example
```kotlin
// Spark SQL
val sql = "select bzdys, bzhyyh, bzdy, week, round((bzdy-bzdys)*100/bzdys, 2) " +
"from (select lag(bzdy) over (order by week) bzdys, bzhyyh, bzdy, week " +
"from (select count(distinct partner_code) bzhyyh, count(1) bzdy, week from tdl_dt2x_table)) limit 111"
val statement = SparkSQLHelper.parseStatement(sql)
if (statement is QueryStmt) {
Assert.assertEquals(StatementType.SELECT, statement.statementType)
Assert.assertEquals(1, statement.inputTables.size)
Assert.assertEquals("tdl_dt2x_table", statement.inputTables.get(0).tableName)
Assert.assertEquals(111, statement.limit)
} else {
Assert.fail()
}
// Spark Jar
val sql = """
set spark.shuffle.compress=true;set spark.rdd.compress=true;
set spark.driver.maxResultSize=3g;
set spark.serializer=org.apache.spark.serializer.KryoSerializer;
set spark.kryoserializer.buffer.max=1024m;
set spark.kryoserializer.buffer=256m;
set spark.network.timeout=300s;
examples-jar-with-dependencies.jar imei_test.euSaveHBase gaea_offline:account_mobile sh md shda.interest_radar_mobile_score_dt 20180318 /xiaoyong.fu/sh/mobile/loan 400 '%7B%22job_type%22=' --jar
""";
val statementDatas = JobTaskHelper.parseStatement(sql)
Assert.assertEquals(8, statementDatas.size)
var statementData = statementDatas.get(7)
var statement = statementData.statement
if (statement is JobData) {
Assert.assertEquals(StatementType.JOB, statement.statementType)
Assert.assertEquals("createHfile-1.2-SNAPSHOT-jar-with-dependencies.jar", statement.resourceName)
Assert.assertEquals("imei_test.euSaveHBase", statement.className)
Assert.assertEquals("/xiaoyong.fu/sh/mobile/loan", statement.params?.get(5))
Assert.assertEquals("400", statement.params?.get(6))
Assert.assertEquals("%7B%22job_type%22=", statement.params?.get(7))
Assert.assertEquals("--jar", statement.params?.get(8))
} else {
Assert.fail()
}
// MySQL
val sql = "insert into bigdata.user select * from users a left outer join address b on a.address_id = b.id"
val statement = MySQLHelper.parseStatement(sql)
if(statement is QueryStmt) {
Assert.assertEquals(StatementType.INSERT_SELECT, statement.statementType)
Assert.assertEquals("bigdata", statement.outpuTables.get(0).databaseName)
Assert.assertEquals("user", statement.outpuTables.get(0).tableName)
Assert.assertEquals(2, statement.inputTables.size)
} else {
Assert.fail()
}
// Postgres
val sql = """
select a.* from datacompute1.datacompute.dc_job a left join datacompute1.datacompute.dc_job_scheduler b on a.id=b.job_id
""".trimIndent()
val statement = PostgreSQLHelper.parseStatement(sql)
if (statement is QueryStmt) {
Assert.assertEquals(StatementType.SELECT, statement.statementType)
Assert.assertEquals(2, statement.inputTables.size)
} else {
Assert.fail()
}
```
## 支持数据库
1. [MySQL](https://github.com/antlr/grammars-v4/tree/master/sql/mysql)
2. [PrestoSQL](https://github.com/prestosql/presto/tree/master/presto-parser/src/main/antlr4/io/prestosql/sql/parser)
3. [PostgreSQL](https://github.com/pgcodekeeper/pgcodekeeper/tree/master/apgdiff/antlr-src)
4. [Spark 3.x](https://github.com/apache/spark/tree/master/sql/catalyst/src/main/antlr4/org/apache/spark/sql/catalyst/parser)
5. [Sql Server](https://github.com/antlr/grammars-v4/tree/master/sql/tsql)
6. [StarRocks](https://github.com/StarRocks/starrocks/tree/main/fe/fe-core/src/main/java/com/starrocks/sql/parser)
7. [Oracle](https://github.com/antlr/grammars-v4/tree/master/sql/plsql)
8. [OceanBase](https://github.com/oceanbase/odc/tree/main/libs/ob-sql-parser)
9. [Flink SQL / Flink CDC SQL](https://github.com/DTStack/dt-sql-parser/tree/main/src/grammar/flinksql)
## 相关项目
1. https://gitee.com/melin/bee
2. https://github.com/melin/sqlflow/ 字段血缘解析
3. https://github.com/melin/superior-sql-formatter spark sql 代码格式化
4. https://github.com/melin/datatunnel spark 数据同步工具
5. https://github.com/melin/flink-jobserver
6. https://github.com/melin/spark-jobserver
================================================
FILE: pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.github.melin.superior</groupId>
<artifactId>superior-sql-parser</artifactId>
<version>4.0.23</version>
<packaging>pom</packaging>
<name>Superior SQL Parser</name>
<description>Superior SQL Parser</description>
<modules>
<module>superior-common-parser</module>
<module>superior-arithmetic-parser</module>
<module>superior-appjar-parser</module>
<module>superior-spark-parser</module>
<module>superior-mysql-parser</module>
<module>superior-postgres-parser</module>
<module>superior-trino-parser</module>
<module>superior-presto-parser</module>
<module>superior-sqlserver-parser</module>
<module>superior-flink-parser</module>
<module>superior-oracle-parser</module>
<module>superior-dameng-parser</module>
<module>superior-starrocks-parser</module>
<module>superior-redshift-parser</module>
</modules>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<kotlin.compiler.incremental>true</kotlin.compiler.incremental>
<kotlin.version>2.3.20</kotlin.version>
<antlr4.version>4.9.3</antlr4.version>
<slf4j.version>2.0.17</slf4j.version>
<log4j.version>2.25.3</log4j.version>
<commons-lang3.version>3.20.0</commons-lang3.version>
<commons-io.version>2.21.0</commons-io.version>
</properties>
<dependencies>
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr4-runtime</artifactId>
<version>${antlr4.version}</version>
<exclusions>
<exclusion>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>${kotlin.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>33.4.0-jre</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.12.0</version>
<inherited>true</inherited>
<configuration>
<maxmemory>1024</maxmemory>
<encoding>UTF-8</encoding>
<show>protected</show>
<notree>true</notree>
<!-- Avoid running into Java 8's very restrictive doclint issues -->
<failOnError>false</failOnError>
<doclint>none</doclint>
</configuration>
<executions>
<execution>
<id>bundle-sources</id>
<goals>
<goal>jar</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.5.4</version>
</plugin>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<extensions>true</extensions>
<executions>
<execution>
<id>compile</id>
<goals>
<goal>compile</goal>
</goals>
<phase>process-sources</phase>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/main/kotlin</sourceDir>
<sourceDir>${project.basedir}/src/main/java</sourceDir>
<sourceDir>${project.build.directory}/generated-sources/antlr4</sourceDir>
</sourceDirs>
</configuration>
</execution>
<execution>
<id>test-compile</id>
<goals>
<goal>test-compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/test/kotlin</sourceDir>
<sourceDir>${project.basedir}/src/test/java</sourceDir>
</sourceDirs>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
<executions>
<!-- Replacing default-compile as it is treated specially by maven -->
<execution>
<id>default-compile</id>
<phase>none</phase>
</execution>
<!-- Replacing default-testCompile as it is treated specially by maven -->
<execution>
<id>default-testCompile</id>
<phase>none</phase>
</execution>
<execution>
<id>java-compile</id>
<goals>
<goal>compile</goal>
</goals>
<phase>compile</phase>
</execution>
<execution>
<id>java-test-compile</id>
<goals>
<goal>testCompile</goal>
</goals>
<phase>test-compile</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.antlr</groupId>
<artifactId>antlr4-maven-plugin</artifactId>
<version>${antlr4.version}</version>
<configuration>
<!--<listener>true</listener>-->
<visitor>true</visitor>
<!--<treatWarningsAsErrors>true</treatWarningsAsErrors>-->
</configuration>
<executions>
<execution>
<id>antlr</id>
<goals>
<goal>antlr4</goal>
</goals>
<phase>generate-sources</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<mavenExecutorId>forked-path</mavenExecutorId>
<useReleaseProfile>false</useReleaseProfile>
<arguments>-Psonatype-oss-release</arguments>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.4.0</version>
<inherited>true</inherited>
<configuration>
<excludeResources>true</excludeResources>
<useDefaultExcludes>true</useDefaultExcludes>
</configuration>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>deploy</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<executions>
<execution>
<id>sign-artifacts</id>
<goals>
<goal>sign</goal>
</goals>
<phase>verify</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.sonatype.central</groupId>
<artifactId>central-publishing-maven-plugin</artifactId>
<version>0.10.0</version>
<extensions>true</extensions>
<configuration>
<deploymentName>superior-sql-parser-${project.version}</deploymentName>
<publishingServerId>central</publishingServerId>
<autoPublish>true</autoPublish>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<url>https://github.com/melin/superior-sql-parser</url>
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
<developers>
<developer>
<name>melin</name>
<email>libinsong1204@gmail.com</email>
<url>https://github.com/melin/superior-sql-parser</url>
</developer>
</developers>
<scm>
<connection>scm:git:https://github.com/melin/superior-sql-parser.git</connection>
<developerConnection>scm:git:https://github.com/melin/superior-sql-parser.git</developerConnection>
<url>https://github.com/melin/superior-sql-parser</url>
</scm>
<issueManagement>
<system>gitee</system>
<url>https://github.com/melin/superior-sql-parser/issues</url>
</issueManagement>
</project>
================================================
FILE: superior-appjar-parser/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>io.github.melin.superior</groupId>
<artifactId>superior-sql-parser</artifactId>
<version>4.0.23</version>
</parent>
<artifactId>superior-appjar-parser</artifactId>
<name>superior-appjar-parser</name>
<dependencies>
<dependency>
<groupId>io.github.melin.superior</groupId>
<artifactId>superior-common-parser</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
================================================
FILE: superior-appjar-parser/src/main/antlr4/io/github/melin/superior/parser/job/antlr4/AppJarLexer.g4
================================================
lexer grammar AppJarLexer;
channels { DCSTREAMCOMMENT, ERRORCHANNEL }
// SKIP
SPACE: [ \t\r\n]+ -> channel(HIDDEN);
SPEC_MYSQL_COMMENT: '/*!' .+? '*/' -> channel(DCSTREAMCOMMENT);
COMMENT_INPUT: '/*' .*? '*/' -> channel(HIDDEN);
LINE_COMMENT: (
('-- ' | '#') ~[\r\n]* ('\r'? '\n' | EOF)
| '--' ('\r'? '\n' | EOF)
) -> channel(HIDDEN);
SET: 'SET';
RESET: 'RESET';
STAR: '*';
DIVIDE: '/';
MODULE: '%';
PLUS: '+';
MINUS: '-';
// Operators. Comparation
EQUAL_SYMBOL: '=';
GREATER_SYMBOL: '>';
LESS_SYMBOL: '<';
EXCLAMATION_SYMBOL: '!';
// Operators. Bit
BIT_NOT_OP: '~';
BIT_OR_OP: '|';
BIT_AND_OP: '&';
BIT_XOR_OP: '^';
// Constructors symbols
DOT: '.';
LR_BRACKET: '(';
RR_BRACKET: ')';
COMMA: ',';
SEMI: ';';
DOT_ID: '.' ID_LITERAL;
ID: ID_LITERAL;
REVERSE_QUOTE_ID: '`' ~'`'+ '`';
STRING_LITERAL: DQUOTA_STRING | SQUOTA_STRING;
fragment ID_LITERAL: [A-Z_$0-9,:-]*;
fragment DQUOTA_STRING: '"' ( '\\'. | '""' | ~('"'| '\\') )* '"';
fragment SQUOTA_STRING: '\'' ('\\'. | '\'\'' | ~('\'' | '\\'))* '\'';
ERROR_RECONGNIGION: . -> channel(ERRORCHANNEL);
================================================
FILE: superior-appjar-parser/src/main/antlr4/io/github/melin/superior/parser/job/antlr4/AppJarParser.g4
================================================
parser grammar AppJarParser;
options { tokenVocab=AppJarLexer; }
rootx
: jobTasks? EOF
;
jobTasks
: (jobTask SEMI | emptyStatement)*
(jobTask (SEMI)? | emptyStatement)
;
jobTask
: setStatement | resetStatement | jobStatement
;
jobStatement
: resourceNameExpr classNameExpr paramsExpr?
;
resourceNameExpr
: ID (DOT_ID)*
| fileDir
;
classNameExpr
: ID (DOT_ID)*
;
paramsExpr
: paramExpr (paramExpr)*
;
paramExpr
: ID (DOT_ID)*
| fileDir
| ID DOT_ID* ('/' '/'? ID DOT_ID*)*
| STRING_LITERAL
;
fileDir
: '/' ID DOT_ID* ('/' (ID DOT_ID* | '*'))* '/'?
;
setStatement
: SET keyExpr EQUAL_SYMBOL value=valueExpr
;
resetStatement
: RESET keyExpr
;
keyExpr
: ID (DOT_ID)*
;
valueExpr
: word (word)*
;
word
: ID
| DOT_ID | SET | RESET
| STAR | DIVIDE | MODULE | PLUS | MINUS
| EQUAL_SYMBOL | GREATER_SYMBOL | LESS_SYMBOL | EXCLAMATION_SYMBOL
| BIT_NOT_OP | BIT_OR_OP | BIT_AND_OP | BIT_XOR_OP
| LR_BRACKET | RR_BRACKET | COMMA
| STRING_LITERAL
;
emptyStatement
: SEMI
;
================================================
FILE: superior-appjar-parser/src/main/kotlin/io/github/melin/superior/parser/appjar/AbstractJarParser.kt
================================================
package io.github.melin.superior.parser.appjar
import io.github.melin.superior.common.antlr4.AntlrCaches
import io.github.melin.superior.parser.job.antlr4.AppJarParser
import java.util.concurrent.atomic.AtomicReference
object AbstractJarParser {
private val parserCaches = AtomicReference<AntlrCaches>(AntlrCaches(AppJarParser._ATN))
/**
* Install the parser caches into the given parser.
*
* This method should be called before parsing any input.
*/
fun installCaches(parser: AppJarParser): Unit = parserCaches.get().installCaches(parser)
/**
* Drop the existing parser caches and create a new one.
*
* ANTLR retains caches in its parser that are never released. This speeds up parsing of future input, but it can
* consume a lot of memory depending on the input seen so far.
*
* This method provides a mechanism to free the retained caches, which can be useful after parsing very large SQL
* inputs, especially if those large inputs are unlikely to be similar to future inputs seen by the driver.
*/
fun refreshParserCaches() {
parserCaches.set(AntlrCaches(AppJarParser._ATN))
}
}
================================================
FILE: superior-appjar-parser/src/main/kotlin/io/github/melin/superior/parser/appjar/AppJarAntlr4Visitor.kt
================================================
package io.github.melin.superior.parser.appjar
import com.github.melin.superior.sql.parser.util.CommonUtils
import io.github.melin.superior.common.antlr4.ParserUtils.source
import io.github.melin.superior.common.relational.Statement
import io.github.melin.superior.common.relational.common.ReSetStatement
import io.github.melin.superior.common.relational.common.SetStatement
import io.github.melin.superior.parser.job.antlr4.AppJarParser
import io.github.melin.superior.parser.job.antlr4.AppJarParserBaseVisitor
import org.apache.commons.lang3.StringUtils
/** Created by binsong.li on 2018/3/31 下午1:44 */
class AppJarAntlr4Visitor : AppJarParserBaseVisitor<Statement>() {
private var command: String? = null
private val jobStmts = ArrayList<Statement>()
override fun visitJobTask(ctx: AppJarParser.JobTaskContext): Statement {
val jobStmt = super.visitJobTask(ctx)
val sql = source(ctx)
jobStmt.setSql(sql)
jobStmts.add(jobStmt)
return jobStmt
}
override fun visitJobStatement(ctx: AppJarParser.JobStatementContext): Statement {
val resourceName = ctx.resourceNameExpr().text
val className = ctx.classNameExpr().text
val params: ArrayList<String> = arrayListOf()
if (ctx.paramsExpr() != null) {
ctx.paramsExpr().children.forEach { item ->
val param = item as AppJarParser.ParamExprContext
var value = source(param)
if (StringUtils.startsWith(value, "/")) { // 解决连续多个文件路径,不能正确解析
value = replaceWhitespace(value)
params.addAll(StringUtils.split(value, " "))
} else {
value = CommonUtils.cleanQuote(value)
params.add(value)
}
}
}
return AppJarInfo(resourceName, className, params)
}
override fun visitSetStatement(ctx: AppJarParser.SetStatementContext): Statement {
val key = ctx.keyExpr().text
val value = CommonUtils.cleanQuote(source(ctx.value))
return SetStatement(key, value)
}
override fun visitResetStatement(ctx: AppJarParser.ResetStatementContext): Statement {
val key = ctx.keyExpr().text
return ReSetStatement(key)
}
private fun replaceWhitespace(str: String): String {
val len = str.length
if (len > 0) {
val dest = CharArray(len)
var destPos = 0
for (i in 0 until len) {
val c = str[i]
if (!Character.isWhitespace(c)) {
dest[destPos++] = c
} else {
dest[destPos++] = ' '
}
}
return String(dest, 0, destPos)
}
return str
}
fun getJobStmts(): ArrayList<Statement> {
return jobStmts
}
fun setCommand(command: String) {
this.command = command
}
}
================================================
FILE: superior-appjar-parser/src/main/kotlin/io/github/melin/superior/parser/appjar/AppJarHelper.kt
================================================
package io.github.melin.superior.parser.appjar
import com.github.melin.superior.sql.parser.util.CommonUtils
import io.github.melin.superior.common.antlr4.AntlrCaches.RELEASE_ANTLR_CACHE_AFTER_PARSING
import io.github.melin.superior.common.antlr4.ParseErrorListener
import io.github.melin.superior.common.antlr4.ParseException
import io.github.melin.superior.common.antlr4.UpperCaseCharStream
import io.github.melin.superior.common.relational.Statement
import io.github.melin.superior.parser.job.antlr4.AppJarLexer
import io.github.melin.superior.parser.job.antlr4.AppJarParser
import org.antlr.v4.runtime.CharStreams
import org.antlr.v4.runtime.CommonTokenStream
import org.antlr.v4.runtime.atn.PredictionMode
import org.antlr.v4.runtime.misc.ParseCancellationException
import org.apache.commons.lang3.StringUtils
/** Created by binsong.li on 2018/3/31 下午1:47 */
object AppJarHelper {
@JvmStatic
fun sqlKeywords(): List<String> {
val keywords = hashSetOf<String>()
(0 until AppJarLexer.VOCABULARY.maxTokenType).forEach { idx ->
val name = AppJarLexer.VOCABULARY.getLiteralName(idx)
if (name != null) {
val matchResult = CommonUtils.KEYWORD_REGEX.find(name)
if (matchResult != null) {
keywords.add(matchResult.groupValues.get(1))
}
}
}
return keywords.sorted()
}
@JvmStatic
fun parseStatement(command: String): ArrayList<Statement> {
val trimCmd = StringUtils.trim(command)
val charStream = UpperCaseCharStream(CharStreams.fromString(trimCmd))
val lexer = AppJarLexer(charStream)
lexer.removeErrorListeners()
lexer.addErrorListener(ParseErrorListener())
val tokenStream = CommonTokenStream(lexer)
val parser = AppJarParser(tokenStream)
AbstractJarParser.installCaches(parser)
parser.removeErrorListeners()
parser.addErrorListener(ParseErrorListener())
parser.interpreter.predictionMode = PredictionMode.SLL
val cmdVisitor = AppJarAntlr4Visitor()
cmdVisitor.setCommand(trimCmd)
try {
try {
// first, try parsing with potentially faster SLL mode
cmdVisitor.visit(parser.jobTasks())
return cmdVisitor.getJobStmts()
} catch (e: ParseCancellationException) {
tokenStream.seek(0) // rewind input stream
parser.reset()
// Try Again.
parser.interpreter.predictionMode = PredictionMode.LL
cmdVisitor.visit(parser.jobTasks())
return cmdVisitor.getJobStmts()
}
} catch (e: ParseException) {
if (StringUtils.isNotBlank(e.command)) {
throw e
} else {
throw e.withCommand(trimCmd)
}
} finally {
val releaseAntlrCache = System.getenv(RELEASE_ANTLR_CACHE_AFTER_PARSING)
if (releaseAntlrCache == null || "true".equals(releaseAntlrCache)) {
AbstractJarParser.refreshParserCaches()
}
}
}
}
================================================
FILE: superior-appjar-parser/src/main/kotlin/io/github/melin/superior/parser/appjar/AppJarInfo.kt
================================================
package io.github.melin.superior.parser.appjar
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
data class AppJarInfo(val resourceName: String, val className: String, val params: List<String>?) : Statement() {
override val statementType = StatementType.APP_JAR
override val privilegeType = PrivilegeType.OTHER
override val sqlType = SqlType.DML
}
================================================
FILE: superior-appjar-parser/src/test/kotlin/io/github/melin/superior/parser/appjar/AppJarParserTest.kt
================================================
package io.github.melin.superior.parser.appjar
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.common.ReSetStatement
import io.github.melin.superior.common.relational.common.SetStatement
import org.junit.Assert
import org.junit.Test
/** Created by binsong.li on 2018/3/31 下午1:59 */
class AppJarParserTest {
@Test
fun setConfigTest1() {
val sql =
"""
set flink.test = 'hello world';
set flink.test = setsd,sd,resr;
set flink.test = hello world;
set flink.test = hello-world;
set flink.test = hello $\{usename} test;
#set flink.test = hello comment;
set flink.test = hello 'test' world;
set flink.test = hello "test" world;
set flink.test = hdfs://user/hive;
set flink.test = 12,12;
set flink.test = 3.45;
set flink.test = ibdex.json;
reset flink.test;
set flink.test = dw.eset_sdfe_sd;
set flink.test = demo.test;
set flink.test = dsd(id)%=2;
tet_test-demo_1.23-sdfd.jar com.example.Demo1 param1 param2 'hello \n world'
'hdfs://user/hive'
'{"user": "binsong.li",
address: "hangzhou"
}'
/user/jars/*
--jars /user/jars/flink.jar
"""
val statements = AppJarHelper.parseStatement(sql)
Assert.assertEquals(16, statements.size)
var statement = statements.get(0)
if (statement is SetStatement) {
Assert.assertEquals(StatementType.SET, statement.statementType)
Assert.assertEquals("flink.test", statement.key)
Assert.assertEquals("hello world", statement.value)
} else {
Assert.fail()
}
var setCount = 0
statements.filter { it.statementType == StatementType.SET }.forEach { setCount = setCount + 1 }
Assert.assertEquals(14, setCount)
statement = statements.get(11)
if (statement is ReSetStatement) {
Assert.assertEquals(StatementType.RESET, statement.statementType)
Assert.assertEquals("flink.test", statement.key)
} else {
Assert.fail()
}
statement = statements.get(15)
if (statement is AppJarInfo) {
Assert.assertEquals(StatementType.APP_JAR, statement.statementType)
Assert.assertEquals("tet_test-demo_1.23-sdfd.jar", statement.resourceName)
Assert.assertEquals("com.example.Demo1", statement.className)
Assert.assertEquals(8, statement.params?.size)
Assert.assertEquals("/user/jars/*", statement.params?.get(5))
} else {
Assert.fail()
}
}
@Test
fun setConfigTest2() {
val sql = "demo.jar com.example.Demo 'hello \"test\" world' param2 \n param3"
val statementDatas = AppJarHelper.parseStatement(sql)
Assert.assertEquals(1, statementDatas.size)
val statement = statementDatas.get(0)
if (statement is AppJarInfo) {
Assert.assertEquals(StatementType.APP_JAR, statement.statementType)
Assert.assertEquals("demo.jar", statement.resourceName)
Assert.assertEquals("com.example.Demo", statement.className)
Assert.assertEquals(3, statement.params?.size)
Assert.assertEquals("hello \"test\" world", statement.params?.get(0))
Assert.assertEquals("param3", statement.params?.get(2))
} else {
Assert.fail()
}
}
@Test
fun setConfigTest3() {
val sql =
"""
set spark.yarn.queue=newoffline;
set spark.sql.autoBroadcastJoinThreshold=40485760;
set spark.executor.memory=8g;
set spark.sql.hive.convertMetastoreParquet=true ;
set spark.driver.maxResultSize=4g;
set spark.driver.memory=10g;
set spark.psi.ds=20180312;
set spark.psi.dstTable=dw.index_psi_dt;
set spark.psi.dims=idnumber;
set spark.psi.num=0;
set spark.psi.parNum=2;
set spark.indexPSI.type=2;
set spark.metrics.indexFile=index-mobile.json;
psi_new_calculate_metrics-1.1-SNAPSHOT-jar-with-dependencies.jar com.example.dw.psi.StartDCJob 1,3,sd,qw
"""
val statementDatas = AppJarHelper.parseStatement(sql)
Assert.assertEquals(14, statementDatas.size)
val statement = statementDatas.get(13)
if (statement is AppJarInfo) {
Assert.assertEquals(StatementType.APP_JAR, statement.statementType)
Assert.assertEquals(
"psi_new_calculate_metrics-1.1-SNAPSHOT-jar-with-dependencies.jar",
statement.resourceName
)
Assert.assertEquals("com.example.dw.psi.StartDCJob", statement.className)
Assert.assertEquals("1,3,sd,qw", statement.params?.get(0))
} else {
Assert.fail()
}
}
@Test
fun setConfigTest4() {
val sql =
"""
set spark.yarn.queue=newoffline;
set spark.dynamicAllocation.maxExecutors=100;
set spark.driver.maxResultSize=30g;
set spark.driver.memory=15g;
set spark.executor.instances=80;
set spark.executor.cores=5;
set spark.executor.memory=30g;
set spark.sql.shuffle.partitions=5000;
set spark.shuffle.io.maxRetries=60;
set spark.shuffle.io.retryWait=60s;
set spark.metrics.indexFile=index-mobile.json;
set spark.metrics.indexInputTable=dw.dwa_mobile_model_dt;
set spark.metrics.indexOutputTable=dw.app_mdl_mobile_index_dt;
set spark.metrics.indexWaitFullPartition=true;
set spark.metrics.indexHashWhere=abs(hash(mobile))%4=3;
new_calculate_metrics-100-SNAPSHOT-jar-with-dependencies.jar com.example.dw.index.StartDCJob IndexOffline 2018-03-18
"""
val statementDatas = AppJarHelper.parseStatement(sql)
Assert.assertEquals(16, statementDatas.size)
val statement = statementDatas.get(15)
if (statement is AppJarInfo) {
Assert.assertEquals(StatementType.APP_JAR, statement.statementType)
Assert.assertEquals("new_calculate_metrics-100-SNAPSHOT-jar-with-dependencies.jar", statement.resourceName)
Assert.assertEquals("com.example.dw.index.StartDCJob", statement.className)
Assert.assertEquals("2018-03-18", statement.params?.get(1))
} else {
Assert.fail()
}
}
@Test
fun setConfigTest5() {
val sql =
"""
set spark.shuffle.compress=true;set spark.rdd.compress=true;
set spark.driver.maxResultSize=3g;
set spark.serializer=org.apache.spark.serializer.KryoSerializer;
set spark.kryoserializer.buffer.max=1024m;
set spark.kryoserializer.buffer=256m;
set spark.network.timeout=300s;
createHfile-1.2-SNAPSHOT-jar-with-dependencies.jar imei_test.euSaveHBase gaea_offline:account_mobile sh md shda.interest_radar_mobile_score_dt 20180318 /xiaoyong.fu/sh/mobile/loan 400 '%7B%22job_type%22=' --jar
"""
val statementDatas = AppJarHelper.parseStatement(sql)
Assert.assertEquals(8, statementDatas.size)
val statement = statementDatas.get(7)
if (statement is AppJarInfo) {
Assert.assertEquals(StatementType.APP_JAR, statement.statementType)
Assert.assertEquals("createHfile-1.2-SNAPSHOT-jar-with-dependencies.jar", statement.resourceName)
Assert.assertEquals("imei_test.euSaveHBase", statement.className)
Assert.assertEquals("/xiaoyong.fu/sh/mobile/loan", statement.params?.get(5))
Assert.assertEquals("400", statement.params?.get(6))
Assert.assertEquals("%7B%22job_type%22=", statement.params?.get(7))
Assert.assertEquals("--jar", statement.params?.get(8))
} else {
Assert.fail()
}
}
@Test
fun setConfigTest6() {
val sql =
"""
set spark.toMysql.url=jdbc:mysql://192.168.40.110:3306/data_quality;set spark.toMysql.user=dq;
set spark.toMysql.password=0nlpSvpgC5leeKuw;
set spark.screenJob.screenType=3;
set spark.screenJob.test=true;
set spark.screenTool.srcTable=default.activity_flat;
set spark.toMysql.tableName=province;
set spark.toMysql.field=creditProvinceAmountJson,creditForeignAmount,creditCityAmountJson,zhejiangFraud,fraudProvinceAmountJson;
province-1.0-SNAPSHOT-jar-with-dependencies.jar com.example.screen_dc.ScreenJob /xiaoyong.fu/2017-22-03/sh/mobile/loan/ --write-private-test;
province-1.0-SNAPSHOT-jar-with-dependencies.jar com.example.screen_dc.ScreenJob /xiaoyong.fu/2017-22-03/sh/mobile/loan/ --write-private-test
"""
val statementDatas = AppJarHelper.parseStatement(sql)
Assert.assertEquals(10, statementDatas.size)
val statement = statementDatas.get(9)
if (statement is AppJarInfo) {
Assert.assertEquals(StatementType.APP_JAR, statement.statementType)
Assert.assertEquals("province-1.0-SNAPSHOT-jar-with-dependencies.jar", statement.resourceName)
Assert.assertEquals("com.example.screen_dc.ScreenJob", statement.className)
Assert.assertEquals("/xiaoyong.fu/2017-22-03/sh/mobile/loan/", statement.params?.get(0))
Assert.assertEquals("--write-private-test", statement.params?.get(1))
} else {
Assert.fail()
}
}
@Test
fun setConfigTest7() {
val sql =
"""
raph.edgesSNAPSHOT.eventType.jar com.example.graph.PhoenixCSVWriterJob graph_csv_s_2 /user/datacompute/bigdata/data/shuoyi.zhao/graph_csv_s_2/2018/12/day_12
/user/datacompute/bigdata/data/shuoyi.zhao/graph_csv_s_new_2/Loan/2018/12/day_12 500 Loan hdfs://192.168.40.37,hdfs://192.168.39.133 hdfs://192.168.40.37,hdfs://192.168.39.130;
"""
val statementDatas = AppJarHelper.parseStatement(sql)
Assert.assertEquals(1, statementDatas.size)
val statement = statementDatas.get(0)
if (statement is AppJarInfo) {
Assert.assertEquals(StatementType.APP_JAR, statement.statementType)
Assert.assertEquals("raph.edgesSNAPSHOT.eventType.jar", statement.resourceName)
Assert.assertEquals("com.example.graph.PhoenixCSVWriterJob", statement.className)
Assert.assertEquals("hdfs://192.168.40.37,hdfs://192.168.39.130", statement.params?.get(6))
} else {
Assert.fail()
}
}
@Test
fun setConfigTest8() {
val sql =
"""
set spark.app.name=sparkAppName;
set spark.memory.storageFraction=0.1;
set spark.memory.fraction=0.95;
set spark.memory.useLegacyMode=true;
set master=yarn-cluster;
/user/pontus_2.1/pontus-core-2.1.0-SNAPSHOT-fat.jar com.example.pontus.core.Engine customCmd "-j{'readerFields':[{'field':'uuid','type':'string'},{'field':'rule_detail','type':'string'}],'resourceSetting':{'spark.driver.memory':'2g','spark.pontus.writer.mapper':'2'},'reader':{'databaseName':'afraudtech','connectionType':'hive','table':'antifraud_rule_result'},'writerFields':[{'transform':'uuid','field':'uuid','type':'varchar(32)'},{'filter':'where id=\'test\'','transform':'rule_detail','field':'policy_recommendation','type':'text'}],'writer':{'dataSourceId':'364','connectionAttr':'jdbc:mysql://192.168.74.136:3306/athena','password':'6ydJDezPBLBuco+sCV6QL6XsdTN/ShtYIz1Gi3TVusw=','writeMode':'UPSERT','userName':'athena','connectionType':'mysql','table':'edison_warning_result'}}" --jars /user/pontus_2.1/*
"""
val statementDatas = AppJarHelper.parseStatement(sql)
Assert.assertEquals(6, statementDatas.size)
val statement = statementDatas.get(5)
if (statement is AppJarInfo) {
Assert.assertEquals(StatementType.APP_JAR, statement.statementType)
Assert.assertEquals("/user/pontus_2.1/pontus-core-2.1.0-SNAPSHOT-fat.jar", statement.resourceName)
Assert.assertEquals("com.example.pontus.core.Engine", statement.className)
Assert.assertEquals(4, statement.params?.size)
val config =
"""
-j{'readerFields':[{'field':'uuid','type':'string'},{'field':'rule_detail','type':'string'}],'resourceSetting':{'spark.driver.memory':'2g','spark.pontus.writer.mapper':'2'},'reader':{'databaseName':'afraudtech','connectionType':'hive','table':'antifraud_rule_result'},'writerFields':[{'transform':'uuid','field':'uuid','type':'varchar(32)'},{'filter':'where id=\'test\'','transform':'rule_detail','field':'policy_recommendation','type':'text'}],'writer':{'dataSourceId':'364','connectionAttr':'jdbc:mysql://192.168.74.136:3306/athena','password':'6ydJDezPBLBuco+sCV6QL6XsdTN/ShtYIz1Gi3TVusw=','writeMode':'UPSERT','userName':'athena','connectionType':'mysql','table':'edison_warning_result'}}
"""
Assert.assertEquals(config.trim(), statement.params?.get(1))
} else {
Assert.fail()
}
}
}
================================================
FILE: superior-appjar-parser/src/test/resources/log4j2.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout
pattern="%style{%d{ISO8601}}{black} %highlight{%-5level }[%style{%t}{bright,blue}] %style{%C{1.}}{bright,yellow}: %msg%n%throwable" />
</Console>
</Appenders>
<Loggers>
<!-- LOG everything at INFO level -->
<Root level="INFO">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
================================================
FILE: superior-arithmetic-parser/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>io.github.melin.superior</groupId>
<artifactId>superior-sql-parser</artifactId>
<version>4.0.23</version>
</parent>
<artifactId>superior-arithmetic-parser</artifactId>
<name>superior-arithmetic-parser</name>
<dependencies>
<dependency>
<groupId>io.github.melin.superior</groupId>
<artifactId>superior-common-parser</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
================================================
FILE: superior-arithmetic-parser/src/main/antlr4/io/github/melin/superior/parser/antlr4/arithmetic/Arithmetic.g4
================================================
grammar Arithmetic;
@members {
public boolean bracket_enbled = true;
}
arithmetic: expression EOF;
expression
: booleanExpression
;
booleanExpression
: NOT booleanExpression #logicalNot
| valueExpression predicate? #predicated
| left=booleanExpression operator=AND right=booleanExpression #logicalBinary
| left=booleanExpression operator=OR right=booleanExpression #logicalBinary
;
predicate
: NOT? kind=BETWEEN lower=valueExpression AND upper=valueExpression
| NOT? kind=IN '(' expression (',' expression)* ')'
| NOT? kind=RLIKE pattern=valueExpression
| NOT? kind=LIKE pattern=valueExpression (ESCAPE escapeChar=STRING)?
| IS NOT? kind=NULL
| IS NOT? kind=(TRUE | FALSE | UNKNOWN)
;
valueExpression
: primaryExpression #valueExpressionDefault
| operator=(MINUS | PLUS | TILDE) valueExpression #arithmeticUnary
| left=valueExpression operator=(ASTERISK | SLASH | PERCENT | DIV) right=valueExpression #arithmeticBinary
| left=valueExpression operator=(PLUS | MINUS | CONCAT_PIPE) right=valueExpression #arithmeticBinary
| left=valueExpression operator=AMPERSAND right=valueExpression #arithmeticBinary
| left=valueExpression operator=HAT right=valueExpression #arithmeticBinary
| left=valueExpression operator=PIPE right=valueExpression #arithmeticBinary
| left=valueExpression comparisonOperator right=valueExpression #comparison
;
primaryExpression
: CASE whenClause+ (ELSE elseExpression=expression)? END #searchedCase
| CASE value=expression whenClause+ (ELSE elseExpression=expression)? END #simpleCase
| constant #constantDefault
| functionName '(' (setQuantifier? argument+=expression (',' argument+=expression)*)? ')' #functionCall
| identifier '->' expression #lambda
| '(' identifier (',' identifier)+ ')' '->' expression #lambda
| value=primaryExpression '[' index=valueExpression ']' #subscript
| identifier #columnReference
| '(' expression ')' #parenthesizedExpression
;
comparisonOperator
: EQ | NEQ | NEQJ | LT | LTE | GT | GTE | NSEQ
;
whenClause
: WHEN condition=expression THEN result=expression
;
functionName
: IDENTIFIER
;
identifier
: {!bracket_enbled}? IDENTIFIER
| {bracket_enbled}? LBRACKET IDENTIFIER RBRACKET
;
constant
: NULL #nullLiteral
| number #numericLiteral
| booleanValue #booleanLiteral
| STRING+ #stringLiteral
;
setQuantifier
: DISTINCT
| ALL
;
number
: MINUS? INTEGER_VALUE #integerLiteral
| MINUS? BIGINT_LITERAL #bigIntLiteral
| MINUS? SMALLINT_LITERAL #smallIntLiteral
| MINUS? TINYINT_LITERAL #tinyIntLiteral
| MINUS? DOUBLE_LITERAL #doubleLiteral
| MINUS? BIGDECIMAL_LITERAL #bigDecimalLiteral
;
booleanValue
: TRUE | FALSE
;
STRING
: '\'' ( ~('\''|'\\') | ('\\' .) )* '\''
| '"' ( ~('"'|'\\') | ('\\' .) )* '"'
;
TRUE: 'TRUE';
FALSE: 'FALSE';
NULL: 'NULL';
CASE: 'CASE';
WHEN: 'WHEN';
THEN: 'THEN';
ELSE: 'ELSE';
END: 'END';
DISTINCT: 'DISTINCT';
ALL: 'ALL';
NOT: 'NOT';
AND: 'AND';
OR: 'OR';
BETWEEN: 'BETWEEN';
IN: 'IN';
RLIKE: 'RLIKE';
LIKE: 'LIKE';
IS: 'IS';
ESCAPE: 'ESCAPE';
UNKNOWN: 'UNKNOWN';
EQ : '=' | '==';
NSEQ: '<=>';
NEQ : '<>';
NEQJ: '!=';
LT : '<';
LTE : '<=';
GT : '>';
GTE : '>=';
LBRACKET : '[' ;
RBRACKET : ']' ;
PLUS: '+';
MINUS: '-';
ASTERISK: '*';
SLASH: '/';
PERCENT: '%';
DIV: 'DIV';
TILDE: '~';
AMPERSAND: '&';
PIPE: '|';
CONCAT_PIPE: '||';
HAT: '^';
BIGINT_LITERAL
: DIGIT+ 'L'
;
SMALLINT_LITERAL
: DIGIT+ 'S'
;
TINYINT_LITERAL
: DIGIT+ 'Y'
;
INTEGER_VALUE
: DIGIT+
;
IDENTIFIER
: (LETTER | DIGIT | '_')+
;
fragment EXPONENT
: 'E' [+-]? DIGIT+
;
fragment DECIMAL_DIGITS
: DIGIT+ '.' DIGIT*
| '.' DIGIT+
;
DOUBLE_LITERAL
: DIGIT+ EXPONENT? 'D'
| DECIMAL_DIGITS EXPONENT? 'D'
;
BIGDECIMAL_LITERAL
: DIGIT+ EXPONENT? 'BD'
| DECIMAL_DIGITS EXPONENT? 'BD'
;
fragment DIGIT
: [0-9]
;
fragment LETTER
: [a-zA-Z]
| ~[\u0000-\u007F\uD800-\uDBFF] // covers all characters above 0x7F which are not a surrogate
| [\uD800-\uDBFF] [\uDC00-\uDFFF] // covers UTF-16 surrogate pairs encodings for U+10000 to U+10FFFF
;
SIMPLE_COMMENT
: '--' ('\\\n' | ~[\r\n])* '\r'? '\n'? -> channel(HIDDEN)
;
BRACKETED_EMPTY_COMMENT
: '/**/' -> channel(HIDDEN)
;
BRACKETED_COMMENT
: '/*' ~[+] .*? '*/' -> channel(HIDDEN)
;
WS : [ \r\n\t] + -> skip ;
================================================
FILE: superior-arithmetic-parser/src/main/kotlin/io/github/melin/superior/parser/arithmetic/AbstractArithParser.kt
================================================
package io.github.melin.superior.parser.arithmetic
import io.github.melin.superior.common.antlr4.AntlrCaches
import io.github.melin.superior.parser.antlr4.arithmetic.ArithmeticParser
import java.util.concurrent.atomic.AtomicReference
object AbstractArithParser {
private val parserCaches = AtomicReference<AntlrCaches>(AntlrCaches(ArithmeticParser._ATN))
/**
* Install the parser caches into the given parser.
*
* This method should be called before parsing any input.
*/
fun installCaches(parser: ArithmeticParser): Unit = parserCaches.get().installCaches(parser)
/**
* Drop the existing parser caches and create a new one.
*
* ANTLR retains caches in its parser that are never released. This speeds up parsing of future input, but it can
* consume a lot of memory depending on the input seen so far.
*
* This method provides a mechanism to free the retained caches, which can be useful after parsing very large SQL
* inputs, especially if those large inputs are unlikely to be similar to future inputs seen by the driver.
*/
fun refreshParserCaches() {
parserCaches.set(AntlrCaches(ArithmeticParser._ATN))
}
}
================================================
FILE: superior-arithmetic-parser/src/main/kotlin/io/github/melin/superior/parser/arithmetic/ArithmeticAntlr4Visitor.kt
================================================
package com.github.melin.superior.sql.parser.arithmetic
import io.github.melin.superior.common.SQLParserException
import io.github.melin.superior.common.relational.Statement
import io.github.melin.superior.parser.antlr4.arithmetic.ArithmeticBaseVisitor
import io.github.melin.superior.parser.antlr4.arithmetic.ArithmeticParser
import io.github.melin.superior.parser.arithmetic.ArithmeticData
import org.antlr.v4.runtime.tree.ParseTree
import org.apache.commons.lang3.StringUtils
/** Created by libinsong on 2020/7/28 9:49 上午 */
class ArithmeticAntlr4Visitor(val bracketEnbled: Boolean) : ArithmeticBaseVisitor<Statement>() {
private var statement: Statement? = null
private val arithmetic = ArithmeticData()
override fun visit(tree: ParseTree): Statement? {
super.visit(tree)
if (statement == null) {
throw SQLParserException("不支持的表达式")
}
return statement
}
override fun visitExpression(ctx: ArithmeticParser.ExpressionContext): Statement? {
statement = arithmetic
return super.visitExpression(ctx)
}
override fun visitIdentifier(ctx: ArithmeticParser.IdentifierContext): Statement? {
val name = ctx.text
if (!arithmetic.functions.contains(name)) {
if (bracketEnbled) {
arithmetic.variables.add(StringUtils.substringBetween(name, "[", "]"))
} else {
arithmetic.variables.add(name)
}
}
return super.visitIdentifier(ctx)
}
override fun visitFunctionName(ctx: ArithmeticParser.FunctionNameContext): Statement? {
val name = ctx.text
arithmetic.functions.add(name)
return super.visitFunctionName(ctx)
}
}
================================================
FILE: superior-arithmetic-parser/src/main/kotlin/io/github/melin/superior/parser/arithmetic/ArithmeticHelper.kt
================================================
package com.github.melin.superior.sql.parser.arithmetic
import io.github.melin.superior.common.antlr4.AntlrCaches
import io.github.melin.superior.common.antlr4.ParseException
import io.github.melin.superior.common.relational.Statement
import io.github.melin.superior.parser.antlr4.arithmetic.ArithmeticLexer
import io.github.melin.superior.parser.antlr4.arithmetic.ArithmeticParser
import io.github.melin.superior.parser.arithmetic.AbstractArithParser
import org.antlr.v4.runtime.CharStreams
import org.antlr.v4.runtime.CommonTokenStream
import org.antlr.v4.runtime.atn.PredictionMode
import org.antlr.v4.runtime.misc.ParseCancellationException
import org.apache.commons.lang3.StringUtils
/** Created by libinsong on 2018/1/10. */
object ArithmeticHelper {
@JvmStatic
fun parseStatement(command: String): Statement? {
return ArithmeticHelper.parseStatement(command, true)
}
@JvmStatic
fun parseStatement(command: String, bracketEnbled: Boolean): Statement? {
val trimCmd = StringUtils.trim(command)
val charStream = CharStreams.fromString(trimCmd)
val lexer = ArithmeticLexer(charStream)
val tokenStream = CommonTokenStream(lexer)
val parser = ArithmeticParser(tokenStream)
AbstractArithParser.installCaches(parser)
parser.bracket_enbled = bracketEnbled
parser.interpreter.predictionMode = PredictionMode.SLL
val sqlVisitor = ArithmeticAntlr4Visitor(bracketEnbled)
try {
try {
// first, try parsing with potentially faster SLL mode
return sqlVisitor.visit(parser.expression())
} catch (e: ParseCancellationException) {
tokenStream.seek(0) // rewind input stream
parser.reset()
// Try Again.
parser.interpreter.predictionMode = PredictionMode.LL
return sqlVisitor.visit(parser.expression())
}
} catch (e: ParseException) {
if (StringUtils.isNotBlank(e.command)) {
throw e
} else {
throw e.withCommand(trimCmd)
}
} finally {
val releaseAntlrCache = System.getenv(AntlrCaches.RELEASE_ANTLR_CACHE_AFTER_PARSING)
if (releaseAntlrCache == null || "true".equals(releaseAntlrCache)) {
AbstractArithParser.refreshParserCaches()
}
}
}
}
================================================
FILE: superior-arithmetic-parser/src/main/kotlin/io/github/melin/superior/parser/arithmetic/Data.kt
================================================
package io.github.melin.superior.parser.arithmetic
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
data class ArithmeticData(
val variables: java.util.HashSet<String> = HashSet(),
val functions: java.util.HashSet<String> = HashSet()
) : Statement() {
override val statementType = StatementType.ARITHMETIC
override val privilegeType = PrivilegeType.OTHER
override val sqlType = SqlType.DML
}
================================================
FILE: superior-arithmetic-parser/src/test/kotlin/io/github/melin/superior/parser/arithmetic/ArithmetricParserTest.kt
================================================
package io.github.melin.superior.parser.arithmetic
import com.github.melin.superior.sql.parser.arithmetic.ArithmeticHelper
import io.github.melin.superior.common.StatementType
import org.junit.Assert
import org.junit.Test
/** Created by libinsong on 2018/1/10. */
class ArithmetricParserTest {
@Test
fun test0() {
val sql = """
特征1 / (特征_dd_2
- (log2(feature_12) + 特征3))
"""
val statement = ArithmeticHelper.parseStatement(sql, false)
Assert.assertEquals(StatementType.ARITHMETIC, statement?.statementType)
if (statement is ArithmeticData) {
Assert.assertEquals(4, statement.variables.toArray().size)
Assert.assertEquals(1, statement.functions.size)
Assert.assertEquals("log2", statement.functions.toArray().get(0))
} else {
Assert.fail()
}
}
@Test
fun test1() {
val sql =
"""
case when rand <= 12 then 1
when rand <= 23 then 2
else 3 end
"""
val statement = ArithmeticHelper.parseStatement(sql, false)
Assert.assertEquals(StatementType.ARITHMETIC, statement?.statementType)
if (statement is ArithmeticData) {
Assert.assertEquals(1, statement.variables.toArray().size)
Assert.assertEquals(0, statement.functions.size)
} else {
Assert.fail()
}
}
@Test
fun test2() {
val sql = """
[特征1] / ([特征_dd_2]
- (log2([feature_12]) + [特征3]))
"""
val statement = ArithmeticHelper.parseStatement(sql)
Assert.assertEquals(StatementType.ARITHMETIC, statement?.statementType)
if (statement is ArithmeticData) {
Assert.assertEquals(4, statement.variables.toArray().size)
Assert.assertEquals(1, statement.functions.size)
Assert.assertEquals("log2", statement.functions.toArray().get(0))
} else {
Assert.fail()
}
}
}
================================================
FILE: superior-arithmetic-parser/src/test/resources/log4j2.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout
pattern="%style{%d{ISO8601}}{black} %highlight{%-5level }[%style{%t}{bright,blue}] %style{%C{1.}}{bright,yellow}: %msg%n%throwable" />
</Console>
</Appenders>
<Loggers>
<!-- LOG everything at INFO level -->
<Root level="INFO">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
================================================
FILE: superior-common-parser/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>io.github.melin.superior</groupId>
<artifactId>superior-sql-parser</artifactId>
<version>4.0.23</version>
</parent>
<artifactId>superior-common-parser</artifactId>
<name>superior-common-parser</name>
</project>
================================================
FILE: superior-common-parser/src/main/java/io/github/melin/superior/common/antlr4/AntlrCaches.java
================================================
package io.github.melin.superior.common.antlr4;
import org.antlr.v4.runtime.Parser;
import org.antlr.v4.runtime.atn.ATN;
import org.antlr.v4.runtime.atn.ParserATNSimulator;
import org.antlr.v4.runtime.atn.PredictionContextCache;
import org.antlr.v4.runtime.dfa.DFA;
public class AntlrCaches {
public static final String RELEASE_ANTLR_CACHE_AFTER_PARSING = "releaseAntlrCacheAfterParsing";
private final ATN atn;
private final PredictionContextCache predictionContextCache = new PredictionContextCache();
private final DFA[] decisionToDFA;
public AntlrCaches(ATN atn) {
this.atn = atn;
this.decisionToDFA = makeDecisionToDFA(this.atn);
}
public void installCaches(Parser parser) {
parser.setInterpreter(new ParserATNSimulator(parser, atn, decisionToDFA, predictionContextCache));
}
private DFA[] makeDecisionToDFA(ATN atn) {
DFA[] decisionToDFA = new DFA[atn.getNumberOfDecisions()];
for (int i = 0, len = atn.getNumberOfDecisions(); i < len; i++) {
decisionToDFA[i] = new DFA(atn.getDecisionState(i), i);
}
return decisionToDFA;
}
}
================================================
FILE: superior-common-parser/src/main/java/io/github/melin/superior/common/antlr4/Origin.java
================================================
package io.github.melin.superior.common.antlr4;
public class Origin {
private int line;
private int startPosition;
public Origin(int line, int startPosition) {
this.line = line;
this.startPosition = startPosition;
}
public int getLine() {
return line;
}
public void setLine(int line) {
this.line = line;
}
public int getStartPosition() {
return startPosition;
}
public void setStartPosition(int startPosition) {
this.startPosition = startPosition;
}
}
================================================
FILE: superior-common-parser/src/main/java/io/github/melin/superior/common/antlr4/ParseErrorListener.java
================================================
package io.github.melin.superior.common.antlr4;
import org.antlr.v4.runtime.BaseErrorListener;
import org.antlr.v4.runtime.RecognitionException;
import org.antlr.v4.runtime.Recognizer;
public class ParseErrorListener extends BaseErrorListener {
@Override
public void syntaxError(
Recognizer<?, ?> recognizer,
Object offendingSymbol,
int line,
int charPositionInLine,
java.lang.String msg,
RecognitionException e) {
Origin position = new Origin(line, charPositionInLine);
throw new ParseException(msg, position, position);
}
}
================================================
FILE: superior-common-parser/src/main/java/io/github/melin/superior/common/antlr4/ParseException.java
================================================
package io.github.melin.superior.common.antlr4;
import org.apache.commons.lang3.StringUtils;
public class ParseException extends RuntimeException {
private String command;
private String message;
private Origin start;
private Origin stop;
public ParseException(String message, Origin start, Origin stop) {
this.message = message;
this.start = start;
this.stop = stop;
}
public ParseException(String command, String message, Origin start, Origin stop) {
this.command = command;
this.message = message;
this.start = start;
this.stop = stop;
}
@Override
public String getMessage() {
StringBuilder builder = new StringBuilder();
builder.append("\n").append(message);
if (start != null) {
builder.append("(line " + start.getLine() + ", pos " + start.getStartPosition() + ")\n");
if (StringUtils.isNotBlank(command)) {
String[] lines = command.split("\n");
builder.append("\n== SQL ==\n");
for (int i = 0; i < start.getLine(); i++) {
builder.append(lines[i]).append("\n");
}
for (int i = 0; i < start.getStartPosition(); i++) {
builder.append("-");
}
builder.append("^^^\n");
for (int i = start.getLine(); i < lines.length; i++) {
builder.append(lines[i]).append("\n");
}
}
} else {
builder.append("\n== SQL ==\n").append(command);
}
return StringUtils.trim(builder.toString());
}
public ParseException withCommand(String cmd) {
return new ParseException(cmd, message, start, stop);
}
public String getCommand() {
return command;
}
public Origin getStart() {
return start;
}
public Origin getStop() {
return stop;
}
}
================================================
FILE: superior-common-parser/src/main/java/io/github/melin/superior/common/antlr4/ParserUtils.java
================================================
package io.github.melin.superior.common.antlr4;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.Token;
import org.antlr.v4.runtime.misc.Interval;
import org.antlr.v4.runtime.tree.TerminalNode;
public class ParserUtils {
/** Get the code that creates the given node. */
public static String source(ParserRuleContext ctx) {
CharStream stream = ctx.getStart().getInputStream();
return stream.getText(
Interval.of(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex()));
}
public static String getString(Token token) {
return unescapeSQLString(token.getText());
}
public static String getString(TerminalNode token) {
return unescapeSQLString(token.getText());
}
public static int getInt(Token token) {
return Integer.parseInt(token.getText());
}
public static String command(ParserRuleContext ctx) {
CharStream stream = ctx.getStart().getInputStream();
return stream.getText(Interval.of(0, stream.size()));
}
public static Origin position(Token token) {
return new Origin(token.getLine(), token.getCharPositionInLine());
}
private static void appendEscapedChar(StringBuilder sb, char n) {
switch (n) {
case '0':
sb.append("\u0000");
case '\'':
sb.append("\'");
case '"':
sb.append("\"");
case 'b':
sb.append("\b");
case 'n':
sb.append("\n");
case 'r':
sb.append("\r");
case 't':
sb.append("\t");
case 'Z':
sb.append("\u001A");
case '\\':
sb.append("\\");
// The following 2 lines are exactly what MySQL does TODO: why do we do this?
case '%':
sb.append("\\%");
case '_':
sb.append("\\_");
default:
sb.append(n);
}
}
private static String unescapeSQLString(String b) {
Character enclosure = null;
StringBuilder sb = new StringBuilder(b.length());
int i = 0;
int strLength = b.length();
while (i < strLength) {
char currentChar = b.charAt(i);
if (enclosure == null) {
if (currentChar == '\'' || currentChar == '\"') {
enclosure = currentChar;
}
} else if (enclosure == currentChar) {
enclosure = null;
} else if (currentChar == '\\') {
if ((i + 6 < strLength) && b.charAt(i + 1) == 'u') {
// \u0000 style character literals.
int code = 0;
int base = i + 2;
for (int h = 0; h < 4; h++) {
int digit = Character.digit(b.charAt(h + base), 16);
code = (code << 4) + digit;
}
sb.append((char) code);
i += 5;
} else if (i + 4 < strLength) {
// \000 style character literals.
char i1 = b.charAt(i + 1);
char i2 = b.charAt(i + 2);
char i3 = b.charAt(i + 3);
if ((i1 >= '0' && i1 <= '1') && (i2 >= '0' && i2 <= '7') && (i3 >= '0' && i3 <= '7')) {
char tmp = (char) ((i3 - '0') + ((i2 - '0') << 3) + ((i1 - '0') << 6));
sb.append(tmp);
i += 3;
} else {
appendEscapedChar(sb, i1);
i += 1;
}
} else if (i + 2 < strLength) {
// escaped character literals.
char n = b.charAt(i + 1);
appendEscapedChar(sb, n);
i += 1;
}
} else {
// non-escaped character literals.
sb.append(currentChar);
}
i += 1;
}
return sb.toString();
}
}
================================================
FILE: superior-common-parser/src/main/java/io/github/melin/superior/common/antlr4/UpperCaseCharStream.java
================================================
package io.github.melin.superior.common.antlr4;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.CodePointCharStream;
import org.antlr.v4.runtime.IntStream;
import org.antlr.v4.runtime.misc.Interval;
public class UpperCaseCharStream implements CharStream {
private CodePointCharStream wrapped;
public UpperCaseCharStream(CodePointCharStream wrapped) {
this.wrapped = wrapped;
}
@Override
public void consume() {
wrapped.consume();
}
@Override
public int LA(int i) {
int la = wrapped.LA(i);
if (la == 0 || la == IntStream.EOF) {
return la;
} else {
return Character.toUpperCase(la);
}
}
@Override
public String getText(Interval interval) {
if (size() > 0 && (interval.b - interval.a >= 0)) {
return wrapped.getText(interval);
} else {
return "";
}
}
@Override
public int mark() {
return wrapped.mark();
}
@Override
public void release(int i) {
wrapped.release(i);
}
@Override
public int index() {
return wrapped.index();
}
@Override
public void seek(int i) {
wrapped.seek(i);
}
@Override
public int size() {
return wrapped.size();
}
@Override
public String getSourceName() {
return wrapped.getSourceName();
}
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/AlterActionType.kt
================================================
package io.github.melin.superior.common
import java.io.Serializable
enum class AlterActionType : Serializable {
SET_PROPS,
SET_SERDE,
TOUCH_TABLE,
ALTER_COLUMN,
ALTER_VIEW_QUERY,
ADD_UNIQUE_KEY,
ADD_PRIMARY_KEY,
ADD_INDEX,
ADD_PARTITION,
DROP_INDEX,
ADD_COLUMN,
SET_COLUMN_DEFAULT,
DROP_COLUMN,
DROP_COLUMN_DRFAULT,
DROP_PARTITION,
DROP_PRIMARY_KEY,
RENAME,
RENAME_PARTITION,
DETACH_PARTITION,
ATTACH_PARTITION,
TRUNCATE_PARTITION,
REFRESH_MV,
// Iceberg SQL Extensions
CREATE_TAG,
CREATE_BRANCH,
DROP_TAG,
DROP_BRANCH,
ADD_PARTITION_FIELD,
DROP_PARTITION_FIELD,
REPLACE_PARTITION_FIELD,
SET_WRITE_DISTRIBUTION_AND_ORDERING,
SET_IDENTIFIER_FIELDS,
DROP_IDENTIFIER_FIELDS,
// delta
ADD_CONSTRAINT,
DROP_CONSTRAINT,
DROP_FEATURE,
CLUSTER_BY,
SYNC_IDENTITY,
UNKOWN
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/PrivilegeType.kt
================================================
package io.github.melin.superior.common
enum class PrivilegeType {
READ,
WRITE,
ALTER,
DROP,
ADMIN,
CREATE,
PROCEDURE,
OTHER,
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/SQLParserException.kt
================================================
package io.github.melin.superior.common
class SQLParserException : RuntimeException {
constructor(message: String, ex: Exception?) : super(message, ex) {}
constructor(message: String) : super(message) {}
constructor(ex: Exception) : super(ex) {}
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/SqlType.kt
================================================
package io.github.melin.superior.common
enum class SqlType(val desc: String) {
DML("Data Manipulation Language"),
DDL("Data Definition Language"),
DQL("Data Query Language"),
DCL("Data Control Language"),
TCL("Transaction Control Language")
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/StatementType.kt
================================================
package io.github.melin.superior.common
import java.io.Serializable
/** Created by libinsong on 2017/3/6. */
enum class StatementType : Serializable {
CREATE_CATALOG,
CREATE_DATABASE,
CREATE_SCHEMA,
CREATE_TABLE,
CREATE_TABLE_AS_SELECT,
CREATE_TABLE_AS_LIKE,
CREATE_MATERIALIZED_VIEW,
CREATE_VIEW,
CREATE_FILE_VIEW, // spark
CREATE_TEMP_VIEW_USING, // spark
CREATE_FUNCTION,
CREATE_PROCEDURE,
DROP_CATALOG,
DROP_DATABASE,
DROP_SCHEMA,
DROP_TABLE,
DROP_VIEW,
DROP_MATERIALIZED_VIEW,
DROP_FUNCTION,
DROP_SEQUENCE,
DROP_PROCEDURE,
TRUNCATE_TABLE,
REFRESH_TABLE,
EXPORT_TABLE,
CANCEL_EXPORT,
ANALYZE_TABLE,
ALTER_DATABASE,
ALTER_VIEW,
ALTER_MATERIALIZED_VIEW,
ALTER_TABLE,
REPAIR_TABLE,
COMMENT,
// DML
SELECT,
DELETE,
UPDATE,
MERGE,
INSERT,
LOAD_DATA, // spark
SHOW,
DESC,
// spark
CACHE,
UNCACHE,
CLEAR_CACHE,
// spark delta
VACUUM_TABLE,
OPTIMIZE_TABLE,
DESC_DELTA_DETAIL,
DESC_DELTA_HISTORY,
// spark
DESC_FUNCTION,
DESC_CATALOG,
DESC_DATABASE,
DESC_SCHEMA,
DESC_TABLE,
DESC_QUERY,
//
REFRESH_MV,
CANCEL_REFRESH_MV,
EXPLAIN,
SET,
RESET,
USE,
SPARK_DIST_CP,
DATATUNNEL, // spark
MERGE_FILE, // spark
APP_JAR, // spark
CALL, // hudi
HELP, // hudi
ARITHMETIC,
// StarRocks
SR_SUBMIT_TASK,
SR_DROP_TASK,
SR_CREATE_ROUTINE_LOAD,
SR_PAUSE_ROUTINE_LOAD,
SR_RESUME_ROUTINE_LOAD,
SR_STOP_ROUTINE_LOAD,
SR_ALTER_ROUTINE_LOAD,
LOAD_TABLE,
CANCEL_LOAD_TABLE,
ALTER_LOAD_TABLE,
ADD_RESOURCE,
LIST_RESOURCE,
REMOVE_RESOURCE,
SYNC_META,
SYNC_TABLE,
SYNC_DATABASE,
UNKOWN
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/TableType.kt
================================================
package io.github.melin.superior.common
enum class TableType {
HIVE,
MYSQL,
ORACLE,
STARROCKS,
POSTGRES,
SQLSERVER,
FLINK,
SPARK_STREAM,
DAMENG,
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/AnalyzeTable.kt
================================================
package io.github.melin.superior.common.relational
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
data class AnalyzeTable(val tableIds: List<TableId>) : Statement() {
override val statementType = StatementType.ANALYZE_TABLE
override val privilegeType = PrivilegeType.READ
override val sqlType = SqlType.DML
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/DefaultStatement.kt
================================================
package io.github.melin.superior.common.relational
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
class DefaultStatement(override val statementType: StatementType) : Statement() {
override val privilegeType = PrivilegeType.OTHER
override val sqlType = SqlType.DML
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/FunctionId.kt
================================================
package io.github.melin.superior.common.relational
import com.google.common.collect.Lists
import org.apache.commons.lang3.StringUtils
data class FunctionId(
val catalogName: String?,
val schemaName: String?,
val functionName: String,
) {
companion object {
@JvmStatic fun of(functionName: String) = TableId(functionName)
@JvmStatic fun of(schemaName: String, functionName: String) = TableId(schemaName, functionName)
@JvmStatic
fun of(catalogName: String, schemaName: String, functionName: String) =
TableId(catalogName, schemaName, functionName)
}
var funcType: String = "CF" // callfunction & TVF
var functionArguments: List<String> = Lists.newArrayList()
constructor(schemaName: String?, tableName: String) : this(null, schemaName, tableName)
constructor(tableName: String) : this(null, null, tableName)
fun getFullFunctionName(): String {
if (catalogName != null) {
return "$catalogName.$schemaName.$functionName"
}
if (schemaName != null) {
return "$schemaName.$functionName"
}
return functionName
}
fun getLowerCatalogName(): String {
return StringUtils.lowerCase(catalogName)
}
fun getLowerSchemaName(): String {
return StringUtils.lowerCase(schemaName)
}
fun getLowerTableName(): String {
return StringUtils.lowerCase(functionName)
}
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/ProcedureId.kt
================================================
package io.github.melin.superior.common.relational
import org.apache.commons.lang3.StringUtils
data class ProcedureId(val catalogName: String?, val schemaName: String?, val procedureName: String) {
constructor(schemaName: String?, procedureName: String) : this(null, schemaName, procedureName)
constructor(procedureName: String) : this(null, null, procedureName)
fun getFullFunctionName(): String {
if (catalogName != null) {
return "${catalogName}.${schemaName}.${procedureName}"
}
if (schemaName != null) {
return "${schemaName}.${procedureName}"
}
return procedureName
}
fun getLowerCatalogName(): String {
return StringUtils.lowerCase(catalogName)
}
fun getLowerSchemaName(): String {
return StringUtils.lowerCase(schemaName)
}
fun getLowerTableName(): String {
return StringUtils.lowerCase(procedureName)
}
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/SchemaId.kt
================================================
package io.github.melin.superior.common.relational
import org.apache.commons.lang3.StringUtils
data class SchemaId(val catalogName: String?, val schemaName: String) {
companion object {
@JvmStatic fun of(schemaName: String) = SchemaId(schemaName)
@JvmStatic fun of(catalogName: String, schemaName: String) = SchemaId(catalogName, schemaName)
}
constructor(schemaName: String) : this(null, schemaName)
fun getFullSchemaName(): String {
if (catalogName != null) {
return "${catalogName}.${schemaName}"
}
return schemaName
}
fun getLowerCatalogName(): String {
return StringUtils.lowerCase(catalogName)
}
fun getLowerSchemaName(): String {
return StringUtils.lowerCase(schemaName)
}
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/Statement.kt
================================================
package io.github.melin.superior.common.relational
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import org.apache.commons.lang3.StringUtils
import java.io.Serializable
abstract class Statement : Serializable {
abstract val statementType: StatementType
abstract val privilegeType: PrivilegeType
abstract val sqlType: SqlType
private var sql: String = ""
fun setSql(sql: String) {
if (StringUtils.endsWith(sql, ";")) {
this.sql = StringUtils.substringBeforeLast(sql, ";")
} else {
this.sql = sql
}
}
fun getSql(): String {
return this.sql
}
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/TableId.kt
================================================
package io.github.melin.superior.common.relational
import org.apache.commons.lang3.StringUtils
data class TableId(val catalogName: String?, val schemaName: String?, val tableName: String, val metaType: String?) {
companion object {
@JvmStatic fun of(tableName: String) = TableId(tableName)
@JvmStatic fun of(schemaName: String, tableName: String) = TableId(schemaName, tableName)
@JvmStatic
fun of(catalogName: String, schemaName: String, tableName: String) = TableId(catalogName, schemaName, tableName)
}
constructor(
catalogName: String?,
schemaName: String?,
tableName: String
) : this(catalogName, schemaName, tableName, null)
constructor(schemaName: String?, tableName: String) : this(null, schemaName, tableName, null)
constructor(tableName: String) : this(null, null, tableName, null)
fun getFullTableName(): String {
if (catalogName != null) {
return "${catalogName}.${schemaName}.${tableName}"
}
if (schemaName != null) {
return "${schemaName}.${tableName}"
}
return tableName
}
fun getLowerCatalogName(): String {
return StringUtils.lowerCase(catalogName)
}
fun getLowerSchemaName(): String {
return StringUtils.lowerCase(schemaName)
}
fun getLowerTableName(): String {
return StringUtils.lowerCase(tableName)
}
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/abs/AbsDatabaseStatement.kt
================================================
package io.github.melin.superior.common.relational.abs
import io.github.melin.superior.common.relational.Statement
abstract class AbsDatabaseStatement : Statement() {
abstract val databaseName: String
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/abs/AbsTableStatement.kt
================================================
package io.github.melin.superior.common.relational.abs
import io.github.melin.superior.common.relational.Statement
import io.github.melin.superior.common.relational.TableId
abstract class AbsTableStatement : Statement() {
abstract val tableId: TableId
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/alter/AlterAction.kt
================================================
package io.github.melin.superior.common.relational.alter
import io.github.melin.superior.common.AlterActionType
import io.github.melin.superior.common.PrivilegeType
abstract class AlterAction(val privilegeType: PrivilegeType = PrivilegeType.ALTER) {
abstract val alterType: AlterActionType
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/alter/AlterActions.kt
================================================
package io.github.melin.superior.common.relational.alter
import com.google.common.collect.Maps
import io.github.melin.superior.common.AlterActionType
import io.github.melin.superior.common.relational.SortType
import io.github.melin.superior.common.relational.TableId
import io.github.melin.superior.common.relational.dml.QueryStmt
import io.github.melin.superior.common.relational.table.ColumnRel
import java.util.HashMap
data class AlterTableAction(override var alterType: AlterActionType) : AlterAction()
data class AlterPropsAction(var location: String? = null, var properties: HashMap<String, String> = Maps.newHashMap()) :
AlterAction() {
override var alterType: AlterActionType = AlterActionType.SET_PROPS
constructor(properties: HashMap<String, String>) : this(null, properties)
}
data class AlterSerDeAction(var properties: HashMap<String, String> = Maps.newHashMap()) : AlterAction() {
override var alterType: AlterActionType = AlterActionType.SET_SERDE
}
data class RenameAction(var newTableId: TableId, var ifExists: Boolean = false) : AlterAction() {
override var alterType: AlterActionType = AlterActionType.RENAME
}
data class AlterTouchPartitionAction(
val newTableId: TableId, // 修改表,新列名称
val partitionVals: LinkedHashMap<String, String>?
) : AlterAction() {
override var alterType: AlterActionType = AlterActionType.TOUCH_TABLE
}
data class AlterViewAction(
val queryStmt: QueryStmt // 修改表,新列名称
) : AlterAction() {
override var alterType: AlterActionType = AlterActionType.ALTER_VIEW_QUERY
}
data class RefreshMvAction(var async: Boolean = false) : AlterAction() {
override var alterType: AlterActionType = AlterActionType.REFRESH_MV
}
data class AlterColumnAction(
override var alterType: AlterActionType,
var columName: String? = null, // 修改列名
var dataType: String? = null,
var comment: String? = null,
var position: String? = null,
var afterCol: String? = null,
var setOrDrop: String? = null,
var nullable: Boolean = true,
var defaultExpression: String? = null,
var dropDefault: Boolean = false,
var ifNotExists: Boolean = false
) : AlterAction() {
var newColumName: String? = null // 修改列名,新列名称
fun getColumn(): ColumnRel? {
return if (columName != null) {
ColumnRel(columName!!, dataType, comment, nullable, defaultExpression)
} else {
null
}
}
}
data class DropColumnAction(var columNames: ArrayList<String> = arrayListOf()) : AlterAction() {
override var alterType: AlterActionType = AlterActionType.DROP_COLUMN
fun firstColumn(): String {
return columNames.first()
}
constructor(columName: String) : this(arrayListOf(columName))
}
data class AddPartitionAction(var ifNotExists: Boolean = false, var partitions: List<LinkedHashMap<String, String>>) :
AlterAction() {
override var alterType: AlterActionType = AlterActionType.ADD_PARTITION
}
data class DropPartitionAction(
var ifExists: Boolean = false,
var partitions: List<LinkedHashMap<String, String>> = listOf()
) : AlterAction() {
override var alterType: AlterActionType = AlterActionType.DROP_PARTITION
}
data class RenamePartitionAction(
var fromPartitionVals: LinkedHashMap<String, String>,
var toPartitionVals: LinkedHashMap<String, String>
) : AlterAction() {
override var alterType: AlterActionType = AlterActionType.RENAME_PARTITION
}
data class CreateIndex(val indexName: String, val indexColumnNames: ArrayList<IndexColumnName> = arrayListOf()) :
AlterAction() {
override var alterType: AlterActionType = AlterActionType.ADD_INDEX
var intimeAction: String = "ONLINE" // mysql ONLINE & OFFLINE
var indexCategory: String? = null
var indexType: String? = null
var comment: String? = null
}
data class IndexColumnName(
val columnName: String,
val sortType: SortType = SortType.UNKOWN,
)
data class DropIndex(val indexName: String, var ifExists: Boolean = false) : AlterAction() {
override var alterType: AlterActionType = AlterActionType.DROP_INDEX
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/alter/AlterDatabase.kt
================================================
package io.github.melin.superior.common.relational.alter
import io.github.melin.superior.common.*
import io.github.melin.superior.common.relational.abs.AbsDatabaseStatement
import kotlin.collections.ArrayList
data class AlterDatabase(
val alterActionType: AlterActionType,
override val databaseName: String,
private val action: AlterAction?
) : AbsDatabaseStatement() {
override val statementType = StatementType.ALTER_DATABASE
override val privilegeType = PrivilegeType.ALTER
override val sqlType = SqlType.DDL
val actions: ArrayList<AlterAction> = ArrayList()
var ifExists: Boolean = false
init {
if (action != null) {
actions.add(action)
}
}
constructor(alterActionType: AlterActionType, databaseName: String) : this(alterActionType, databaseName, null)
fun addActions(list: List<AlterAction>) {
actions.addAll(list)
}
fun firstAction(): AlterAction {
return actions.first()
}
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/alter/AlterDatabaseActions.kt
================================================
package io.github.melin.superior.common.relational.alter
import com.google.common.collect.Maps
import io.github.melin.superior.common.AlterActionType
import java.util.HashMap
data class AlterDbPropsAction(
var location: String? = null,
var properties: HashMap<String, String> = Maps.newHashMap()
) : AlterAction() {
override var alterType: AlterActionType = AlterActionType.SET_PROPS
}
data class RenameDbAction(var newDatabaseName: String) : AlterAction() {
override var alterType: AlterActionType = AlterActionType.RENAME
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/alter/AlterMaterializedView.kt
================================================
package io.github.melin.superior.common.relational.alter
import io.github.melin.superior.common.*
import io.github.melin.superior.common.relational.TableId
import io.github.melin.superior.common.relational.abs.AbsTableStatement
import kotlin.collections.ArrayList
data class AlterMaterializedView(override val tableId: TableId, private val action: AlterAction?) :
AbsTableStatement() {
override val statementType = StatementType.ALTER_MATERIALIZED_VIEW
override val privilegeType = PrivilegeType.ALTER
override val sqlType = SqlType.DDL
val actions: ArrayList<AlterAction> = ArrayList()
var ifExists: Boolean = false
init {
if (action != null) {
actions.add(action)
}
}
constructor(tableId: TableId) : this(tableId, null)
fun addActions(list: List<AlterAction>) {
actions.addAll(list)
}
fun firstAction(): AlterAction {
return actions.first()
}
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/alter/AlterTable.kt
================================================
package io.github.melin.superior.common.relational.alter
import io.github.melin.superior.common.*
import io.github.melin.superior.common.relational.TableId
import io.github.melin.superior.common.relational.abs.AbsTableStatement
import kotlin.collections.ArrayList
data class AlterTable(
override val tableId: TableId,
private val action: AlterAction?,
) : AbsTableStatement() {
override val statementType = StatementType.ALTER_TABLE
override val privilegeType = PrivilegeType.ALTER
override val sqlType = SqlType.DDL
val actions: ArrayList<AlterAction> = ArrayList()
var ifExists: Boolean = false
init {
if (action != null) {
actions.add(action)
}
}
constructor(tableId: TableId) : this(tableId, null)
fun addAction(action: AlterAction) {
actions.add(action)
}
fun addActions(list: List<AlterAction>) {
actions.addAll(list)
}
fun firstAction(): AlterAction {
return if (action != null) action else actions.first()
}
fun getFirstAlterType(): AlterActionType {
val action = firstAction()
return action.alterType
}
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/alter/AlterView.kt
================================================
package io.github.melin.superior.common.relational.alter
import io.github.melin.superior.common.*
import io.github.melin.superior.common.relational.TableId
import io.github.melin.superior.common.relational.abs.AbsTableStatement
import kotlin.collections.ArrayList
data class AlterView(override val tableId: TableId, private val action: AlterAction?) : AbsTableStatement() {
override val statementType = StatementType.ALTER_VIEW
override val privilegeType = PrivilegeType.ALTER
override val sqlType = SqlType.DDL
val actions: ArrayList<AlterAction> = ArrayList()
var ifExists: Boolean = false
init {
if (action != null) {
actions.add(action)
}
}
constructor(tableId: TableId) : this(tableId, null)
fun addActions(list: List<AlterAction>) {
actions.addAll(list)
}
fun firstAction(): AlterAction {
return actions.first()
}
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/alter/DeltaAlterActions.kt
================================================
package io.github.melin.superior.common.relational.alter
import io.github.melin.superior.common.AlterActionType
class AlterAddConstraintAction() : AlterAction() {
override var alterType: AlterActionType = AlterActionType.ADD_CONSTRAINT
}
class AlterDropConstraintAction() : AlterAction() {
override var alterType: AlterActionType = AlterActionType.DROP_CONSTRAINT
}
class AlterDropFeatureAction() : AlterAction() {
override var alterType: AlterActionType = AlterActionType.DROP_FEATURE
}
class AlterClusterByAction() : AlterAction() {
override var alterType: AlterActionType = AlterActionType.CLUSTER_BY
}
class AlterSyncIdentityAction() : AlterAction() {
override var alterType: AlterActionType = AlterActionType.SYNC_IDENTITY
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/alter/IcebergAlterActions.kt
================================================
package io.github.melin.superior.common.relational.alter
import io.github.melin.superior.common.AlterActionType
data class AlterCreateTagAction(val tagName: String) : AlterAction() {
override var alterType: AlterActionType = AlterActionType.CREATE_TAG
}
data class AlterDropTagAction(val tagName: String) : AlterAction() {
override var alterType: AlterActionType = AlterActionType.DROP_TAG
}
data class AlterCreateBranchAction(val branchName: String) : AlterAction() {
override var alterType: AlterActionType = AlterActionType.CREATE_BRANCH
}
data class AlterDropBranchAction(val branchName: String) : AlterAction() {
override var alterType: AlterActionType = AlterActionType.DROP_BRANCH
}
data class AlterSetIdentifierFieldsAction(val fields: List<String>) : AlterAction() {
override var alterType: AlterActionType = AlterActionType.SET_IDENTIFIER_FIELDS
}
data class AlterDropIdentifierFieldsAction(val fields: List<String>) : AlterAction() {
override var alterType: AlterActionType = AlterActionType.DROP_IDENTIFIER_FIELDS
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/AddResourceStatement.kt
================================================
package io.github.melin.superior.common.relational.common
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
class AddResourceStatement(val fileNames: List<String>, val resourceType: String) : Statement() {
override val statementType = StatementType.ADD_RESOURCE
override val privilegeType = PrivilegeType.OTHER
override val sqlType = SqlType.DML
constructor(fileName: String, resourceType: String) : this(listOf(fileName), resourceType)
fun first(): String {
return fileNames.first()
}
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/CallProcedure.kt
================================================
package io.github.melin.superior.common.relational.common
import com.google.common.collect.Sets
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.ProcedureId
import io.github.melin.superior.common.relational.Statement
data class CallProcedure(var procedureIds: HashSet<ProcedureId>, var properties: Map<String, String> = mapOf()) :
Statement() {
override val statementType = StatementType.CALL
override val privilegeType = PrivilegeType.ADMIN
override val sqlType = SqlType.DML
constructor(procedureId: ProcedureId) : this(Sets.newHashSet(procedureId))
constructor(
procedureId: ProcedureId,
properties: Map<String, String>
) : this(Sets.newHashSet(procedureId), properties)
fun first(): ProcedureId {
return procedureIds.first()
}
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/CancelExport.kt
================================================
package io.github.melin.superior.common.relational.common
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
data class CancelExport(val database: String?, var queryId: String) : Statement() {
override val statementType = StatementType.CANCEL_EXPORT
override val privilegeType = PrivilegeType.ALTER
override val sqlType = SqlType.DML
constructor(queryId: String) : this(null, queryId)
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/CommentStatement.kt
================================================
package io.github.melin.superior.common.relational.common
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
data class CommentStatement(
val comment: String? = null,
val isNull: Boolean = false,
val objType: String? = null,
val objValue: String? = null
) : Statement() {
override val statementType = StatementType.COMMENT
override val privilegeType = PrivilegeType.ALTER
override val sqlType = SqlType.TCL
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/DescModel.kt
================================================
package io.github.melin.superior.common.relational.common
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.FunctionId
import io.github.melin.superior.common.relational.SchemaId
import io.github.melin.superior.common.relational.Statement
import io.github.melin.superior.common.relational.TableId
import io.github.melin.superior.common.relational.abs.AbsTableStatement
import io.github.melin.superior.common.relational.dml.QueryStmt
import org.apache.commons.lang3.StringUtils
class DescStatement(vararg val keywords: String) : Statement() {
override val statementType = StatementType.DESC
override val privilegeType = PrivilegeType.OTHER
override val sqlType = SqlType.DML
fun checkSql(sql: String): Boolean {
val words = StringUtils.split(sql, " ")
if (this.keywords.size != words.size) {
return false
}
val size = this.keywords.size
for (i in 0 until size) {
if (!StringUtils.equalsIgnoreCase(this.keywords.get(i), words[i])) {
return false
}
}
return true
}
}
// spark
data class DescFunction(val functionId: FunctionId) : Statement() {
override val statementType = StatementType.DESC_FUNCTION
override val privilegeType = PrivilegeType.READ
override val sqlType = SqlType.DDL
}
data class DescCatalog(val catalog: String) : Statement() {
override val statementType = StatementType.DESC_CATALOG
override val privilegeType = PrivilegeType.READ
override val sqlType = SqlType.DDL
}
// 适用pg 类型数据库
data class DescDatabase(val database: String) : Statement() {
override val statementType = StatementType.DESC_DATABASE
override val privilegeType = PrivilegeType.READ
override val sqlType = SqlType.DDL
}
data class DescSchema(val schemaId: SchemaId) : Statement() {
override val statementType = StatementType.DESC_SCHEMA
override val privilegeType = PrivilegeType.READ
override val sqlType = SqlType.DDL
}
data class DescTable(val tableId: TableId) : Statement() {
override val statementType = StatementType.DESC_TABLE
override val privilegeType = PrivilegeType.READ
override val sqlType = SqlType.DDL
}
data class DescQuery(val queryStmt: QueryStmt) : Statement() {
override val statementType = StatementType.DESC_QUERY
override val privilegeType = PrivilegeType.READ
override val sqlType = SqlType.DDL
}
// spark delta
data class DescDeltaDetail(override val tableId: TableId) : AbsTableStatement() {
override val statementType = StatementType.DESC_DELTA_DETAIL
override val privilegeType = PrivilegeType.READ
override val sqlType = SqlType.DDL
}
// spark delta
data class DescDeltaHistory(override val tableId: TableId, val limit: Int? = null) : AbsTableStatement() {
override val statementType = StatementType.DESC_DELTA_HISTORY
override val privilegeType = PrivilegeType.READ
override val sqlType = SqlType.DDL
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/ListResourceStatement.kt
================================================
package io.github.melin.superior.common.relational.common
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
class ListResourceStatement(val fileNames: List<String>, val resourceType: String) : Statement() {
override val statementType = StatementType.ADD_RESOURCE
override val privilegeType = PrivilegeType.OTHER
override val sqlType = SqlType.DML
constructor(fileName: String, resourceType: String) : this(listOf(fileName), resourceType)
fun first(): String {
return fileNames.first()
}
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/ReSetStatement.kt
================================================
package io.github.melin.superior.common.relational.common
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
data class ReSetStatement(val key: String) : Statement() {
override val statementType = StatementType.RESET
override val privilegeType = PrivilegeType.OTHER
override val sqlType = SqlType.TCL
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/RefreshMaterializedView.kt
================================================
package io.github.melin.superior.common.relational.common
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
import io.github.melin.superior.common.relational.TableId
data class RefreshMaterializedView(
val tableId: TableId,
val force: Boolean = false,
val mode: String = "Async",
val partitionStart: String? = null,
val partitionEnd: String? = null,
) : Statement() {
override val statementType = StatementType.REFRESH_MV
override val privilegeType = PrivilegeType.ADMIN
override val sqlType = SqlType.DML
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/RemoveResourceStatement.kt
================================================
package io.github.melin.superior.common.relational.common
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
class RemoveResourceStatement(val fileNames: List<String>, val resourceType: String) : Statement() {
override val statementType = StatementType.REMOVE_RESOURCE
override val privilegeType = PrivilegeType.OTHER
override val sqlType = SqlType.DML
constructor(fileName: String, resourceType: String) : this(listOf(fileName), resourceType)
fun first(): String {
return fileNames.first()
}
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/SetStatement.kt
================================================
package io.github.melin.superior.common.relational.common
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
data class SetStatement(val key: String, val value: String? = null) : Statement() {
override val statementType = StatementType.SET
override val privilegeType = PrivilegeType.OTHER
override val sqlType = SqlType.TCL
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/ShowStatement.kt
================================================
package io.github.melin.superior.common.relational.common
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
import org.apache.commons.lang3.StringUtils
class ShowStatement(vararg val keywords: String) : Statement() {
override val statementType = StatementType.SHOW
override val privilegeType = PrivilegeType.OTHER
override val sqlType = SqlType.DML
fun checkSql(sql: String): Boolean {
val words = StringUtils.split(sql, " ")
if (this.keywords.size != words.size) {
return false
}
val size = this.keywords.size
for (i in 0 until size) {
if (!StringUtils.equalsIgnoreCase(this.keywords.get(i), words[i])) {
return false
}
}
return true
}
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/SyncStatement.kt
================================================
package io.github.melin.superior.common.relational.common
import com.google.common.collect.Maps
import io.github.melin.superior.common.*
import io.github.melin.superior.common.relational.Statement
import io.github.melin.superior.common.relational.TableId
import io.github.melin.superior.common.relational.table.ColumnRel
data class SyncTable(
var sinkTableId: TableId,
var sourceTableId: TableId,
) : Statement() {
override val statementType = StatementType.SYNC_TABLE
override val privilegeType = PrivilegeType.CREATE
override val sqlType = SqlType.DML
val sinkOptions: HashMap<String, String> = Maps.newHashMap()
val sourceOptions: HashMap<String, String> = Maps.newHashMap()
var computeCols: List<ColumnRel>? = null
}
data class SyncDatabase(
var sinkCatalogName: String?,
var sinkDatabaseName: String,
var sourceCatalogName: String?,
var sourceDatabaseName: String,
var includingTables: String = ".*"
) : Statement() {
override val statementType = StatementType.SYNC_DATABASE
override val privilegeType = PrivilegeType.CREATE
override val sqlType = SqlType.DML
val sinkOptions: HashMap<String, String> = Maps.newHashMap()
val sourceOptions: HashMap<String, String> = Maps.newHashMap()
var excludingTables: String? = null
}
data class SyncDatabaseMetadata(val catalogName: String?, val databaseName: String, val owner: String?) : Statement() {
override val statementType = StatementType.SYNC_META
override val privilegeType = PrivilegeType.OTHER
override val sqlType = SqlType.DDL
}
data class SyncTableMetadata(val tableId: TableId, val owner: String?) : Statement() {
override val statementType = StatementType.SYNC_META
override val privilegeType = PrivilegeType.OTHER
override val sqlType = SqlType.DDL
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/UseStatement.kt
================================================
package io.github.melin.superior.common.relational.common
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
data class UseCatalog(val catalogName: String) : Statement() {
override val statementType = StatementType.USE
override val privilegeType = PrivilegeType.OTHER
override val sqlType = SqlType.DML
}
data class UseDatabase(val catalogName: String?, val databaseName: String) : Statement() {
override val statementType = StatementType.USE
override val privilegeType = PrivilegeType.OTHER
override val sqlType = SqlType.DML
constructor(databaseName: String) : this(null, databaseName)
}
data class UseSchema(val databaseName: String?, val schemaName: String) : Statement() {
override val statementType = StatementType.USE
override val privilegeType = PrivilegeType.OTHER
override val sqlType = SqlType.DML
constructor(databaseName: String) : this(null, databaseName)
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/create/CreateCatalog.kt
================================================
package io.github.melin.superior.common.relational.create
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
class CreateCatalog(
val catalogName: String,
var properties: Map<String, String>? = null,
) : Statement() {
override val statementType = StatementType.CREATE_CATALOG
override val privilegeType = PrivilegeType.ADMIN
override val sqlType = SqlType.DDL
constructor(catalogName: String) : this(catalogName, null)
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/create/CreateDatabase.kt
================================================
package io.github.melin.superior.common.relational.create
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
class CreateDatabase(
val catalogName: String?,
val databaseName: String,
val location: String? = null,
var properties: Map<String, String>? = null,
var ifNotExists: Boolean = false,
) : Statement() {
override val statementType = StatementType.CREATE_DATABASE
override val privilegeType = PrivilegeType.CREATE
override val sqlType = SqlType.DDL
constructor(databaseName: String) : this(null, databaseName, null, null)
constructor(
catalogName: String?,
databaseName: String,
properties: Map<String, String>? = null,
ifNotExists: Boolean = false
) : this(catalogName, databaseName, null, properties, ifNotExists)
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/create/CreateFunction.kt
================================================
package io.github.melin.superior.common.relational.create
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.FunctionId
import io.github.melin.superior.common.relational.Statement
data class CreateFunction(
val functionId: FunctionId,
val childStatements: ArrayList<Statement>,
var replace: Boolean = false,
var temporary: Boolean = false,
val className: String? = null,
val file: String? = null
) : Statement() {
override val statementType = StatementType.CREATE_FUNCTION
override val privilegeType = PrivilegeType.CREATE
override val sqlType = SqlType.DML
var global: Boolean = false // starrocks
var properties: Map<String, String>? = null // starrocks
var argumentTypes: List<String>? = null // starrocks
var returnType: String? = null // starrocks
constructor(
functionId: FunctionId,
childStatements: ArrayList<Statement>,
replace: Boolean
) : this(functionId, childStatements, replace, false)
constructor(
functionId: FunctionId,
childStatements: ArrayList<Statement>
) : this(functionId, childStatements, false, false)
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/create/CreateMaterializedView.kt
================================================
package io.github.melin.superior.common.relational.create
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.TableId
import io.github.melin.superior.common.relational.abs.AbsTableStatement
import io.github.melin.superior.common.relational.dml.QueryStmt
import io.github.melin.superior.common.relational.table.ColumnRel
data class CreateMaterializedView(
override val tableId: TableId,
var queryStmt: QueryStmt,
val comment: String? = null,
var ifNotExists: Boolean = false, // 是否存在 if not exists 关键字
var columnRels: List<ColumnRel>? = null
) : AbsTableStatement() {
override val statementType = StatementType.CREATE_MATERIALIZED_VIEW
override val privilegeType = PrivilegeType.CREATE
override val sqlType = SqlType.DDL
var modelType: String = "Sync" // 表模型类型
var properties: Map<String, String> = mapOf()
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/create/CreateProcedure.kt
================================================
package io.github.melin.superior.common.relational.create
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.ProcedureId
import io.github.melin.superior.common.relational.Statement
data class CreateProcedure(
val procedureId: ProcedureId?,
val childStatements: ArrayList<Statement>,
var replace: Boolean = false,
var temporary: Boolean = false,
val className: String? = null,
val file: String? = null
) : Statement() {
override val statementType = StatementType.CREATE_PROCEDURE
override val privilegeType = PrivilegeType.CREATE
override val sqlType = SqlType.DML
constructor(
procedureId: ProcedureId,
childStatements: ArrayList<Statement>,
replace: Boolean
) : this(procedureId, childStatements, replace, false)
constructor(childStatements: ArrayList<Statement>) : this(null, childStatements)
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/create/CreateSchema.kt
================================================
package io.github.melin.superior.common.relational.create
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
class CreateSchema(val databaseName: String?, val schemaName: String) : Statement() {
override val statementType = StatementType.CREATE_SCHEMA
override val privilegeType = PrivilegeType.CREATE
override val sqlType = SqlType.DDL
constructor(schemaName: String) : this(null, schemaName)
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/create/CreateTable.kt
================================================
package io.github.melin.superior.common.relational.create
import com.google.common.collect.Lists
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.TableType
import io.github.melin.superior.common.relational.PartitionType
import io.github.melin.superior.common.relational.TableId
import io.github.melin.superior.common.relational.abs.AbsTableStatement
import io.github.melin.superior.common.relational.table.ColumnRel
data class CreateTable(
override val tableId: TableId,
val tableType: TableType,
val comment: String? = null,
var lifeCycle: Int? = null,
var partitionColumnRels: List<ColumnRel>? = null,
var columnRels: List<ColumnRel>? = null,
var properties: Map<String, String>? = null,
var fileFormat: String? = null,
var ifNotExists: Boolean = false, // 是否存在 if not exists 关键字
var external: Boolean = false,
var temporary: Boolean = false,
var location: String? = null,
var querySql: String? = null,
val partitionColumnNames: ArrayList<String> = arrayListOf()
) : AbsTableStatement() { // 是否存在 if exists 关键字
override val statementType = StatementType.CREATE_TABLE
override val privilegeType = PrivilegeType.CREATE
override val sqlType = SqlType.DDL
// 建表方式:hive & spark. https://spark.apache.org/docs/3.2.0/sql-ref-syntax-ddl-create-table.html
var replace = false
var modelType: String = "hive" // 表模型类型
var partitionType: PartitionType? = null // 分区类型
var options: Map<String, String>? = null
var clusteredColumns: List<String> = Lists.newArrayList() // 分桶表分桶列
var sortedColumns: List<String> = Lists.newArrayList() // 分桶表排序列
var storageHandler: String? = null
constructor(
tableId: TableId,
tableType: TableType,
comment: String?,
columnRels: List<ColumnRel>?
) : this(tableId, tableType, comment, null, null, columnRels, null, null, false)
constructor(
tableId: TableId,
tableType: TableType,
comment: String?,
lifeCycle: Int?,
columnRels: List<ColumnRel>?
) : this(tableId, tableType, comment, lifeCycle, null, columnRels, null, null, false)
constructor(
tableId: TableId,
tableType: TableType,
comment: String? = null,
columnRels: List<ColumnRel>? = null,
ifNotExists: Boolean,
properties: Map<String, String>? = null
) : this(tableId, tableType, comment, null, null, columnRels, properties, null, ifNotExists)
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/create/CreateTableAsSelect.kt
================================================
package io.github.melin.superior.common.relational.create
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.PartitionType
import io.github.melin.superior.common.relational.TableId
import io.github.melin.superior.common.relational.abs.AbsTableStatement
import io.github.melin.superior.common.relational.dml.QueryStmt
import io.github.melin.superior.common.relational.table.ColumnRel
data class CreateTableAsSelect(
override val tableId: TableId,
var queryStmt: QueryStmt,
val comment: String? = null,
var lifeCycle: Int? = null,
var partitionColumnRels: List<ColumnRel>? = null,
var columnRels: List<ColumnRel>? = null,
var properties: Map<String, String>? = null,
var fileFormat: String? = null,
var ifNotExists: Boolean = false, // 是否存在 if not exists 关键字
var locationPath: String? = null,
val partitionColumnNames: ArrayList<String> = arrayListOf()
) : AbsTableStatement() { // 是否存在 if exists 关键字
override val statementType = StatementType.CREATE_TABLE_AS_SELECT
override val privilegeType = PrivilegeType.CREATE
override val sqlType = SqlType.DDL
var replace = false
// 建表方式:hive & spark. https://spark.apache.org/docs/3.2.0/sql-ref-syntax-ddl-create-table.html
var modelType: String = "hive"
var partitionType: PartitionType? = null // 分区类型
var options: Map<String, String>? = null
var storageHandler: String? = null
constructor(
tableId: TableId,
queryStmt: QueryStmt
) : this(tableId, queryStmt, null, null, null, null, null, null, false)
constructor(
tableId: TableId,
queryStmt: QueryStmt,
comment: String? = null,
ifNotExists: Boolean,
properties: Map<String, String>? = null
) : this(tableId, queryStmt, comment, null, null, null, properties, null, ifNotExists)
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/create/CreateTableLike.kt
================================================
package io.github.melin.superior.common.relational.create
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.TableId
import io.github.melin.superior.common.relational.abs.AbsTableStatement
data class CreateTableLike(
val oldTableId: TableId,
override val tableId: TableId,
var ifNotExists: Boolean = false,
var external: Boolean = false,
var temporary: Boolean = false
) : AbsTableStatement() {
override val statementType = StatementType.CREATE_TABLE_AS_LIKE
override val privilegeType = PrivilegeType.CREATE
override val sqlType = SqlType.DDL
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/create/CreateView.kt
================================================
package io.github.melin.superior.common.relational.create
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.TableId
import io.github.melin.superior.common.relational.abs.AbsTableStatement
import io.github.melin.superior.common.relational.dml.QueryStmt
import io.github.melin.superior.common.relational.table.ColumnRel
data class CreateView(
override val tableId: TableId,
var queryStmt: QueryStmt,
val comment: String? = null,
var ifNotExists: Boolean = false, // 是否存在 if not exists 关键字
var columnRels: List<ColumnRel>? = null
) : AbsTableStatement() {
override val statementType = StatementType.CREATE_VIEW
override val privilegeType = PrivilegeType.CREATE
override val sqlType = SqlType.DDL
var replace: Boolean = false
var temporary: Boolean = false
var global: Boolean = false
var fileFormat: String? = null
var properties: Map<String, String> = mapOf()
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/delta/OptimizeTable.kt
================================================
package io.github.melin.superior.common.relational.delta
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.TableId
import io.github.melin.superior.common.relational.abs.AbsTableStatement
data class OptimizeTable(override val tableId: TableId) : AbsTableStatement() {
override val statementType = StatementType.OPTIMIZE_TABLE
override val privilegeType = PrivilegeType.WRITE
override val sqlType = SqlType.DML
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/delta/VacuumTable.kt
================================================
package io.github.melin.superior.common.relational.delta
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.TableId
import io.github.melin.superior.common.relational.abs.AbsTableStatement
data class VacuumTable(override val tableId: TableId) : AbsTableStatement() {
override val statementType = StatementType.VACUUM_TABLE
override val privilegeType = PrivilegeType.WRITE
override val sqlType = SqlType.DML
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/dml/DeleteTable.kt
================================================
package io.github.melin.superior.common.relational.dml
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.TableId
import io.github.melin.superior.common.relational.abs.AbsTableStatement
data class DeleteTable(
override val tableId: TableId,
val inputTables: List<TableId>,
) : AbsTableStatement() {
override val statementType = StatementType.DELETE
override val privilegeType = PrivilegeType.WRITE
override val sqlType = SqlType.DML
val outputTables: ArrayList<TableId> = arrayListOf()
init {
if (!outputTables.contains(tableId)) {
outputTables.add(tableId)
}
}
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/dml/InsertFiles.kt
================================================
package io.github.melin.superior.common.relational.dml
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
data class InsertFiles(
val mode: InsertMode,
val queryStmt: QueryStmt,
var properties: Map<String, String>,
) : Statement() {
override val statementType = StatementType.INSERT
override val privilegeType = PrivilegeType.WRITE
override val sqlType = SqlType.DML
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/dml/InsertMode.kt
================================================
package io.github.melin.superior.common.relational.dml
import java.io.Serializable
enum class InsertMode : Serializable {
INTO,
INTO_REPLACE,
OVERWRITE,
OVERWRITE_HIVE_DIR,
OVERWRITE_DIR,
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/dml/InsertMultiTable.kt
================================================
package io.github.melin.superior.common.relational.dml
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
data class InsertMultiTable(
val insertTables: List<InsertTable>,
) : Statement() {
override val statementType = StatementType.UNKOWN
override val privilegeType = PrivilegeType.OTHER
override val sqlType = SqlType.DML
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/dml/InsertTable.kt
================================================
package io.github.melin.superior.common.relational.dml
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.TableId
import io.github.melin.superior.common.relational.abs.AbsTableStatement
import io.github.melin.superior.common.relational.table.ColumnRel
import java.util.*
import kotlin.collections.ArrayList
import kotlin.collections.LinkedHashMap
data class InsertTable(
val mode: InsertMode,
val queryStmt: QueryStmt,
override val tableId: TableId,
var columnRels: List<ColumnRel>? = null,
) : AbsTableStatement() {
override val statementType = StatementType.INSERT
override val privilegeType = PrivilegeType.WRITE
override val sqlType = SqlType.DML
var properties: Map<String, String>? = null
var fileFormat: String? = null
var partitionVals: LinkedHashMap<String, String>? = null
var rows: ArrayList<List<String>>? = null
val outputTables: ArrayList<TableId> = arrayListOf()
var hints: LinkedHashMap<String, LinkedList<String>>? = null
var mysqlReplace: Boolean = false
init {
if (!outputTables.contains(tableId)) {
outputTables.add(tableId)
}
}
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/dml/MergeTable.kt
================================================
package io.github.melin.superior.common.relational.dml
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
import io.github.melin.superior.common.relational.TableId
data class MergeTable(
var targetTable: TableId,
var inputTables: List<TableId> = listOf(),
) : Statement() {
override val statementType = StatementType.MERGE
override val privilegeType = PrivilegeType.WRITE
override val sqlType = SqlType.DML
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/dml/QueryStmt.kt
================================================
package io.github.melin.superior.common.relational.dml
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.FunctionId
import io.github.melin.superior.common.relational.Statement
import io.github.melin.superior.common.relational.TableId
data class QueryStmt(
var inputTables: List<TableId>,
var limit: Int? = null,
var offset: Int? = null,
) : Statement() {
override val statementType = StatementType.SELECT
override val privilegeType = PrivilegeType.READ
override val sqlType = SqlType.DQL
val functionNames: HashSet<FunctionId> = hashSetOf()
constructor() : this(listOf())
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/dml/UpdateTable.kt
================================================
package io.github.melin.superior.common.relational.dml
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.TableId
import io.github.melin.superior.common.relational.abs.AbsTableStatement
data class UpdateTable(
override val tableId: TableId,
var inputTables: List<TableId>,
) : AbsTableStatement() {
override val statementType = StatementType.UPDATE
override val privilegeType = PrivilegeType.WRITE
override val sqlType = SqlType.DML
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/drop/DropCatalog.kt
================================================
package io.github.melin.superior.common.relational.drop
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
class DropCatalog(val catalogName: String) : Statement() {
override val statementType = StatementType.DROP_CATALOG
override val privilegeType = PrivilegeType.ADMIN
override val sqlType = SqlType.DDL
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/drop/DropDatabase.kt
================================================
package io.github.melin.superior.common.relational.drop
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
class DropDatabase(val catalogName: String?, val databaseName: String, var ifExists: Boolean = false) : Statement() {
override val statementType = StatementType.DROP_DATABASE
override val privilegeType = PrivilegeType.DROP
override val sqlType = SqlType.DDL
val databaseNames: ArrayList<String> = arrayListOf()
constructor(databaseName: String) : this(null, databaseName)
constructor(databaseName: String, ifExists: Boolean) : this(null, databaseName, ifExists)
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/drop/DropFunction.kt
================================================
package io.github.melin.superior.common.relational.drop
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.FunctionId
import io.github.melin.superior.common.relational.Statement
data class DropFunction(val functionId: FunctionId) : Statement() {
override val statementType = StatementType.DROP_FUNCTION
override val privilegeType = PrivilegeType.DROP
override val sqlType = SqlType.DDL
var argumentTypes: List<String>? = null // starrocks
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/drop/DropMaterializedView.kt
================================================
package io.github.melin.superior.common.relational.drop
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.TableId
import io.github.melin.superior.common.relational.abs.AbsTableStatement
data class DropMaterializedView(override val tableId: TableId, var ifExists: Boolean = false) : AbsTableStatement() {
override val statementType = StatementType.DROP_MATERIALIZED_VIEW
override val privilegeType = PrivilegeType.DROP
override val sqlType = SqlType.DDL
val tableIds: ArrayList<TableId> = arrayListOf()
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/drop/DropProcedure.kt
================================================
package io.github.melin.superior.common.relational.drop
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.ProcedureId
import io.github.melin.superior.common.relational.Statement
data class DropProcedure(val procedureId: ProcedureId) : Statement() {
override val statementType = StatementType.DROP_PROCEDURE
override val privilegeType = PrivilegeType.DROP
override val sqlType = SqlType.DDL
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/drop/DropSchema.kt
================================================
package io.github.melin.superior.common.relational.drop
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
class DropSchema(
val databaseName: String?,
val schemaName: String,
) : Statement() {
override val statementType = StatementType.DROP_SCHEMA
override val privilegeType = PrivilegeType.DROP
override val sqlType = SqlType.DDL
constructor(schemaName: String) : this(null, schemaName)
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/drop/DropSequence.kt
================================================
package io.github.melin.superior.common.relational.drop
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.TableId
import io.github.melin.superior.common.relational.abs.AbsTableStatement
data class DropSequence(
override val tableId: TableId,
var ifExists: Boolean = false,
var isMaterialized: Boolean = false,
) : AbsTableStatement() {
override val statementType = StatementType.DROP_SEQUENCE
override val privilegeType = PrivilegeType.DROP
override val sqlType = SqlType.DDL
val tableIds: ArrayList<TableId> = arrayListOf()
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/drop/DropTable.kt
================================================
package io.github.melin.superior.common.relational.drop
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.TableId
import io.github.melin.superior.common.relational.abs.AbsTableStatement
data class DropTable(override val tableId: TableId, var ifExists: Boolean = false) : AbsTableStatement() {
override val statementType = StatementType.DROP_TABLE
override val privilegeType = PrivilegeType.DROP
override val sqlType = SqlType.DDL
val tableIds: ArrayList<TableId> = arrayListOf()
var force: Boolean = false
var purge: Boolean = false
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/drop/DropView.kt
================================================
package io.github.melin.superior.common.relational.drop
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.TableId
import io.github.melin.superior.common.relational.abs.AbsTableStatement
data class DropView(override val tableId: TableId, var ifExists: Boolean = false) : AbsTableStatement() {
override val statementType = StatementType.DROP_VIEW
override val privilegeType = PrivilegeType.DROP
override val sqlType = SqlType.DDL
val tableIds: ArrayList<TableId> = arrayListOf()
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/enums.kt
================================================
package io.github.melin.superior.common.relational
enum class SortType {
ASC,
DESC,
UNKOWN
}
enum class PartitionType {
RANGE,
LIST,
HASH,
KEY,
VALUES,
NORMAL,
EXPRESSION
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/io/AlterLoadTable.kt
================================================
package io.github.melin.superior.common.relational.io
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
data class AlterLoadTable(
val schemaName: String?,
val labelName: String,
) : Statement() {
override val statementType = StatementType.ALTER_LOAD_TABLE
override val privilegeType = PrivilegeType.ALTER
override val sqlType = SqlType.DML
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/io/CancelLoadTable.kt
================================================
package io.github.melin.superior.common.relational.io
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
data class CancelLoadTable(
val schemaName: String?,
val labelName: String,
) : Statement() {
override val statementType = StatementType.CANCEL_LOAD_TABLE
override val privilegeType = PrivilegeType.DROP
override val sqlType = SqlType.DML
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/io/ExportTable.kt
================================================
package io.github.melin.superior.common.relational.io
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.FunctionId
import io.github.melin.superior.common.relational.TableId
import io.github.melin.superior.common.relational.abs.AbsTableStatement
data class ExportTable(
override val tableId: TableId,
val path: String,
var properties: Map<String, String>,
var partitionVals: LinkedHashMap<String, String>,
var fileFormat: String? = null,
var compression: String? = null,
var maxFileSize: String? = null,
var overwrite: Boolean = false,
var single: Boolean = false,
var inputTables: ArrayList<TableId>,
) : AbsTableStatement() {
override val statementType = StatementType.EXPORT_TABLE
override val privilegeType = PrivilegeType.READ
override val sqlType = SqlType.DML
val functionNames: HashSet<FunctionId> = hashSetOf()
constructor(
tableId: TableId,
path: String,
properties: Map<String, String>,
) : this(tableId, path, properties, linkedMapOf(), null, null, null, false, false, arrayListOf())
constructor(
tableId: TableId,
path: String,
properties: Map<String, String>,
partitionVals: LinkedHashMap<String, String>,
fileFormat: String? = null,
compression: String? = null,
maxFileSize: String? = null,
overwrite: Boolean = false,
single: Boolean = false,
) : this(
tableId,
path,
properties,
partitionVals,
fileFormat,
compression,
maxFileSize,
overwrite,
single,
arrayListOf()
)
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/io/LoadTable.kt
================================================
package io.github.melin.superior.common.relational.io
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.Statement
data class LoadTable(
val schemaName: String?,
val labelName: String,
val tableNames: List<String>,
) : Statement() {
override val statementType = StatementType.LOAD_TABLE
override val privilegeType = PrivilegeType.CREATE
override val sqlType = SqlType.DML
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/table/ColumnRel.kt
================================================
package io.github.melin.superior.common.relational.table
data class ColumnRel(
val columnName: String,
val typeName: String? = null,
val comment: String? = null,
var nullable: Boolean = true,
var defaultExpr: String? = null,
var primaryKey: Boolean = false,
val columnDefType: ColumnDefType = ColumnDefType.COMPUTED
) {
var columnLength = 0
var precision = 0
var scale = 0
var expression: String? = null // 计算表达式
var position: String? = null
var afterCol: String? = null
var jsonPath: String? = null // spark streaming sql json path
var computedExpr: String? = null // 计算列
var metadataKey: String? = null // 元数据列
constructor(
columnName: String,
typeName: String?,
comment: String?
) : this(columnName, typeName, comment, true, null)
constructor(
columnName: String,
typeName: String?,
comment: String?,
primaryKey: Boolean = false,
columnDefType: ColumnDefType
) : this(columnName, typeName, comment, true, null, primaryKey, columnDefType)
constructor(
columnName: String,
typeName: String?,
comment: String?,
columnDefType: ColumnDefType
) : this(columnName, typeName, comment, true, null, false, columnDefType)
}
enum class ColumnDefType {
PHYSICAL,
METADATA,
COMPUTED
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/table/RepairTable.kt
================================================
package io.github.melin.superior.common.relational.table
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.TableId
import io.github.melin.superior.common.relational.abs.AbsTableStatement
class RepairTable(override val tableId: TableId) : AbsTableStatement() {
override val statementType = StatementType.REPAIR_TABLE
override val privilegeType = PrivilegeType.ADMIN
override val sqlType = SqlType.DDL
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/table/TruncateTable.kt
================================================
package io.github.melin.superior.common.relational.table
import io.github.melin.superior.common.PrivilegeType
import io.github.melin.superior.common.SqlType
import io.github.melin.superior.common.StatementType
import io.github.melin.superior.common.relational.TableId
import io.github.melin.superior.common.relational.abs.AbsTableStatement
class TruncateTable(override val tableId: TableId, tableIds: ArrayList<TableId> = ArrayList()) : AbsTableStatement() {
override val statementType = StatementType.TRUNCATE_TABLE
override val privilegeType = PrivilegeType.WRITE
override val sqlType = SqlType.DDL
init {
tableIds.add(tableId)
}
constructor(tableIds: ArrayList<TableId>) : this(tableIds.first(), tableIds)
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/type/AbsDataTimeType.kt
================================================
package io.github.melin.superior.common.type
abstract class AbsDataTimeType : AbsType() {}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/type/AbsNumericType.kt
================================================
package io.github.melin.superior.common.type
abstract class AbsNumericType : AbsType() {
var character: String? = null
var collate: String? = null
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/type/AbsStringType.kt
================================================
package io.github.melin.superior.common.type
abstract class AbsStringType : AbsType() {
var character: String? = null
var collate: String? = null
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/type/AbsType.kt
================================================
package io.github.melin.superior.common.type
abstract class AbsType : Type {
override val alias: String? = null
override val alias2: String? = null
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/type/Type.kt
================================================
package io.github.melin.superior.common.type
interface Type {
val name: String
val alias: String?
val alias2: String? // 有些有多个别名,例如mysql integer有int 和 int4 两种
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/util/CommonUtils.kt
================================================
package com.github.melin.superior.sql.parser.util
import org.antlr.v4.runtime.ParserRuleContext
import org.antlr.v4.runtime.Token
import org.antlr.v4.runtime.tree.ParseTree
import org.antlr.v4.runtime.tree.TerminalNodeImpl
import org.apache.commons.lang3.StringUtils
/** Created by libinsong on 2017/4/10. */
object CommonUtils {
val KEYWORD_REGEX = "'([A-Z_]+)'".toRegex()
fun findShowStatementKeyWord(keyWords: ArrayList<String>, node: ParseTree) {
if (node is TerminalNodeImpl) {
val count = node.parent.childCount
for (i in 0 until count) {
val child = node.parent.getChild(i)
if (child is TerminalNodeImpl) {
keyWords.add(child.text.uppercase())
}
}
} else {
findShowStatementKeyWord(keyWords, node.getChild(0))
}
}
fun subsql(sql: String?, context: ParserRuleContext): String {
val currSql = StringUtils.substring(sql, context.start.startIndex, context.stop.stopIndex + 1)
return cleanLastSemi(currSql)
}
fun subsql(sql: String?, start: Token, stop: Token): String {
val currSql = StringUtils.substring(sql, start.stopIndex + 1, stop.stopIndex + 1)
return cleanLastSemi(currSql)
}
private fun cleanLastSemi(text: String): String {
if (StringUtils.endsWith(text, ";")) {
return StringUtils.substring(text, 0, text.length - 1)
}
return text
}
fun cleanQuote(value: String): String {
if (StringUtils.isBlank(value)) {
return value
}
var result = value
if (StringUtils.startsWith(result, "'") && StringUtils.endsWith(result, "'")) {
result = StringUtils.substring(result, 1, -1)
}
if (StringUtils.startsWith(result, "\"") && StringUtils.endsWith(result, "\"")) {
result = StringUtils.substring(result, 1, -1)
}
if (StringUtils.startsWith(value, "`") && StringUtils.endsWith(value, "`")) {
return StringUtils.substring(value, 1, -1)
}
return StringUtils.trim(result)
}
}
================================================
FILE: superior-common-parser/src/main/kotlin/io/github/melin/superior/common/util/DateUtils.kt
================================================
package com.github.melin.superior.sql.parser.util
import java.time.DateTimeException
import java.time.LocalDateTime
import java.time.ZoneId
import java.time.format.DateTimeFormatter
import java.util.*
object DateUtils {
fun getCurrentDateTime(): String {
try {
val ldt = LocalDateTime.ofInstant(Date().toInstant(), ZoneId.systemDefault())
val format = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")
return ldt.format(format)
} catch (ex: DateTimeException) {
throw RuntimeException(ex.message, ex)
}
}
}
================================================
FILE: superior-dameng-parser/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>io.github.melin.superior</groupId>
<artifactId>superior-sql-parser</artifactId>
<version>4.0.23</version>
</parent>
<artifactId>superior-dameng-parser</artifactId>
<name>superior-dameng-parser</name>
<dependencies>
<dependency>
<groupId>io.github.melin.superior</groupId>
<artifactId>superior-common-parser</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
================================================
FILE: superior-dameng-parser/src/main/antlr4/io/github/melin/superior/parser/dameng/antlr4/DmSqlLexer.g4
================================================
lexer grammar DmSqlLexer;
// Keywords
ABORT: 'ABORT';
ABSOLUTE: 'ABSOLUTE';
ABSTRACT: 'ABSTRACT';
ACCESSED: 'ACCESSED';
ACCOUNT: 'ACCOUNT';
ACROSS: 'ACROSS';
ACTION: 'ACTION';
ADD: 'ADD';
ADMIN: 'ADMIN';
ADVANCED: 'ADVANCED';
AFTER: 'AFTER';
AGGREGATE: 'AGGREGATE';
ALL: 'ALL';
ALLOW_DATETIME: 'ALLOW_DATETIME';
ALLOW_IP: 'ALLOW_IP';
ALTER: 'ALTER';
ALWAYS: 'ALWAYS';
ANALYZE: 'ANALYZE';
AND: 'AND';
ANY: 'ANY';
APPLY: 'APPLY';
APR: 'APR';
ARCHIVE: 'ARCHIVE';
ARCHIVEDIR: 'ARCHIVEDIR';
ARCHIVELOG: 'ARCHIVELOG';
ARCHIVESTYLE: 'ARCHIVESTYLE';
ARRAY: 'ARRAY';
ARRAYLEN: 'ARRAYLEN';
AS: 'AS';
ASC: 'ASC';
ASCII: 'ASCII';
ASENSITIVE: 'ASENSITIVE';
ASSIGN: 'ASSIGN';
ASYNCHRONOUS: 'ASYNCHRONOUS';
ATTACH: 'ATTACH';
AT_KEYWORD: 'AT';
AUDIT: 'AUDIT';
AUG: 'AUG';
AUTHID: 'AUTHID';
AUTHORIZATION: 'AUTHORIZATION';
AUTO: 'AUTO';
AUTOEXTEND: 'AUTOEXTEND';
AUTONOMOUS_TRANSACTION: 'AUTONOMOUS_TRANSACTION';
AUTO_INCREMENT: 'AUTO_INCREMENT';
AUTO_UPDATE: 'AUTO_UPDATE';
AVG: 'AVG';
BACKED: 'BACKED';
BACKUP: 'BACKUP';
BACKUPDIR: 'BACKUPDIR';
BACKUPINFO: 'BACKUPINFO';
BACKUPSET: 'BACKUPSET';
BADFILE: 'BADFILE';
BAKFILE: 'BAKFILE';
BASE: 'BASE';
BATCH: 'BATCH';
BEFORE: 'BEFORE';
BEGIN: 'BEGIN';
BETWEEN: 'BETWEEN';
BIGDATEDIFF: 'BIGDATEDIFF';
BIGINT: 'BIGINT';
BINARY_KEYWORD: 'BINARY';
BIT: 'BIT';
BITMAP: 'BITMAP';
BLOB: 'BLOB';
BLOCK: 'BLOCK';
BODY: 'BODY';
BOOL: 'BOOL';
BOOLEAN: 'BOOLEAN';
BOTH: 'BOTH';
BRANCH: 'BRANCH';
BREADTH: 'BREADTH';
BREAK: 'BREAK';
BSTRING: 'BSTRING';
BTREE: 'BTREE';
BUFFER: 'BUFFER';
BUILD: 'BUILD';
BULK: 'BULK';
BULK_EXCEPTION: 'BULK_EXCEPTION';
BULK_ROWCOUNT: 'BULK_ROWCOUNT';
BY: 'BY';
BYDAY: 'BYDAY';
BYHOUR: 'BYHOUR';
BYMINUTE: 'BYMINUTE';
BYMONTH: 'BYMONTH';
BYMONTHDAY: 'BYMONTHDAY';
BYSECOND: 'BYSECOND';
BYTE: 'BYTE';
BYWEEKNO: 'BYWEEKNO';
BYYEARDAY: 'BYYEARDAY';
CACHE: 'CACHE';
CALCULATE: 'CALCULATE';
CALL: 'CALL';
CASCADE: 'CASCADE';
CASCADED: 'CASCADED';
CASE: 'CASE';
CASE_SENSITIVE: 'CASE_SENSITIVE';
CAST: 'CAST';
CATALOG: 'CATALOG';
CATCH: 'CATCH';
CHAIN: 'CHAIN';
CHANGE: 'CHANGE';
CHAR: 'CHAR';
CHARACTER: 'CHARACTER';
CHARACTERISTICS: 'CHARACTERISTICS';
CHECK: 'CHECK';
CHECKPOINT: 'CHECKPOINT';
CIPHER: 'CIPHER';
CLASS: 'CLASS';
CLOB: 'CLOB';
CLOSE: 'CLOSE';
CLUSTER: 'CLUSTER';
CLUSTERBTR: 'CLUSTERBTR';
COLLATE: 'COLLATE';
COLLATION: 'COLLATION';
COLLECT: 'COLLECT';
COLUMN: 'COLUMN';
COLUMNS: 'COLUMNS';
COMMENT: 'COMMENT';
COMMIT: 'COMMIT';
COMMITTED: 'COMMITTED';
COMMITWORK: 'COMMITWORK';
COMPILE: 'COMPILE';
COMPLETE: 'COMPLETE';
COMPRESS: 'COMPRESS';
COMPRESSED: 'COMPRESSED';
CONDITIONAL: 'CONDITIONAL';
CONNECT: 'CONNECT';
CONNECT_BY_IS_CYCLE: 'CONNECT_BY_IS_CYCLE';
CONNECT_BY_IS_LEAF: 'CONNECT_BY_IS_LEAF';
CONNECT_BY_ROOT: 'CONNECT_BY_ROOT';
CONNECT_IDLE_TIME: 'CONNECT_IDLE_TIME';
CONNECT_TIME: 'CONNECT_TIME';
CONST: 'CONST';
CONSTANT: 'CONSTANT';
CONSTRAINT: 'CONSTRAINT';
CONSTRAINTS: 'CONSTRAINTS';
CONSTRUCTOR: 'CONSTRUCTOR';
CONSTR_OP: 'CONSTR_OP';
CONTAINS: 'CONTAINS';
CONTEXT: 'CONTEXT';
CONTINUE: 'CONTINUE';
CONVERT: 'CONVERT';
COPY: 'COPY';
CORRESPONDING: 'CORRESPONDING';
CORRUPT: 'CORRUPT';
COUNT: 'COUNT';
COUNTER: 'COUNTER';
CPU_PER_CALL: 'CPU_PER_CALL';
CPU_PER_SESSION: 'CPU_PER_SESSION';
CREATE: 'CREATE';
CROSS: 'CROSS';
CRYPTO: 'CRYPTO';
CTLFILE: 'CTLFILE';
CUBE: 'CUBE';
CUMULATIVE: 'CUMULATIVE';
CURRENT: 'CURRENT';
CURRENT_SCHEMA: 'CURRENT_SCHEMA';
CURRENT_USER: 'CURRENT_USER';
CURSOR: 'CURSOR';
CYCLE: 'CYCLE';
DAILY: 'DAILY';
DANGLING: 'DANGLING';
DATA: 'DATA';
DATABASE: 'DATABASE';
DATAFILE: 'DATAFILE';
DATE: 'DATE';
DATEADD: 'DATEADD';
DATEDIFF: 'DATEDIFF';
DATEPART: 'DATEPART';
DATETIME: 'DATETIME';
DAY: 'DAY';
DBFILE: 'DBFILE';
DDL: 'DDL';
DDL_CLONE: 'DDL_CLONE';
DEBUG: 'DEBUG';
DEC: 'DEC';
DECIMAL: 'DECIMAL';
DECLARE: 'DECLARE';
DECODE: 'DECODE';
DEFAULT: 'DEFAULT';
DEFERRABLE: 'DEFERRABLE';
DEFERRED: 'DEFERRED';
DEFINER: 'DEFINER';
DELETE: 'DELETE';
DELETING: 'DELETING';
DELIMITED: 'DELIMITED';
DELTA: 'DELTA';
DEMAND: 'DEMAND';
DENSE_RANK: 'DENSE_RANK';
DEPTH: 'DEPTH';
DEREF: 'DEREF';
DESC: 'DESC';
DETACH: 'DETACH';
DETERMINISTIC: 'DETERMINISTIC';
DEVICE: 'DEVICE';
DIAGNOSTICS: 'DIAGNOSTICS';
DICTIONARY: 'DICTIONARY';
DIRECTORY: 'DIRECTORY';
DISABLE: 'DISABLE';
DISCONNECT: 'DISCONNECT';
DISKGROUP: 'DISKGROUP';
DISKSPACE: 'DISKSPACE';
DISTINCT: 'DISTINCT';
DISTRIBUTED: 'DISTRIBUTED';
DML: 'DML';
DO: 'DO';
DOMAIN: 'DOMAIN';
DOUBLE: 'DOUBLE';
DOWN: 'DOWN';
DROP: 'DROP';
DUMP: 'DUMP';
EACH: 'EACH';
EDITIONABLE: 'EDITIONABLE';
ELSE: 'ELSE';
ELSEIF: ('ELSEIF' | 'ELSIF');
EMPTY: 'EMPTY';
ENABLE: 'ENABLE';
ENCRYPT: 'ENCRYPT';
ENCRYPTION: 'ENCRYPTION';
END: 'END';
EQU: 'EQU';
ERROR: 'ERROR';
ERRORS: 'ERRORS';
ESCAPE: 'ESCAPE';
EVALNAME: 'EVALNAME';
EVENTINFO: 'EVENTINFO';
EVENTS: 'EVENTS';
EVERY: 'EVERY';
EXCEPT: 'EXCEPT';
EXCEPTION: 'EXCEPTION';
EXCEPTIONS: 'EXCEPTIONS';
EXCEPTION_INIT: 'EXCEPTION_INIT';
EXCHANGE: 'EXCHANGE';
EXCLUDE: 'EXCLUDE';
EXCLUDING: 'EXCLUDING';
EXCLUSIVE: 'EXCLUSIVE';
EXECUTE: 'EXECUTE';
EXISTS: 'EXISTS';
EXIT: 'EXIT';
EXPIRE: 'EXPIRE';
EXPLAIN: 'EXPLAIN';
EXTENDS: 'EXTENDS';
EXTERN: 'EXTERN';
EXTERNAL: 'EXTERNAL';
EXTERNALLY: 'EXTERNALLY';
EXTRACT: 'EXTRACT';
FAILED_LOGIN_ATTEMPS: 'FAILED_LOGIN_ATTEMPS';
FAILED_LOGIN_ATTEMPTS: 'FAILED_LOGIN_ATTEMPTS';
FALSE: 'FALSE';
FAST: 'FAST';
FEB: 'FEB';
FETCH: 'FETCH';
FIELDS: 'FIELDS';
FILE: 'FILE';
FILEGROUP: 'FILEGROUP';
FILESIZE: 'FILESIZE';
FILLFACTOR: 'FILLFACTOR';
FINAL: 'FINAL';
FINALLY: 'FINALLY';
FIRST: 'FIRST';
FLASHBACK: 'FLASHBACK';
FLOAT: 'FLOAT';
FOLLOWING: 'FOLLOWING';
FOR: 'FOR';
FORALL: 'FORALL';
FORCE: 'FORCE';
FOREIGN: 'FOREIGN';
FORMAT: 'FORMAT';
FOUND: 'FOUND';
FREQ: 'FREQ';
FREQUENCE: 'FREQUENCE';
FRI: 'FRI';
FROM: 'FROM';
FULL: 'FULL';
FULLY: 'FULLY';
FUNCTION: 'FUNCTION';
GENERATE: 'GENERATE';
GENERATED: 'GENERATED';
GET: 'GET';
GLOBAL: 'GLOBAL';
GLOBALLY: 'GLOBALLY';
GOTO: 'GOTO';
GRANT: 'GRANT';
GREAT: 'GREAT';
GROUP: 'GROUP';
GROUPING: 'GROUPING';
HASH: 'HASH';
HASHPARTMAP: 'HASHPARTMAP';
HAVING: 'HAVING';
HEXTORAW: 'HEXTORAW';
HIDDEN_KEYWORD: 'HIDDEN';
HIGH: 'HIGH';
HOLD: 'HOLD';
HOUR: 'HOUR';
HOURLY: 'HOURLY';
HUGE: 'HUGE';
IDENTIFIED: 'IDENTIFIED';
IDENTIFIER_KEYWORD: 'IDENTIFIER';
IDENTITY: 'IDENTITY';
IDENTITY_INSERT: 'IDENTITY_INSERT';
IF: 'IF';
IFNULL: 'IFNULL';
IGNORE: 'IGNORE';
IGNORE_ROW_ON_DUPKEY_INDEX: 'IGNORE_ROW_ON_DUPKEY_INDEX';
IMAGE: 'IMAGE';
IMMEDIATE: 'IMMEDIATE';
IN: 'IN';
INCLUDE: 'INCLUDE';
INCLUDING: 'INCLUDING';
INCREASE: 'INCREASE';
INCREMENT: 'INCREMENT';
INDEX: 'INDEX';
INDEXES: 'INDEXES';
INDICES: 'INDICES';
INITIAL: 'INITIAL';
INITIALIZED: 'INITIALIZED';
INITIALLY: 'INITIALLY';
INLINE: 'INLINE';
INNER: 'INNER';
INNERID: 'INNERID';
INPUT: 'INPUT';
INSENSITIVE: 'INSENSITIVE';
INSERT: 'INSERT';
INSERTING: 'INSERTING';
INSTANCE: 'INSTANCE';
INSTANTIABLE: 'INSTANTIABLE';
INSTEAD: 'INSTEAD';
INT: 'INT';
INTEGER: 'INTEGER';
INTENT: 'INTENT';
INTERSECT: 'INTERSECT';
INTERVAL: 'INTERVAL';
INTO: 'INTO';
INVISIBLE: 'INVISIBLE';
IS: 'IS';
ISOLATION: 'ISOLATION';
JAN: 'JAN';
JAVA: 'JAVA';
JOB: 'JOB';
JOIN: 'JOIN';
JSON: 'JSON';
JSON_TABLE: 'JSON_TABLE';
JUL: 'JUL';
JUN: 'JUN';
KEEP: 'KEEP';
KEY: 'KEY';
KEYS: 'KEYS';
LABEL: 'LABEL';
LARGE: 'LARGE';
LAST: 'LAST';
LAST2: 'LAST2';
LAX: 'LAX';
LEAD: 'LEADING';
LEFT: 'LEFT';
LEFTARG: 'LEFTARG';
LESS: 'LESS';
LEVEL: 'LEVEL';
LEVELS: 'LEVELS';
LEXER: 'LEXER';
LIKE: 'LIKE';
LIMIT: 'LIMIT';
LINK: 'LINK';
LIST: 'LIST';
LNNVL: 'LNNVL';
LOB: 'LOB';
LOCAL: 'LOCAL';
LOCALLY: 'LOCALLY';
LOCAL_OBJECT: 'LOCAL_OBJECT';
LOCATION: 'LOCATION';
LOCK: 'LOCK';
LOCKED: 'LOCKED';
LOG: 'LOG';
LOGFILE: 'LOGFILE';
LOGGING: 'LOGGING';
LOGIC: 'LOGIC';
LOGIN: 'LOGIN';
LOGOFF: 'LOGOFF';
LOGON: 'LOGON';
LOGOUT: 'LOGOUT';
LONG: 'LONG';
LONGVARBINARY: 'LONGVARBINARY';
LONGVARCHAR: 'LONGVARCHAR';
LOOP: 'LOOP';
LSN: 'LSN';
MANUAL: 'MANUAL';
MAP: 'MAP';
MAPPED: 'MAPPED';
MAR: 'MAR';
MATCH: 'MATCH';
MATCHED: 'MATCHED';
MATERIALIZED: 'MATERIALIZED';
MAX: 'MAX';
MAXPIECESIZE: 'MAXPIECESIZE';
MAXSIZE: 'MAXSIZE';
MAXVALUE: 'MAXVALUE';
MAX_RUN_DURATION: 'MAX_RUN_DURATION';
MAY: 'MAY';
MEMBER: 'MEMBER';
MEMORY: 'MEMORY';
MEM_SPACE: 'MEM_SPACE';
MERGE: 'MERGE';
MICRO: 'MICRO';
MIN: 'MIN';
MINEXTENTS: 'MINEXTENTS';
MINUS: 'MINUS';
MINUTE: 'MINUTE';
MINUTELY: 'MINUTELY';
MINVALUE: 'MINVALUE';
MIRROR: 'MIRROR';
MOD: 'MOD';
MODE: 'MODE';
MODIFY: 'MODIFY';
MON: 'MON';
MONEY: 'MONEY';
MONITORING: 'MONITORING';
MONTH: 'MONTH';
MONTHLY: 'MONTHLY';
MOUNT: 'MOUNT';
MOVE: 'MOVE';
MOVEMENT: 'MOVEMENT';
MULTISET: 'MULTISET';
NATIONAL: 'NATIONAL';
NATURAL: 'NATURAL';
NCHAR: 'NCHAR';
NCHARACTER: 'NCHARACTER';
NESTED_PATH: 'NESTED_PATH';
NEVER: 'NEVER';
NEW: 'NEW';
NEXT: 'NEXT';
NO: 'NO';
NOARCHIVELOG: 'NOARCHIVELOG';
NOAUDIT: 'NOAUDIT';
NOBRANCH: 'NOBRANCH';
NOCACHE: 'NOCACHE';
NOCOPY: 'NOCOPY';
NOCYCLE: 'NOCYCLE';
NODE: 'NODE';
NOLOCK: 'NOLOCK';
NOLOGGING: 'NOLOGGING';
NOMAXVALUE: 'NOMAXVALUE';
NOMINVALUE: 'NOMINVALUE';
NOMONITORING: 'NOMONITORING';
NONE: 'NONE';
NONEDITIONABLE: 'NONEDITIONABLE';
NOORDER: 'NOORDER';
NOPARALLEL: 'NOPARALLEL';
NORMAL: 'NORMAL';
NOROWDEPENDENCIES: 'NOROWDEPENDENCIES';
NOSORT: 'NOSORT';
NOT: 'NOT';
NOTFOUND: 'NOT_FOUND';
NOT_ALLOW_DATETIME: 'NOT_ALLOW_DATETIME';
NOT_ALLOW_IP: 'NOT_ALLOW_IP';
NOV: 'NOV';
NOVALIDATE: 'NOVALIDATE';
NOWAIT: 'NOWAIT';
NULL: 'NULL';
NULLS: 'NULLS';
NUMBER: 'NUMBER';
NUMERIC: 'NUMERIC';
OBJECT: 'OBJECT';
OCT: 'OCT';
OF: 'OF';
OFF: 'OFF';
OFFLINE: 'OFFLINE';
OFFSET: 'OFFSET';
OIDINDEX: 'OIDINDEX';
OLD: 'OLD';
ON: 'ON';
ONCE: 'ONCE';
ONLINE: 'ONLINE';
ONLY: 'ONLY';
OPEN: 'OPEN';
OPERATOR: 'OPERATOR';
OPTIMIZE: 'OPTIMIZE';
OPTION: 'OPTION';
OR: 'OR';
ORDER: 'ORDER';
ORDINALITY: 'ORDINALITY';
OUT: 'OUT';
OUTER: 'OUTER';
OVER: 'OVER';
OVERLAPS: 'OVERLAPS';
OVERLAY: 'OVERLAY';
OVERRIDE: 'OVERRIDE';
OVERRIDING: 'OVERRIDING';
PACKAGE: 'PACKAGE';
PAD: 'PAD';
PAGE: 'PAGE';
PARALLEL: 'PARALLEL';
PARALLEL_ENABLE: 'PARALLEL_ENABLE';
PARMS: 'PARMS';
PARTIAL: 'PARTIAL';
PARTITION: 'PARTITION';
PARTITIONS: 'PARTITIONS';
PASSING: 'PASSING';
PASSWORD: 'PASSWORD';
PASSWORD_GRACE_TIME: 'PASSWORD_GRACE_TIME';
PASSWORD_LIFE_TIME: 'PASSWORD_LIFE_TIME';
PASSWORD_LOCK_TIME: 'PASSWORD_LOCK_TIME';
PASSWORD_POLICY: 'PASSWORD_POLICY';
PASSWORD_REUSE_MAX: 'PASSWORD_REUSE_MAX';
PASSWORD_REUSE_TIME: 'PASSWORD_REUSE_TIME';
PATH: 'PATH';
PENDANT: 'PENDANT';
PERCENT: 'PERCENT';
PIPE: 'PIPE';
PIPELINED: 'PIPELINED';
PIVOT: 'PIVOT';
PLACING: 'PLACING';
PRAGMA: 'PRAGMA';
PREBUILT: 'PREBUILT';
PRECEDING: 'PRECEDING';
PRECISION: 'PRECISION';
PRESERVE: 'PRESERVE';
PRETTY: 'PRETTY';
PRIMARY: 'PRIMARY';
PRINT: 'PRINT';
PRIOR: 'PRIOR';
PRIVATE: 'PRIVATE';
PRIVILEGE: 'PRIVILEGE';
PRIVILEGES: 'PRIVILEGES';
PROCEDURE: 'PROCEDURE';
PROFILE: 'PROFILE';
PROTECTED: 'PROTECTED';
PT_BULK_ROWCOUNT: 'PT_BULK_ROWCOUNT';
PT_ROWCOUNT: 'PT_ROWCOUNT';
PT_ROWCOUNT2: 'PT_ROWCOUNT2';
PUBLIC: 'PUBLIC';
PURGE: 'PURGE';
QUERY: 'QUERY';
QUERY_REWRITE_INTEGRITY: 'QUERY_REWRITE_INTEGRITY';
QUOTA: 'QUOTA';
RAISE: 'RAISE';
RANDOMLY: 'RANDOMLY';
RANGE: 'RANGE';
RAWTOHEX: 'RAWTOHEX';
READ: 'READ';
READONLY: 'READONLY';
READ_PER_CALL: 'READ_PER_CALL';
READ_PER_SESSION: 'READ_PER_SESSION';
REAL: 'REAL';
REBUILD: 'REBUILD';
RECORD: 'RECORD';
RECORDS: 'RECORDS';
RECURSIVE: 'RECURSIVE';
REDUCED: 'REDUCED';
REF: 'REF';
REFERENCE: 'REFERENCE';
REFERENCES: 'REFERENCES';
REFERENCING: 'REFERENCING';
REFRESH: 'REFRESH';
REJECT: 'REJECT';
RELATED: 'RELATED';
RELATIVE: 'RELATIVE';
RENAME: 'RENAME';
REPEAT: 'REPEAT';
REPEATABLE: 'REPEATABLE';
REPLACE: 'REPLACE';
REPLAY: 'REPLAY';
REPLICATE: 'REPLICATE';
RESPECT: 'RESPECT';
RESIZE: 'RESIZE';
RESTORE: 'RESTORE';
RESTRICT: 'RESTRICT';
RESTRICT_REFERENCES: 'RESTRICT_REFERENCES';
RESULT: 'RESULT';
RESULT_CACHE: 'RESULT_CACHE';
RETURN: 'RETURN';
RETURNING: 'RETURNING';
REUSE: 'REUSE';
REVERSE: 'REVERSE';
REVOKE: 'REVOKE';
REWRITE: 'REWRITE';
RIGHT: 'RIGHT';
RIGHTARG: 'RIGHTARG';
ROLE: 'ROLE';
ROLLBACK: 'ROLLBACK';
ROLLFILE: 'ROLLFILE';
ROLLUP:
gitextract_hvwwon62/
├── .gitignore
├── LICENSE
├── README.md
├── pom.xml
├── superior-appjar-parser/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── job/
│ │ │ └── antlr4/
│ │ │ ├── AppJarLexer.g4
│ │ │ └── AppJarParser.g4
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── appjar/
│ │ ├── AbstractJarParser.kt
│ │ ├── AppJarAntlr4Visitor.kt
│ │ ├── AppJarHelper.kt
│ │ └── AppJarInfo.kt
│ └── test/
│ ├── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── appjar/
│ │ └── AppJarParserTest.kt
│ └── resources/
│ └── log4j2.xml
├── superior-arithmetic-parser/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── antlr4/
│ │ │ └── arithmetic/
│ │ │ └── Arithmetic.g4
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── arithmetic/
│ │ ├── AbstractArithParser.kt
│ │ ├── ArithmeticAntlr4Visitor.kt
│ │ ├── ArithmeticHelper.kt
│ │ └── Data.kt
│ └── test/
│ ├── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── arithmetic/
│ │ └── ArithmetricParserTest.kt
│ └── resources/
│ └── log4j2.xml
├── superior-common-parser/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── common/
│ │ └── antlr4/
│ │ ├── AntlrCaches.java
│ │ ├── Origin.java
│ │ ├── ParseErrorListener.java
│ │ ├── ParseException.java
│ │ ├── ParserUtils.java
│ │ └── UpperCaseCharStream.java
│ └── kotlin/
│ └── io/
│ └── github/
│ └── melin/
│ └── superior/
│ └── common/
│ ├── AlterActionType.kt
│ ├── PrivilegeType.kt
│ ├── SQLParserException.kt
│ ├── SqlType.kt
│ ├── StatementType.kt
│ ├── TableType.kt
│ ├── relational/
│ │ ├── AnalyzeTable.kt
│ │ ├── DefaultStatement.kt
│ │ ├── FunctionId.kt
│ │ ├── ProcedureId.kt
│ │ ├── SchemaId.kt
│ │ ├── Statement.kt
│ │ ├── TableId.kt
│ │ ├── abs/
│ │ │ ├── AbsDatabaseStatement.kt
│ │ │ └── AbsTableStatement.kt
│ │ ├── alter/
│ │ │ ├── AlterAction.kt
│ │ │ ├── AlterActions.kt
│ │ │ ├── AlterDatabase.kt
│ │ │ ├── AlterDatabaseActions.kt
│ │ │ ├── AlterMaterializedView.kt
│ │ │ ├── AlterTable.kt
│ │ │ ├── AlterView.kt
│ │ │ ├── DeltaAlterActions.kt
│ │ │ └── IcebergAlterActions.kt
│ │ ├── common/
│ │ │ ├── AddResourceStatement.kt
│ │ │ ├── CallProcedure.kt
│ │ │ ├── CancelExport.kt
│ │ │ ├── CommentStatement.kt
│ │ │ ├── DescModel.kt
│ │ │ ├── ListResourceStatement.kt
│ │ │ ├── ReSetStatement.kt
│ │ │ ├── RefreshMaterializedView.kt
│ │ │ ├── RemoveResourceStatement.kt
│ │ │ ├── SetStatement.kt
│ │ │ ├── ShowStatement.kt
│ │ │ ├── SyncStatement.kt
│ │ │ └── UseStatement.kt
│ │ ├── create/
│ │ │ ├── CreateCatalog.kt
│ │ │ ├── CreateDatabase.kt
│ │ │ ├── CreateFunction.kt
│ │ │ ├── CreateMaterializedView.kt
│ │ │ ├── CreateProcedure.kt
│ │ │ ├── CreateSchema.kt
│ │ │ ├── CreateTable.kt
│ │ │ ├── CreateTableAsSelect.kt
│ │ │ ├── CreateTableLike.kt
│ │ │ └── CreateView.kt
│ │ ├── delta/
│ │ │ ├── OptimizeTable.kt
│ │ │ └── VacuumTable.kt
│ │ ├── dml/
│ │ │ ├── DeleteTable.kt
│ │ │ ├── InsertFiles.kt
│ │ │ ├── InsertMode.kt
│ │ │ ├── InsertMultiTable.kt
│ │ │ ├── InsertTable.kt
│ │ │ ├── MergeTable.kt
│ │ │ ├── QueryStmt.kt
│ │ │ └── UpdateTable.kt
│ │ ├── drop/
│ │ │ ├── DropCatalog.kt
│ │ │ ├── DropDatabase.kt
│ │ │ ├── DropFunction.kt
│ │ │ ├── DropMaterializedView.kt
│ │ │ ├── DropProcedure.kt
│ │ │ ├── DropSchema.kt
│ │ │ ├── DropSequence.kt
│ │ │ ├── DropTable.kt
│ │ │ └── DropView.kt
│ │ ├── enums.kt
│ │ ├── io/
│ │ │ ├── AlterLoadTable.kt
│ │ │ ├── CancelLoadTable.kt
│ │ │ ├── ExportTable.kt
│ │ │ └── LoadTable.kt
│ │ └── table/
│ │ ├── ColumnRel.kt
│ │ ├── RepairTable.kt
│ │ └── TruncateTable.kt
│ ├── type/
│ │ ├── AbsDataTimeType.kt
│ │ ├── AbsNumericType.kt
│ │ ├── AbsStringType.kt
│ │ ├── AbsType.kt
│ │ └── Type.kt
│ └── util/
│ ├── CommonUtils.kt
│ └── DateUtils.kt
├── superior-dameng-parser/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── dameng/
│ │ │ └── antlr4/
│ │ │ ├── DmSqlLexer.g4
│ │ │ └── DmSqlParser.g4
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── dameng/
│ │ ├── AbstractSqlParser.kt
│ │ ├── DmSqlAntlr4Visitor.kt
│ │ └── DmSqlHelper.kt
│ └── test/
│ ├── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── dameng/
│ │ ├── DmSqlParserDdlTest.kt
│ │ ├── DmSqlParserDmlTest.kt
│ │ └── DmSqlProcedureParserTest.kt
│ └── resources/
│ ├── insert.sql
│ └── log4j2.xml
├── superior-flink-parser/
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── flink/
│ │ │ └── antlr4/
│ │ │ ├── FlinkSqlLexer.g4
│ │ │ └── FlinkSqlParser.g4
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── flink/
│ │ ├── AbstractSqlParser.kt
│ │ ├── FlinkSqlAntlr4Visitor.kt
│ │ └── FlinkSqlHelper.kt
│ └── test/
│ ├── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── flink/
│ │ ├── FlinkCheckSql.kt
│ │ ├── FlinkSqlParserDdlTest.kt
│ │ └── FlinkSqlParserDmlTest.kt
│ └── resources/
│ └── log4j2.xml
├── superior-mysql-parser/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── mysql/
│ │ │ └── antlr4/
│ │ │ ├── MySqlLexer.g4
│ │ │ └── MySqlParser.g4
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── mysql/
│ │ ├── AbstractSqlParser.kt
│ │ ├── MySqlAntlr4Visitor.kt
│ │ ├── MySqlHelper.kt
│ │ └── type/
│ │ ├── JsonType.kt
│ │ ├── datetime.kt
│ │ ├── numeric.kt
│ │ └── string.kt
│ └── test/
│ ├── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── mysql/
│ │ ├── MySqlParserDdlTest.kt
│ │ ├── MySqlParserDmlTest.kt
│ │ └── MySqlProcedureParserTest.kt
│ └── resources/
│ └── log4j2.xml
├── superior-oracle-parser/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── oracle/
│ │ │ └── antlr4/
│ │ │ ├── OracleLexer.g4
│ │ │ └── OracleParser.g4
│ │ ├── java/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── oracle/
│ │ │ └── antlr4/
│ │ │ ├── OracleLexerBase.java
│ │ │ └── OracleParserBase.java
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── oracle/
│ │ ├── AbstractSqlParser.kt
│ │ ├── OracleSqlAntlr4Visitor.kt
│ │ └── OracleSqlHelper.kt
│ └── test/
│ ├── java/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── oracle/
│ │ ├── OracleProcessParserTest.kt
│ │ ├── OracleSqlParserDdlTest.kt
│ │ └── OracleSqlParserDmlTest.kt
│ └── resources/
│ ├── insert.sql
│ └── log4j2.xml
├── superior-postgres-parser/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── postgre/
│ │ │ └── antlr4/
│ │ │ ├── PostgreSqlLexer.g4
│ │ │ └── PostgreSqlParser.g4
│ │ ├── java/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── postgre/
│ │ │ └── antlr4/
│ │ │ ├── LexerDispatchingErrorListener.java
│ │ │ ├── ParserDispatchingErrorListener.java
│ │ │ ├── PostgreSqlLexerBase.java
│ │ │ └── PostgreSqlParserBase.java
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── postgre/
│ │ ├── AbstractSqlParser.kt
│ │ ├── PostgreSqlAntlr4Visitor.kt
│ │ ├── PostgreSqlHelper.kt
│ │ ├── relational/
│ │ │ └── CreatePartitionTable.kt
│ │ └── type/
│ │ ├── BooleanType.kt
│ │ ├── JsonType.kt
│ │ ├── datetime.kt
│ │ ├── numeric.kt
│ │ └── string.kt
│ └── test/
│ ├── java/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── postgre/
│ │ ├── PostgreSqlParserDdlTest.kt
│ │ ├── PostgreSqlParserDmlTest.kt
│ │ └── PostgreSqlProcessParserTest.kt
│ └── resources/
│ └── log4j2.xml
├── superior-presto-parser/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── presto/
│ │ │ └── antlr4/
│ │ │ └── PrestoSqlBase.g4
│ │ ├── java/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── presto/
│ │ │ └── CaseInsensitiveStream.java
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── presto/
│ │ ├── AbstractSqlParser.kt
│ │ ├── PrestoSqlAntlr4Visitor.kt
│ │ └── PrestoSqlHelper.kt
│ └── test/
│ ├── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── presto/
│ │ └── PrestoSqlParserTest.kt
│ └── resources/
│ └── log4j2.xml
├── superior-redshift-parser/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── redshift/
│ │ │ └── antlr4/
│ │ │ ├── RedshiftLexer.g4
│ │ │ └── RedshiftParser.g4
│ │ ├── java/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── redshift/
│ │ │ └── antlr4/
│ │ │ ├── LexerDispatchingErrorListener.java
│ │ │ ├── ParserDispatchingErrorListener.java
│ │ │ ├── RedshiftLexerBase.java
│ │ │ └── RedshiftParserBase.java
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── postgre/
│ │ ├── AbstractSqlParser.kt
│ │ ├── RedshiftSqlAntlr4Visitor.kt
│ │ ├── RedshiftSqlHelper.kt
│ │ ├── relational/
│ │ │ └── CreatePartitionTable.kt
│ │ └── type/
│ │ ├── BooleanType.kt
│ │ ├── JsonType.kt
│ │ ├── datetime.kt
│ │ ├── numeric.kt
│ │ └── string.kt
│ └── test/
│ ├── java/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── postgre/
│ │ ├── RedshiftSqlParserDdlTest.kt
│ │ ├── RedshiftSqlParserDmlTest.kt
│ │ └── RedshiftSqlProcessParserTest.kt
│ └── resources/
│ └── log4j2.xml
├── superior-spark-parser/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── spark/
│ │ │ └── antlr4/
│ │ │ ├── SparkSqlLexer.g4
│ │ │ ├── SparkSqlParser.g4
│ │ │ ├── SparkStreamSqlLexer.g4
│ │ │ └── SparkStreamSqlParser.g4
│ │ ├── java/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── spark/
│ │ │ └── SparkSqlPostProcessor.java
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── spark/
│ │ ├── AbstractSparkStreamSqlParser.kt
│ │ ├── AbstractSqlParser.kt
│ │ ├── SparkSqlAntlr4Visitor.kt
│ │ ├── SparkSqlHelper.kt
│ │ ├── SparkStreamSqlAntlr4Visitor.kt
│ │ ├── SparkStreamSqlHelper.kt
│ │ └── relational/
│ │ ├── CallHelp.kt
│ │ ├── CreateFileView.kt
│ │ ├── CreateTempViewUsing.kt
│ │ ├── DataTunnelExpr.kt
│ │ ├── DataTunnelHelp.kt
│ │ ├── DistCpExpr.kt
│ │ ├── LoadData.kt
│ │ ├── MergeFileData.kt
│ │ ├── RefreshStatement.kt
│ │ └── cache.kt
│ └── test/
│ ├── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── spark/
│ │ ├── DeltaSqlExtensionsTest.kt
│ │ ├── IcebergSqlExtensionsTest.kt
│ │ ├── SparkSqlParserTest.kt
│ │ └── SparkStreamSqlParserTest.kt
│ └── resources/
│ ├── demo.sql
│ └── log4j2.xml
├── superior-sqlserver-parser/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── sqlserver/
│ │ │ └── antlr4/
│ │ │ ├── SqlServerLexer.g4
│ │ │ └── SqlServerParser.g4
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── sqlserver/
│ │ ├── AbstractSqlParser.kt
│ │ ├── SqlServerAntlr4Visitor.kt
│ │ └── SqlServerHelper.kt
│ └── test/
│ ├── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── sqlserver/
│ │ ├── SqlServerParserDdlTest.kt
│ │ └── SqlServerParserDmlTest.kt
│ └── resources/
│ └── log4j2.xml
├── superior-starrocks-parser/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── antlr4/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── starrocks/
│ │ │ └── antlr4/
│ │ │ ├── StarRocksLexer.g4
│ │ │ └── StarRocksParser.g4
│ │ ├── java/
│ │ │ └── io/
│ │ │ └── github/
│ │ │ └── melin/
│ │ │ └── superior/
│ │ │ └── parser/
│ │ │ └── starrocks/
│ │ │ ├── NodePosition.java
│ │ │ ├── ParsingException.java
│ │ │ ├── PostProcessListener.java
│ │ │ └── SqlModeHelper.java
│ │ └── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── starrocks/
│ │ ├── AbstractSqlParser.kt
│ │ ├── StarRocksAntlr4Visitor.kt
│ │ ├── StarRocksHelper.kt
│ │ └── relational/
│ │ ├── AlterRoutineLoad.kt
│ │ ├── CancelRefreshMaterializedView.kt
│ │ ├── CreateRoutineLoad.kt
│ │ ├── DropTask.kt
│ │ ├── PauseRoutineLoad.kt
│ │ ├── ResumeRoutineLoad.kt
│ │ ├── StopRoutineLoad.kt
│ │ └── SubmitTask.kt
│ └── test/
│ ├── kotlin/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── starrocks/
│ │ ├── StarRocksSqlParserDdlTest.kt
│ │ ├── StarRocksSqlParserDmlTest.kt
│ │ ├── StarRocksSqlParserLoadAndExportTest.kt
│ │ └── StarRocksSqlParserRoutineLoadTest.kt
│ └── resources/
│ └── log4j2.xml
└── superior-trino-parser/
├── pom.xml
└── src/
├── main/
│ ├── antlr4/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── trino/
│ │ └── antlr4/
│ │ └── TrinoSqlBase.g4
│ ├── java/
│ │ └── io/
│ │ └── github/
│ │ └── melin/
│ │ └── superior/
│ │ └── parser/
│ │ └── trino/
│ │ └── CaseInsensitiveStream.java
│ └── kotlin/
│ └── io/
│ └── github/
│ └── melin/
│ └── superior/
│ └── parser/
│ └── trino/
│ ├── AbstractSqlParser.kt
│ ├── TrinoSqlAntlr4Visitor.kt
│ └── TrinoSqlHelper.kt
└── test/
├── kotlin/
│ └── io/
│ └── github/
│ └── melin/
│ └── superior/
│ └── parser/
│ └── trino/
│ └── TrinoSqlParserTest.kt
└── resources/
└── log4j2.xml
SYMBOL INDEX (160 symbols across 23 files)
FILE: superior-common-parser/src/main/java/io/github/melin/superior/common/antlr4/AntlrCaches.java
class AntlrCaches (line 9) | public class AntlrCaches {
method AntlrCaches (line 19) | public AntlrCaches(ATN atn) {
method installCaches (line 24) | public void installCaches(Parser parser) {
method makeDecisionToDFA (line 28) | private DFA[] makeDecisionToDFA(ATN atn) {
FILE: superior-common-parser/src/main/java/io/github/melin/superior/common/antlr4/Origin.java
class Origin (line 3) | public class Origin {
method Origin (line 7) | public Origin(int line, int startPosition) {
method getLine (line 12) | public int getLine() {
method setLine (line 16) | public void setLine(int line) {
method getStartPosition (line 20) | public int getStartPosition() {
method setStartPosition (line 24) | public void setStartPosition(int startPosition) {
FILE: superior-common-parser/src/main/java/io/github/melin/superior/common/antlr4/ParseErrorListener.java
class ParseErrorListener (line 7) | public class ParseErrorListener extends BaseErrorListener {
method syntaxError (line 9) | @Override
FILE: superior-common-parser/src/main/java/io/github/melin/superior/common/antlr4/ParseException.java
class ParseException (line 5) | public class ParseException extends RuntimeException {
method ParseException (line 11) | public ParseException(String message, Origin start, Origin stop) {
method ParseException (line 17) | public ParseException(String command, String message, Origin start, Or...
method getMessage (line 24) | @Override
method withCommand (line 53) | public ParseException withCommand(String cmd) {
method getCommand (line 57) | public String getCommand() {
method getStart (line 61) | public Origin getStart() {
method getStop (line 65) | public Origin getStop() {
FILE: superior-common-parser/src/main/java/io/github/melin/superior/common/antlr4/ParserUtils.java
class ParserUtils (line 9) | public class ParserUtils {
method source (line 12) | public static String source(ParserRuleContext ctx) {
method getString (line 18) | public static String getString(Token token) {
method getString (line 22) | public static String getString(TerminalNode token) {
method getInt (line 26) | public static int getInt(Token token) {
method command (line 30) | public static String command(ParserRuleContext ctx) {
method position (line 35) | public static Origin position(Token token) {
method appendEscapedChar (line 39) | private static void appendEscapedChar(StringBuilder sb, char n) {
method unescapeSQLString (line 69) | private static String unescapeSQLString(String b) {
FILE: superior-common-parser/src/main/java/io/github/melin/superior/common/antlr4/UpperCaseCharStream.java
class UpperCaseCharStream (line 8) | public class UpperCaseCharStream implements CharStream {
method UpperCaseCharStream (line 12) | public UpperCaseCharStream(CodePointCharStream wrapped) {
method consume (line 16) | @Override
method LA (line 21) | @Override
method getText (line 31) | @Override
method mark (line 40) | @Override
method release (line 45) | @Override
method index (line 50) | @Override
method seek (line 55) | @Override
method size (line 60) | @Override
method getSourceName (line 65) | @Override
FILE: superior-oracle-parser/src/main/java/io/github/melin/superior/parser/oracle/antlr4/OracleLexerBase.java
class OracleLexerBase (line 6) | public abstract class OracleLexerBase extends Lexer {
method OracleLexerBase (line 9) | public OracleLexerBase(CharStream input) {
method IsNewlineAtPos (line 14) | protected boolean IsNewlineAtPos(int pos) {
FILE: superior-oracle-parser/src/main/java/io/github/melin/superior/parser/oracle/antlr4/OracleParserBase.java
class OracleParserBase (line 5) | public abstract class OracleParserBase extends Parser {
method OracleParserBase (line 10) | public OracleParserBase(TokenStream input) {
method isVersion12 (line 14) | public boolean isVersion12() {
method setVersion12 (line 18) | public void setVersion12(boolean value) {
method isVersion11 (line 22) | public boolean isVersion11() {
method setVersion11 (line 26) | public void setVersion11(boolean value) {
method isVersion10 (line 30) | public boolean isVersion10() {
method setVersion10 (line 34) | public void setVersion10(boolean value) {
FILE: superior-postgres-parser/src/main/java/io/github/melin/superior/parser/postgre/antlr4/LexerDispatchingErrorListener.java
class LexerDispatchingErrorListener (line 8) | public class LexerDispatchingErrorListener implements ANTLRErrorListener {
method LexerDispatchingErrorListener (line 11) | public LexerDispatchingErrorListener(Lexer parent) {
method syntaxError (line 15) | public void syntaxError(
method reportAmbiguity (line 26) | public void reportAmbiguity(
method reportAttemptingFullContext (line 38) | public void reportAttemptingFullContext(
method reportContextSensitivity (line 44) | public void reportContextSensitivity(
FILE: superior-postgres-parser/src/main/java/io/github/melin/superior/parser/postgre/antlr4/ParserDispatchingErrorListener.java
class ParserDispatchingErrorListener (line 8) | public class ParserDispatchingErrorListener implements ANTLRErrorListener {
method ParserDispatchingErrorListener (line 11) | public ParserDispatchingErrorListener(Parser parent) {
method syntaxError (line 15) | public void syntaxError(
method reportAmbiguity (line 26) | public void reportAmbiguity(
method reportAttemptingFullContext (line 38) | public void reportAttemptingFullContext(
method reportContextSensitivity (line 44) | public void reportContextSensitivity(
FILE: superior-postgres-parser/src/main/java/io/github/melin/superior/parser/postgre/antlr4/PostgreSqlLexerBase.java
class PostgreSqlLexerBase (line 8) | public abstract class PostgreSqlLexerBase extends Lexer {
method PostgreSqlLexerBase (line 11) | protected PostgreSqlLexerBase(CharStream input) {
method pushTag (line 15) | public void pushTag() {
method isTag (line 19) | public boolean isTag() {
method popTag (line 23) | public void popTag() {
method checkLA (line 27) | public boolean checkLA(int c) {
method charIsLetter (line 31) | public boolean charIsLetter() {
method HandleNumericFail (line 35) | public void HandleNumericFail() {
method HandleLessLessGreaterGreater (line 40) | public void HandleLessLessGreaterGreater() {
method UnterminatedBlockCommentDebugAssert (line 45) | public void UnterminatedBlockCommentDebugAssert() {
method CheckIfUtf32Letter (line 49) | public boolean CheckIfUtf32Letter() {
FILE: superior-postgres-parser/src/main/java/io/github/melin/superior/parser/postgre/antlr4/PostgreSqlParserBase.java
class PostgreSqlParserBase (line 8) | public abstract class PostgreSqlParserBase extends Parser {
method PostgreSqlParserBase (line 10) | public PostgreSqlParserBase(TokenStream input) {
method GetParsedSqlTree (line 14) | ParserRuleContext GetParsedSqlTree(String script, int line) {
method ParseRoutineBody (line 20) | public void ParseRoutineBody(PostgreSqlParser.Createfunc_opt_listConte...
method TrimQuotes (line 65) | private String TrimQuotes(String s) {
method unquote (line 69) | public String unquote(String s) {
method GetRoutineBodyString (line 82) | public String GetRoutineBodyString(PostgreSqlParser.SconstContext rule) {
method getPostgreSQLParser (line 98) | public PostgreSqlParser getPostgreSQLParser(String script) {
FILE: superior-presto-parser/src/main/java/io/github/melin/superior/parser/presto/CaseInsensitiveStream.java
class CaseInsensitiveStream (line 20) | public class CaseInsensitiveStream implements CharStream {
method CaseInsensitiveStream (line 23) | public CaseInsensitiveStream(CharStream stream) {
method getText (line 27) | @Override
method consume (line 32) | @Override
method LA (line 37) | @Override
method mark (line 50) | @Override
method release (line 55) | @Override
method index (line 60) | @Override
method seek (line 65) | @Override
method size (line 70) | @Override
method getSourceName (line 75) | @Override
FILE: superior-redshift-parser/src/main/java/io/github/melin/superior/parser/redshift/antlr4/LexerDispatchingErrorListener.java
class LexerDispatchingErrorListener (line 8) | public class LexerDispatchingErrorListener implements ANTLRErrorListener {
method LexerDispatchingErrorListener (line 11) | public LexerDispatchingErrorListener(Lexer parent) {
method syntaxError (line 15) | public void syntaxError(
method reportAmbiguity (line 26) | public void reportAmbiguity(
method reportAttemptingFullContext (line 38) | public void reportAttemptingFullContext(
method reportContextSensitivity (line 44) | public void reportContextSensitivity(
FILE: superior-redshift-parser/src/main/java/io/github/melin/superior/parser/redshift/antlr4/ParserDispatchingErrorListener.java
class ParserDispatchingErrorListener (line 8) | public class ParserDispatchingErrorListener implements ANTLRErrorListener {
method ParserDispatchingErrorListener (line 11) | public ParserDispatchingErrorListener(Parser parent) {
method syntaxError (line 15) | public void syntaxError(
method reportAmbiguity (line 26) | public void reportAmbiguity(
method reportAttemptingFullContext (line 38) | public void reportAttemptingFullContext(
method reportContextSensitivity (line 44) | public void reportContextSensitivity(
FILE: superior-redshift-parser/src/main/java/io/github/melin/superior/parser/redshift/antlr4/RedshiftLexerBase.java
class RedshiftLexerBase (line 8) | public abstract class RedshiftLexerBase extends Lexer {
method RedshiftLexerBase (line 11) | protected RedshiftLexerBase(CharStream input) {
method pushTag (line 15) | public void pushTag() {
method isTag (line 19) | public boolean isTag() {
method popTag (line 23) | public void popTag() {
method checkLA (line 27) | public boolean checkLA(int c) {
method charIsLetter (line 31) | public boolean charIsLetter() {
method HandleNumericFail (line 35) | public void HandleNumericFail() {
method HandleLessLessGreaterGreater (line 40) | public void HandleLessLessGreaterGreater() {
method UnterminatedBlockCommentDebugAssert (line 45) | public void UnterminatedBlockCommentDebugAssert() {
method CheckIfUtf32Letter (line 49) | public boolean CheckIfUtf32Letter() {
FILE: superior-redshift-parser/src/main/java/io/github/melin/superior/parser/redshift/antlr4/RedshiftParserBase.java
class RedshiftParserBase (line 8) | public abstract class RedshiftParserBase extends Parser {
method RedshiftParserBase (line 10) | public RedshiftParserBase(TokenStream input) {
method GetParsedSqlTree (line 14) | ParserRuleContext GetParsedSqlTree(String script, int line) {
method ParseRoutineBody (line 20) | public void ParseRoutineBody(RedshiftParser.Createfunc_opt_listContext...
method TrimQuotes (line 63) | private String TrimQuotes(String s) {
method unquote (line 67) | public String unquote(String s) {
method GetRoutineBodyString (line 80) | public String GetRoutineBodyString(RedshiftParser.SconstContext rule) {
method getPostgreSQLParser (line 96) | public RedshiftParser getPostgreSQLParser(String script) {
FILE: superior-spark-parser/src/main/java/io/github/melin/superior/parser/spark/SparkSqlPostProcessor.java
class SparkSqlPostProcessor (line 10) | public class SparkSqlPostProcessor extends SparkSqlParserBaseListener {
method exitQuotedIdentifier (line 13) | @Override
method exitNonReserved (line 31) | @Override
FILE: superior-starrocks-parser/src/main/java/io/github/melin/superior/parser/starrocks/NodePosition.java
class NodePosition (line 9) | public class NodePosition implements Serializable {
method NodePosition (line 23) | public NodePosition(TerminalNode node) {
method NodePosition (line 27) | public NodePosition(Token token) {
method NodePosition (line 31) | public NodePosition(Token start, Token end) {
method NodePosition (line 35) | public NodePosition(int line, int col) {
method NodePosition (line 39) | public NodePosition(int line, int col, int endLine, int endCol) {
method getLine (line 46) | public int getLine() {
method getCol (line 50) | public int getCol() {
method getEndLine (line 54) | public int getEndLine() {
method getEndCol (line 58) | public int getEndCol() {
method isZero (line 62) | public boolean isZero() {
FILE: superior-starrocks-parser/src/main/java/io/github/melin/superior/parser/starrocks/ParsingException.java
class ParsingException (line 7) | public class ParsingException extends RuntimeException {
method ParsingException (line 13) | public ParsingException(String detailMsg, NodePosition pos) {
method ParsingException (line 20) | public ParsingException(String formatString, Object... args) {
method getMessage (line 24) | @Override
FILE: superior-starrocks-parser/src/main/java/io/github/melin/superior/parser/starrocks/PostProcessListener.java
class PostProcessListener (line 8) | public class PostProcessListener extends StarRocksParserBaseListener {
method PostProcessListener (line 13) | public PostProcessListener(int maxTokensNum, int maxExprChildCount) {
method visitTerminal (line 18) | @Override
method exitExpressionList (line 28) | @Override
method exitExpressionsWithDefault (line 43) | @Override
method exitInsertStatement (line 56) | @Override
FILE: superior-starrocks-parser/src/main/java/io/github/melin/superior/parser/starrocks/SqlModeHelper.java
class SqlModeHelper (line 3) | public class SqlModeHelper {
FILE: superior-trino-parser/src/main/java/io/github/melin/superior/parser/trino/CaseInsensitiveStream.java
class CaseInsensitiveStream (line 20) | public class CaseInsensitiveStream implements CharStream {
method CaseInsensitiveStream (line 23) | public CaseInsensitiveStream(CharStream stream) {
method getText (line 27) | @Override
method consume (line 32) | @Override
method LA (line 37) | @Override
method mark (line 50) | @Override
method release (line 55) | @Override
method index (line 60) | @Override
method seek (line 65) | @Override
method size (line 70) | @Override
method getSourceName (line 75) | @Override
Condensed preview — 274 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,665K chars).
[
{
"path": ".gitignore",
"chars": 135,
"preview": "# Created by .ignore support plugin (hsz.mobi)\ntarget\n.idea\nsuperior-sql-parser.iml\nmetastore_db\nderby.log\n.DS_Store\ngen"
},
{
"path": "LICENSE",
"chars": 11344,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "README.md",
"chars": 4891,
"preview": "## 介绍\n\n基于 antlr4 的多种数据库SQL解析器,获取SQL中元数据,可用于数据平台产品中的多个场景:ddl语句提取元数据、sql 权限校验、表级血缘、sql语法校验等场景。支持spark、flink、gauss、starrock"
},
{
"path": "pom.xml",
"chars": 12668,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "superior-appjar-parser/pom.xml",
"chars": 811,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "superior-appjar-parser/src/main/antlr4/io/github/melin/superior/parser/job/antlr4/AppJarLexer.g4",
"chars": 1976,
"preview": "lexer grammar AppJarLexer;\n\nchannels { DCSTREAMCOMMENT, ERRORCHANNEL }\n\n// SKIP\n\nSPACE: [ "
},
{
"path": "superior-appjar-parser/src/main/antlr4/io/github/melin/superior/parser/job/antlr4/AppJarParser.g4",
"chars": 1140,
"preview": "parser grammar AppJarParser;\n\noptions { tokenVocab=AppJarLexer; }\n\nrootx\n : jobTasks? EOF\n ;\n\njobTasks\n : (jobT"
},
{
"path": "superior-appjar-parser/src/main/kotlin/io/github/melin/superior/parser/appjar/AbstractJarParser.kt",
"chars": 1179,
"preview": "package io.github.melin.superior.parser.appjar\n\nimport io.github.melin.superior.common.antlr4.AntlrCaches\nimport io.gith"
},
{
"path": "superior-appjar-parser/src/main/kotlin/io/github/melin/superior/parser/appjar/AppJarAntlr4Visitor.kt",
"chars": 2958,
"preview": "package io.github.melin.superior.parser.appjar\n\nimport com.github.melin.superior.sql.parser.util.CommonUtils\nimport io.g"
},
{
"path": "superior-appjar-parser/src/main/kotlin/io/github/melin/superior/parser/appjar/AppJarHelper.kt",
"chars": 3175,
"preview": "package io.github.melin.superior.parser.appjar\n\nimport com.github.melin.superior.sql.parser.util.CommonUtils\nimport io.g"
},
{
"path": "superior-appjar-parser/src/main/kotlin/io/github/melin/superior/parser/appjar/AppJarInfo.kt",
"chars": 525,
"preview": "package io.github.melin.superior.parser.appjar\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io.github.me"
},
{
"path": "superior-appjar-parser/src/test/kotlin/io/github/melin/superior/parser/appjar/AppJarParserTest.kt",
"chars": 13168,
"preview": "package io.github.melin.superior.parser.appjar\n\nimport io.github.melin.superior.common.StatementType\nimport io.github.me"
},
{
"path": "superior-appjar-parser/src/test/resources/log4j2.xml",
"chars": 520,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Configuration>\n <Appenders>\n <Console name=\"Console\" target=\"SYSTEM_OU"
},
{
"path": "superior-arithmetic-parser/pom.xml",
"chars": 819,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "superior-arithmetic-parser/src/main/antlr4/io/github/melin/superior/parser/antlr4/arithmetic/Arithmetic.g4",
"chars": 5605,
"preview": "grammar Arithmetic;\n\n@members {\n public boolean bracket_enbled = true;\n}\n\narithmetic: expression EOF;\n\nexpression\n "
},
{
"path": "superior-arithmetic-parser/src/main/kotlin/io/github/melin/superior/parser/arithmetic/AbstractArithParser.kt",
"chars": 1208,
"preview": "package io.github.melin.superior.parser.arithmetic\n\nimport io.github.melin.superior.common.antlr4.AntlrCaches\nimport io."
},
{
"path": "superior-arithmetic-parser/src/main/kotlin/io/github/melin/superior/parser/arithmetic/ArithmeticAntlr4Visitor.kt",
"chars": 1734,
"preview": "package com.github.melin.superior.sql.parser.arithmetic\n\nimport io.github.melin.superior.common.SQLParserException\nimpor"
},
{
"path": "superior-arithmetic-parser/src/main/kotlin/io/github/melin/superior/parser/arithmetic/ArithmeticHelper.kt",
"chars": 2440,
"preview": "package com.github.melin.superior.sql.parser.arithmetic\n\nimport io.github.melin.superior.common.antlr4.AntlrCaches\nimpor"
},
{
"path": "superior-arithmetic-parser/src/main/kotlin/io/github/melin/superior/parser/arithmetic/Data.kt",
"chars": 578,
"preview": "package io.github.melin.superior.parser.arithmetic\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io.githu"
},
{
"path": "superior-arithmetic-parser/src/test/kotlin/io/github/melin/superior/parser/arithmetic/ArithmetricParserTest.kt",
"chars": 2097,
"preview": "package io.github.melin.superior.parser.arithmetic\n\nimport com.github.melin.superior.sql.parser.arithmetic.ArithmeticHel"
},
{
"path": "superior-arithmetic-parser/src/test/resources/log4j2.xml",
"chars": 520,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Configuration>\n <Appenders>\n <Console name=\"Console\" target=\"SYSTEM_OU"
},
{
"path": "superior-common-parser/pom.xml",
"chars": 563,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "superior-common-parser/src/main/java/io/github/melin/superior/common/antlr4/AntlrCaches.java",
"chars": 1150,
"preview": "package io.github.melin.superior.common.antlr4;\n\nimport org.antlr.v4.runtime.Parser;\nimport org.antlr.v4.runtime.atn.ATN"
},
{
"path": "superior-common-parser/src/main/java/io/github/melin/superior/common/antlr4/Origin.java",
"chars": 554,
"preview": "package io.github.melin.superior.common.antlr4;\n\npublic class Origin {\n private int line;\n private int startPositi"
},
{
"path": "superior-common-parser/src/main/java/io/github/melin/superior/common/antlr4/ParseErrorListener.java",
"chars": 629,
"preview": "package io.github.melin.superior.common.antlr4;\n\nimport org.antlr.v4.runtime.BaseErrorListener;\nimport org.antlr.v4.runt"
},
{
"path": "superior-common-parser/src/main/java/io/github/melin/superior/common/antlr4/ParseException.java",
"chars": 1988,
"preview": "package io.github.melin.superior.common.antlr4;\n\nimport org.apache.commons.lang3.StringUtils;\n\npublic class ParseExcepti"
},
{
"path": "superior-common-parser/src/main/java/io/github/melin/superior/common/antlr4/ParserUtils.java",
"chars": 4241,
"preview": "package io.github.melin.superior.common.antlr4;\n\nimport org.antlr.v4.runtime.CharStream;\nimport org.antlr.v4.runtime.Par"
},
{
"path": "superior-common-parser/src/main/java/io/github/melin/superior/common/antlr4/UpperCaseCharStream.java",
"chars": 1430,
"preview": "package io.github.melin.superior.common.antlr4;\n\nimport org.antlr.v4.runtime.CharStream;\nimport org.antlr.v4.runtime.Cod"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/AlterActionType.kt",
"chars": 928,
"preview": "package io.github.melin.superior.common\n\nimport java.io.Serializable\n\nenum class AlterActionType : Serializable {\n SE"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/PrivilegeType.kt",
"chars": 161,
"preview": "package io.github.melin.superior.common\n\nenum class PrivilegeType {\n READ,\n WRITE,\n ALTER,\n DROP,\n ADMIN,"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/SQLParserException.kt",
"chars": 263,
"preview": "package io.github.melin.superior.common\n\nclass SQLParserException : RuntimeException {\n constructor(message: String, "
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/SqlType.kt",
"chars": 264,
"preview": "package io.github.melin.superior.common\n\nenum class SqlType(val desc: String) {\n DML(\"Data Manipulation Language\"),\n "
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/StatementType.kt",
"chars": 1822,
"preview": "package io.github.melin.superior.common\n\nimport java.io.Serializable\n\n/** Created by libinsong on 2017/3/6. */\nenum clas"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/TableType.kt",
"chars": 184,
"preview": "package io.github.melin.superior.common\n\nenum class TableType {\n HIVE,\n MYSQL,\n ORACLE,\n STARROCKS,\n POST"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/AnalyzeTable.kt",
"chars": 429,
"preview": "package io.github.melin.superior.common.relational\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io.githu"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/DefaultStatement.kt",
"chars": 382,
"preview": "package io.github.melin.superior.common.relational\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io.githu"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/FunctionId.kt",
"chars": 1458,
"preview": "package io.github.melin.superior.common.relational\n\nimport com.google.common.collect.Lists\nimport org.apache.commons.lan"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/ProcedureId.kt",
"chars": 952,
"preview": "package io.github.melin.superior.common.relational\n\nimport org.apache.commons.lang3.StringUtils\n\ndata class ProcedureId("
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/SchemaId.kt",
"chars": 795,
"preview": "package io.github.melin.superior.common.relational\n\nimport org.apache.commons.lang3.StringUtils\n\ndata class SchemaId(val"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/Statement.kt",
"chars": 741,
"preview": "package io.github.melin.superior.common.relational\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io.githu"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/TableId.kt",
"chars": 1438,
"preview": "package io.github.melin.superior.common.relational\n\nimport org.apache.commons.lang3.StringUtils\n\ndata class TableId(val "
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/abs/AbsDatabaseStatement.kt",
"chars": 209,
"preview": "package io.github.melin.superior.common.relational.abs\n\nimport io.github.melin.superior.common.relational.Statement\n\nabs"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/abs/AbsTableStatement.kt",
"chars": 260,
"preview": "package io.github.melin.superior.common.relational.abs\n\nimport io.github.melin.superior.common.relational.Statement\nimpo"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/alter/AlterAction.kt",
"chars": 298,
"preview": "package io.github.melin.superior.common.relational.alter\n\nimport io.github.melin.superior.common.AlterActionType\nimport "
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/alter/AlterActions.kt",
"chars": 4095,
"preview": "package io.github.melin.superior.common.relational.alter\n\nimport com.google.common.collect.Maps\nimport io.github.melin.s"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/alter/AlterDatabase.kt",
"chars": 993,
"preview": "package io.github.melin.superior.common.relational.alter\n\nimport io.github.melin.superior.common.*\nimport io.github.meli"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/alter/AlterDatabaseActions.kt",
"chars": 545,
"preview": "package io.github.melin.superior.common.relational.alter\n\nimport com.google.common.collect.Maps\nimport io.github.melin.s"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/alter/AlterMaterializedView.kt",
"chars": 950,
"preview": "package io.github.melin.superior.common.relational.alter\n\nimport io.github.melin.superior.common.*\nimport io.github.meli"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/alter/AlterTable.kt",
"chars": 1163,
"preview": "package io.github.melin.superior.common.relational.alter\n\nimport io.github.melin.superior.common.*\nimport io.github.meli"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/alter/AlterView.kt",
"chars": 921,
"preview": "package io.github.melin.superior.common.relational.alter\n\nimport io.github.melin.superior.common.*\nimport io.github.meli"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/alter/DeltaAlterActions.kt",
"chars": 756,
"preview": "package io.github.melin.superior.common.relational.alter\n\nimport io.github.melin.superior.common.AlterActionType\n\nclass "
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/alter/IcebergAlterActions.kt",
"chars": 1059,
"preview": "package io.github.melin.superior.common.relational.alter\n\nimport io.github.melin.superior.common.AlterActionType\n\ndata c"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/AddResourceStatement.kt",
"chars": 687,
"preview": "package io.github.melin.superior.common.relational.common\n\nimport io.github.melin.superior.common.PrivilegeType\nimport i"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/CallProcedure.kt",
"chars": 952,
"preview": "package io.github.melin.superior.common.relational.common\n\nimport com.google.common.collect.Sets\nimport io.github.melin."
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/CancelExport.kt",
"chars": 568,
"preview": "package io.github.melin.superior.common.relational.common\n\nimport io.github.melin.superior.common.PrivilegeType\nimport i"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/CommentStatement.kt",
"chars": 601,
"preview": "package io.github.melin.superior.common.relational.common\n\nimport io.github.melin.superior.common.PrivilegeType\nimport i"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/DescModel.kt",
"chars": 3105,
"preview": "package io.github.melin.superior.common.relational.common\n\nimport io.github.melin.superior.common.PrivilegeType\nimport i"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/ListResourceStatement.kt",
"chars": 688,
"preview": "package io.github.melin.superior.common.relational.common\n\nimport io.github.melin.superior.common.PrivilegeType\nimport i"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/ReSetStatement.kt",
"chars": 479,
"preview": "package io.github.melin.superior.common.relational.common\n\nimport io.github.melin.superior.common.PrivilegeType\nimport i"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/RefreshMaterializedView.kt",
"chars": 705,
"preview": "package io.github.melin.superior.common.relational.common\n\nimport io.github.melin.superior.common.PrivilegeType\nimport i"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/RemoveResourceStatement.kt",
"chars": 693,
"preview": "package io.github.melin.superior.common.relational.common\n\nimport io.github.melin.superior.common.PrivilegeType\nimport i"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/SetStatement.kt",
"chars": 502,
"preview": "package io.github.melin.superior.common.relational.common\n\nimport io.github.melin.superior.common.PrivilegeType\nimport i"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/ShowStatement.kt",
"chars": 935,
"preview": "package io.github.melin.superior.common.relational.common\n\nimport io.github.melin.superior.common.PrivilegeType\nimport i"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/SyncStatement.kt",
"chars": 1823,
"preview": "package io.github.melin.superior.common.relational.common\n\nimport com.google.common.collect.Maps\nimport io.github.melin."
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/common/UseStatement.kt",
"chars": 1084,
"preview": "package io.github.melin.superior.common.relational.common\n\nimport io.github.melin.superior.common.PrivilegeType\nimport i"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/create/CreateCatalog.kt",
"chars": 610,
"preview": "package io.github.melin.superior.common.relational.create\n\nimport io.github.melin.superior.common.PrivilegeType\nimport i"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/create/CreateDatabase.kt",
"chars": 965,
"preview": "package io.github.melin.superior.common.relational.create\n\nimport io.github.melin.superior.common.PrivilegeType\nimport i"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/create/CreateFunction.kt",
"chars": 1294,
"preview": "package io.github.melin.superior.common.relational.create\n\nimport io.github.melin.superior.common.PrivilegeType\nimport i"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/create/CreateMaterializedView.kt",
"chars": 1002,
"preview": "package io.github.melin.superior.common.relational.create\n\nimport io.github.melin.superior.common.PrivilegeType\nimport i"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/create/CreateProcedure.kt",
"chars": 1025,
"preview": "package io.github.melin.superior.common.relational.create\n\nimport io.github.melin.superior.common.PrivilegeType\nimport i"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/create/CreateSchema.kt",
"chars": 577,
"preview": "package io.github.melin.superior.common.relational.create\n\nimport io.github.melin.superior.common.PrivilegeType\nimport i"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/create/CreateTable.kt",
"chars": 2616,
"preview": "package io.github.melin.superior.common.relational.create\n\nimport com.google.common.collect.Lists\nimport io.github.melin"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/create/CreateTableAsSelect.kt",
"chars": 1983,
"preview": "package io.github.melin.superior.common.relational.create\n\nimport io.github.melin.superior.common.PrivilegeType\nimport i"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/create/CreateTableLike.kt",
"chars": 732,
"preview": "package io.github.melin.superior.common.relational.create\n\nimport io.github.melin.superior.common.PrivilegeType\nimport i"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/create/CreateView.kt",
"chars": 1069,
"preview": "package io.github.melin.superior.common.relational.create\n\nimport io.github.melin.superior.common.PrivilegeType\nimport i"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/delta/OptimizeTable.kt",
"chars": 578,
"preview": "package io.github.melin.superior.common.relational.delta\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/delta/VacuumTable.kt",
"chars": 574,
"preview": "package io.github.melin.superior.common.relational.delta\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/dml/DeleteTable.kt",
"chars": 780,
"preview": "package io.github.melin.superior.common.relational.dml\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io.g"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/dml/InsertFiles.kt",
"chars": 557,
"preview": "package io.github.melin.superior.common.relational.dml\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io.g"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/dml/InsertMode.kt",
"chars": 212,
"preview": "package io.github.melin.superior.common.relational.dml\n\nimport java.io.Serializable\n\nenum class InsertMode : Serializabl"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/dml/InsertMultiTable.kt",
"chars": 506,
"preview": "package io.github.melin.superior.common.relational.dml\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io.g"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/dml/InsertTable.kt",
"chars": 1300,
"preview": "package io.github.melin.superior.common.relational.dml\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io.g"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/dml/MergeTable.kt",
"chars": 593,
"preview": "package io.github.melin.superior.common.relational.dml\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io.g"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/dml/QueryStmt.kt",
"chars": 763,
"preview": "package io.github.melin.superior.common.relational.dml\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io.g"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/dml/UpdateTable.kt",
"chars": 609,
"preview": "package io.github.melin.superior.common.relational.dml\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io.g"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/drop/DropCatalog.kt",
"chars": 484,
"preview": "package io.github.melin.superior.common.relational.drop\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io."
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/drop/DropDatabase.kt",
"chars": 762,
"preview": "package io.github.melin.superior.common.relational.drop\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io."
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/drop/DropFunction.kt",
"chars": 612,
"preview": "package io.github.melin.superior.common.relational.drop\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io."
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/drop/DropMaterializedView.kt",
"chars": 676,
"preview": "package io.github.melin.superior.common.relational.drop\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io."
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/drop/DropProcedure.kt",
"chars": 559,
"preview": "package io.github.melin.superior.common.relational.drop\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io."
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/drop/DropSchema.kt",
"chars": 580,
"preview": "package io.github.melin.superior.common.relational.drop\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io."
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/drop/DropSequence.kt",
"chars": 711,
"preview": "package io.github.melin.superior.common.relational.drop\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io."
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/drop/DropTable.kt",
"chars": 715,
"preview": "package io.github.melin.superior.common.relational.drop\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io."
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/drop/DropView.kt",
"chars": 651,
"preview": "package io.github.melin.superior.common.relational.drop\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io."
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/enums.kt",
"chars": 215,
"preview": "package io.github.melin.superior.common.relational\n\nenum class SortType {\n ASC,\n DESC,\n UNKOWN\n}\n\nenum class Pa"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/io/AlterLoadTable.kt",
"chars": 528,
"preview": "package io.github.melin.superior.common.relational.io\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io.gi"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/io/CancelLoadTable.kt",
"chars": 529,
"preview": "package io.github.melin.superior.common.relational.io\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io.gi"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/io/ExportTable.kt",
"chars": 1795,
"preview": "package io.github.melin.superior.common.relational.io\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io.gi"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/io/LoadTable.kt",
"chars": 552,
"preview": "package io.github.melin.superior.common.relational.io\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io.gi"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/table/ColumnRel.kt",
"chars": 1377,
"preview": "package io.github.melin.superior.common.relational.table\n\ndata class ColumnRel(\n val columnName: String,\n val type"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/table/RepairTable.kt",
"chars": 569,
"preview": "package io.github.melin.superior.common.relational.table\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/relational/table/TruncateTable.kt",
"chars": 747,
"preview": "package io.github.melin.superior.common.relational.table\n\nimport io.github.melin.superior.common.PrivilegeType\nimport io"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/type/AbsDataTimeType.kt",
"chars": 92,
"preview": "package io.github.melin.superior.common.type\n\nabstract class AbsDataTimeType : AbsType() {}\n"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/type/AbsNumericType.kt",
"chars": 158,
"preview": "package io.github.melin.superior.common.type\n\nabstract class AbsNumericType : AbsType() {\n var character: String? = n"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/type/AbsStringType.kt",
"chars": 157,
"preview": "package io.github.melin.superior.common.type\n\nabstract class AbsStringType : AbsType() {\n var character: String? = nu"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/type/AbsType.kt",
"chars": 159,
"preview": "package io.github.melin.superior.common.type\n\nabstract class AbsType : Type {\n override val alias: String? = null\n "
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/type/Type.kt",
"chars": 174,
"preview": "package io.github.melin.superior.common.type\n\ninterface Type {\n val name: String\n val alias: String?\n val alias"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/util/CommonUtils.kt",
"chars": 2165,
"preview": "package com.github.melin.superior.sql.parser.util\n\nimport org.antlr.v4.runtime.ParserRuleContext\nimport org.antlr.v4.run"
},
{
"path": "superior-common-parser/src/main/kotlin/io/github/melin/superior/common/util/DateUtils.kt",
"chars": 588,
"preview": "package com.github.melin.superior.sql.parser.util\n\nimport java.time.DateTimeException\nimport java.time.LocalDateTime\nimp"
},
{
"path": "superior-dameng-parser/pom.xml",
"chars": 811,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "superior-dameng-parser/src/main/antlr4/io/github/melin/superior/parser/dameng/antlr4/DmSqlLexer.g4",
"chars": 43959,
"preview": "lexer grammar DmSqlLexer;\n\n\n// Keywords\n\nABORT: 'ABORT';\nABSOLUTE: "
},
{
"path": "superior-dameng-parser/src/main/antlr4/io/github/melin/superior/parser/dameng/antlr4/DmSqlParser.g4",
"chars": 143055,
"preview": "parser grammar DmSqlParser;\n\noptions { tokenVocab=DmSqlLexer; }\n\n\ndmprogram :\n sql_clauses (SEMI sql_clauses)* SEMI? "
},
{
"path": "superior-dameng-parser/src/main/kotlin/io/github/melin/superior/parser/dameng/AbstractSqlParser.kt",
"chars": 1178,
"preview": "package io.github.melin.superior.parser.dameng\n\nimport io.github.melin.superior.common.antlr4.AntlrCaches\nimport io.gith"
},
{
"path": "superior-dameng-parser/src/main/kotlin/io/github/melin/superior/parser/dameng/DmSqlAntlr4Visitor.kt",
"chars": 10698,
"preview": "package io.github.melin.superior.parser.dameng\n\nimport com.github.melin.superior.sql.parser.util.CommonUtils\nimport io.g"
},
{
"path": "superior-dameng-parser/src/main/kotlin/io/github/melin/superior/parser/dameng/DmSqlHelper.kt",
"chars": 4162,
"preview": "package com.github.melin.superior.sql.parser.mysql\n\nimport com.github.melin.superior.sql.parser.util.CommonUtils\nimport "
},
{
"path": "superior-dameng-parser/src/test/kotlin/io/github/melin/superior/parser/dameng/DmSqlParserDdlTest.kt",
"chars": 5806,
"preview": "package io.github.melin.superior.parser.dameng\n\nimport com.github.melin.superior.sql.parser.mysql.DmSqlHelper\nimport io."
},
{
"path": "superior-dameng-parser/src/test/kotlin/io/github/melin/superior/parser/dameng/DmSqlParserDmlTest.kt",
"chars": 8972,
"preview": "package io.github.melin.superior.parser.dameng\n\nimport com.github.melin.superior.sql.parser.mysql.DmSqlHelper\nimport io."
},
{
"path": "superior-dameng-parser/src/test/kotlin/io/github/melin/superior/parser/dameng/DmSqlProcedureParserTest.kt",
"chars": 82,
"preview": "package io.github.melin.superior.parser.dameng\n\nclass DmSqlProcedureParserTest {}\n"
},
{
"path": "superior-dameng-parser/src/test/resources/insert.sql",
"chars": 46838,
"preview": "insert into dwd.dwd_d03_contract_det_s\nselect to_date('${yyyy-mm-dd}', 'yyyy-mm-dd') "
},
{
"path": "superior-dameng-parser/src/test/resources/log4j2.xml",
"chars": 520,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Configuration>\n <Appenders>\n <Console name=\"Console\" target=\"SYSTEM_OU"
},
{
"path": "superior-flink-parser/README.md",
"chars": 1736,
"preview": "### 介绍\n\n### 整库同步\n\n```sql\n-- 分布表,合并写入目标库中\nCREATE DATABASE IF NOT EXISTS flink_cdc_demos \nWITH (\n 'connector' = 'jdbc',"
},
{
"path": "superior-flink-parser/pom.xml",
"chars": 809,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "superior-flink-parser/src/main/antlr4/io/github/melin/superior/parser/flink/antlr4/FlinkSqlLexer.g4",
"chars": 23101,
"preview": "lexer grammar FlinkSqlLexer;\n\n// SKIP\n\nWHITE_SPACE : (' ' | '\\t' | '\\r' | '\\n') "
},
{
"path": "superior-flink-parser/src/main/antlr4/io/github/melin/superior/parser/flink/antlr4/FlinkSqlParser.g4",
"chars": 30612,
"preview": "parser grammar FlinkSqlParser;\n\noptions { tokenVocab=FlinkSqlLexer; }\n\nsqlStatements\n : singleStatement* EOF\n ;\n\ns"
},
{
"path": "superior-flink-parser/src/main/kotlin/io/github/melin/superior/parser/flink/AbstractSqlParser.kt",
"chars": 1188,
"preview": "package io.github.melin.superior.parser.flink\n\nimport io.github.melin.superior.common.antlr4.AntlrCaches\nimport io.githu"
},
{
"path": "superior-flink-parser/src/main/kotlin/io/github/melin/superior/parser/flink/FlinkSqlAntlr4Visitor.kt",
"chars": 16366,
"preview": "package io.github.melin.superior.parser.flink\n\nimport com.github.melin.superior.sql.parser.util.CommonUtils\nimport io.gi"
},
{
"path": "superior-flink-parser/src/main/kotlin/io/github/melin/superior/parser/flink/FlinkSqlHelper.kt",
"chars": 4022,
"preview": "package io.github.melin.superior.parser.flink\n\nimport com.github.melin.superior.sql.parser.util.CommonUtils\nimport io.gi"
},
{
"path": "superior-flink-parser/src/test/kotlin/io/github/melin/superior/parser/flink/FlinkCheckSql.kt",
"chars": 353,
"preview": "package io.github.melin.superior.parser.flink\n\nimport org.junit.Test\n\nclass FlinkCheckSql {\n\n @Test\n fun selectSql"
},
{
"path": "superior-flink-parser/src/test/kotlin/io/github/melin/superior/parser/flink/FlinkSqlParserDdlTest.kt",
"chars": 7188,
"preview": "package io.github.melin.superior.parser.flink\n\nimport io.github.melin.superior.common.relational.create.CreateTable\nimpo"
},
{
"path": "superior-flink-parser/src/test/kotlin/io/github/melin/superior/parser/flink/FlinkSqlParserDmlTest.kt",
"chars": 10153,
"preview": "package io.github.melin.superior.parser.flink\n\nimport io.github.melin.superior.common.relational.common.AddResourceState"
},
{
"path": "superior-flink-parser/src/test/resources/log4j2.xml",
"chars": 520,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Configuration>\n <Appenders>\n <Console name=\"Console\" target=\"SYSTEM_OU"
},
{
"path": "superior-mysql-parser/pom.xml",
"chars": 809,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "superior-mysql-parser/src/main/antlr4/io/github/melin/superior/parser/mysql/antlr4/MySqlLexer.g4",
"chars": 51739,
"preview": "lexer grammar MySqlLexer;\n\nchannels {\n MYSQLCOMMENT,\n ERRORCHANNEL\n}\n\n// SKIP\n\nSPACE : [ \\t\\r\\n]+ "
},
{
"path": "superior-mysql-parser/src/main/antlr4/io/github/melin/superior/parser/mysql/antlr4/MySqlParser.g4",
"chars": 94476,
"preview": "/*\nMySQL (Positive Technologies) grammar\nThe MIT License (MIT).\nCopyright (c) 2015-2017, Ivan Kochurkin (kvanttt@gmail.c"
},
{
"path": "superior-mysql-parser/src/main/kotlin/io/github/melin/superior/parser/mysql/AbstractSqlParser.kt",
"chars": 1176,
"preview": "package io.github.melin.superior.parser.mysql\n\nimport io.github.melin.superior.common.antlr4.AntlrCaches\nimport io.githu"
},
{
"path": "superior-mysql-parser/src/main/kotlin/io/github/melin/superior/parser/mysql/MySqlAntlr4Visitor.kt",
"chars": 24458,
"preview": "package io.github.melin.superior.parser.mysql\n\nimport com.github.melin.superior.sql.parser.util.CommonUtils\nimport io.gi"
},
{
"path": "superior-mysql-parser/src/main/kotlin/io/github/melin/superior/parser/mysql/MySqlHelper.kt",
"chars": 4155,
"preview": "package com.github.melin.superior.sql.parser.mysql\n\nimport com.github.melin.superior.sql.parser.util.CommonUtils\nimport "
},
{
"path": "superior-mysql-parser/src/main/kotlin/io/github/melin/superior/parser/mysql/type/JsonType.kt",
"chars": 175,
"preview": "package io.github.melin.superior.parser.mysql.type\n\nimport io.github.melin.superior.common.type.AbsType\n\nclass JsonType "
},
{
"path": "superior-mysql-parser/src/main/kotlin/io/github/melin/superior/parser/mysql/type/datetime.kt",
"chars": 612,
"preview": "package io.github.melin.superior.parser.mysql.type\n\nimport io.github.melin.superior.common.type.AbsDataTimeType\n\nclass D"
},
{
"path": "superior-mysql-parser/src/main/kotlin/io/github/melin/superior/parser/mysql/type/numeric.kt",
"chars": 2310,
"preview": "package io.github.melin.superior.parser.mysql.type\n\nimport io.github.melin.superior.common.type.AbsNumericType\n\ndata cla"
},
{
"path": "superior-mysql-parser/src/main/kotlin/io/github/melin/superior/parser/mysql/type/string.kt",
"chars": 1696,
"preview": "package io.github.melin.superior.parser.mysql.type\n\nimport io.github.melin.superior.common.type.AbsStringType\n\ndata clas"
},
{
"path": "superior-mysql-parser/src/test/kotlin/io/github/melin/superior/parser/mysql/MySqlParserDdlTest.kt",
"chars": 23219,
"preview": "package io.github.melin.superior.parser.mysql\n\nimport com.github.melin.superior.sql.parser.mysql.MySqlHelper\nimport io.g"
},
{
"path": "superior-mysql-parser/src/test/kotlin/io/github/melin/superior/parser/mysql/MySqlParserDmlTest.kt",
"chars": 11680,
"preview": "package io.github.melin.superior.parser.mysql\n\nimport com.github.melin.superior.sql.parser.mysql.MySqlHelper\nimport io.g"
},
{
"path": "superior-mysql-parser/src/test/kotlin/io/github/melin/superior/parser/mysql/MySqlProcedureParserTest.kt",
"chars": 2556,
"preview": "package io.github.melin.superior.parser.mysql\n\nimport com.github.melin.superior.sql.parser.mysql.MySqlHelper\nimport io.g"
},
{
"path": "superior-mysql-parser/src/test/resources/log4j2.xml",
"chars": 520,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Configuration>\n <Appenders>\n <Console name=\"Console\" target=\"SYSTEM_OU"
},
{
"path": "superior-oracle-parser/pom.xml",
"chars": 812,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "superior-oracle-parser/src/main/antlr4/io/github/melin/superior/parser/oracle/antlr4/OracleLexer.g4",
"chars": 119395,
"preview": "/**\n * Oracle(c) PL/SQL 11g Parser\n *\n * Copyright (c) 2009-2011 Alexandre Porcelli <alexandre.porcelli@gmail.com>\n * Co"
},
{
"path": "superior-oracle-parser/src/main/antlr4/io/github/melin/superior/parser/oracle/antlr4/OracleParser.g4",
"chars": 238753,
"preview": "/**\n * Oracle(c) PL/SQL 11g Parser\n *\n * Copyright (c) 2009-2011 Alexandre Porcelli <alexandre.porcelli@gmail.com>\n * Co"
},
{
"path": "superior-oracle-parser/src/main/java/io/github/melin/superior/parser/oracle/antlr4/OracleLexerBase.java",
"chars": 445,
"preview": "package io.github.melin.superior.parser.oracle.antlr4;\n\nimport org.antlr.v4.runtime.CharStream;\nimport org.antlr.v4.runt"
},
{
"path": "superior-oracle-parser/src/main/java/io/github/melin/superior/parser/oracle/antlr4/OracleParserBase.java",
"chars": 809,
"preview": "package io.github.melin.superior.parser.oracle.antlr4;\n\nimport org.antlr.v4.runtime.*;\n\npublic abstract class OraclePars"
},
{
"path": "superior-oracle-parser/src/main/kotlin/io/github/melin/superior/parser/oracle/AbstractSqlParser.kt",
"chars": 1182,
"preview": "package io.github.melin.superior.parser.oracle\n\nimport io.github.melin.superior.common.antlr4.AntlrCaches\nimport io.gith"
},
{
"path": "superior-oracle-parser/src/main/kotlin/io/github/melin/superior/parser/oracle/OracleSqlAntlr4Visitor.kt",
"chars": 20893,
"preview": "package io.github.melin.superior.parser.oracle\n\nimport com.github.melin.superior.sql.parser.util.CommonUtils\nimport io.g"
},
{
"path": "superior-oracle-parser/src/main/kotlin/io/github/melin/superior/parser/oracle/OracleSqlHelper.kt",
"chars": 4452,
"preview": "package io.github.melin.superior.parser.oracle\n\nimport com.github.melin.superior.sql.parser.util.CommonUtils\nimport io.g"
},
{
"path": "superior-oracle-parser/src/test/java/io/github/melin/superior/parser/oracle/OracleProcessParserTest.kt",
"chars": 9202,
"preview": "package io.github.melin.superior.parser.oracle\n\nimport io.github.melin.superior.common.StatementType\nimport io.github.me"
},
{
"path": "superior-oracle-parser/src/test/java/io/github/melin/superior/parser/oracle/OracleSqlParserDdlTest.kt",
"chars": 5595,
"preview": "package io.github.melin.superior.parser.oracle\n\nimport io.github.melin.superior.common.StatementType\nimport io.github.me"
},
{
"path": "superior-oracle-parser/src/test/java/io/github/melin/superior/parser/oracle/OracleSqlParserDmlTest.kt",
"chars": 8401,
"preview": "package io.github.melin.superior.parser.oracle\n\nimport io.github.melin.superior.common.StatementType\nimport io.github.me"
},
{
"path": "superior-oracle-parser/src/test/resources/insert.sql",
"chars": 46838,
"preview": "insert into dwd.dwd_d03_contract_det_s\nselect to_date('${yyyy-mm-dd}', 'yyyy-mm-dd') "
},
{
"path": "superior-oracle-parser/src/test/resources/log4j2.xml",
"chars": 520,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Configuration>\n <Appenders>\n <Console name=\"Console\" target=\"SYSTEM_OU"
},
{
"path": "superior-postgres-parser/pom.xml",
"chars": 815,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "superior-postgres-parser/src/main/antlr4/io/github/melin/superior/parser/postgre/antlr4/PostgreSqlLexer.g4",
"chars": 32498,
"preview": "/*\nbased on\nhttps://github.com/tunnelvisionlabs/antlr4-grammar-postgresql/blob/master/src/com/tunnelvisionlabs/postgresq"
},
{
"path": "superior-postgres-parser/src/main/antlr4/io/github/melin/superior/parser/postgre/antlr4/PostgreSqlParser.g4",
"chars": 109378,
"preview": "parser grammar PostgreSqlParser;\n\n\noptions { tokenVocab = PostgreSqlLexer;\nsuperClass = PostgreSqlParserBase;\n}\n\n@header"
},
{
"path": "superior-postgres-parser/src/main/java/io/github/melin/superior/parser/postgre/antlr4/LexerDispatchingErrorListener.java",
"chars": 1908,
"preview": "package io.github.melin.superior.parser.postgre.antlr4;\n\nimport java.util.BitSet;\nimport org.antlr.v4.runtime.*;\nimport "
},
{
"path": "superior-postgres-parser/src/main/java/io/github/melin/superior/parser/postgre/antlr4/ParserDispatchingErrorListener.java",
"chars": 1912,
"preview": "package io.github.melin.superior.parser.postgre.antlr4;\n\nimport java.util.BitSet;\nimport org.antlr.v4.runtime.*;\nimport "
},
{
"path": "superior-postgres-parser/src/main/java/io/github/melin/superior/parser/postgre/antlr4/PostgreSqlLexerBase.java",
"chars": 1681,
"preview": "package io.github.melin.superior.parser.postgre.antlr4;\n\nimport java.util.ArrayDeque;\nimport java.util.Deque;\nimport org"
},
{
"path": "superior-postgres-parser/src/main/java/io/github/melin/superior/parser/postgre/antlr4/PostgreSqlParserBase.java",
"chars": 4944,
"preview": "package io.github.melin.superior.parser.postgre.antlr4;\n\nimport io.github.melin.superior.common.antlr4.UpperCaseCharStre"
},
{
"path": "superior-postgres-parser/src/main/kotlin/io/github/melin/superior/parser/postgre/AbstractSqlParser.kt",
"chars": 1200,
"preview": "package io.github.melin.superior.parser.postgre\n\nimport io.github.melin.superior.common.antlr4.AntlrCaches\nimport io.git"
},
{
"path": "superior-postgres-parser/src/main/kotlin/io/github/melin/superior/parser/postgre/PostgreSqlAntlr4Visitor.kt",
"chars": 27632,
"preview": "package io.github.melin.superior.parser.postgre\n\nimport com.github.melin.superior.sql.parser.util.CommonUtils\nimport com"
},
{
"path": "superior-postgres-parser/src/main/kotlin/io/github/melin/superior/parser/postgre/PostgreSqlHelper.kt",
"chars": 4138,
"preview": "package io.github.melin.superior.parser.postgre\n\nimport com.github.melin.superior.sql.parser.util.CommonUtils\nimport io."
},
{
"path": "superior-postgres-parser/src/main/kotlin/io/github/melin/superior/parser/postgre/relational/CreatePartitionTable.kt",
"chars": 643,
"preview": "package io.github.melin.superior.parser.postgre.relational\n\nimport io.github.melin.superior.common.PrivilegeType\nimport "
},
{
"path": "superior-postgres-parser/src/main/kotlin/io/github/melin/superior/parser/postgre/type/BooleanType.kt",
"chars": 223,
"preview": "package io.github.melin.superior.parser.postgre.type\n\nimport io.github.melin.superior.common.type.AbsType\n\nclass Boolean"
},
{
"path": "superior-postgres-parser/src/main/kotlin/io/github/melin/superior/parser/postgre/type/JsonType.kt",
"chars": 177,
"preview": "package io.github.melin.superior.parser.postgre.type\n\nimport io.github.melin.superior.common.type.AbsType\n\nclass JsonTyp"
},
{
"path": "superior-postgres-parser/src/main/kotlin/io/github/melin/superior/parser/postgre/type/datetime.kt",
"chars": 655,
"preview": "package io.github.melin.superior.parser.postgre.type\n\nimport io.github.melin.superior.common.type.AbsDataTimeType\n\nclass"
},
{
"path": "superior-postgres-parser/src/main/kotlin/io/github/melin/superior/parser/postgre/type/numeric.kt",
"chars": 2407,
"preview": "package io.github.melin.superior.parser.postgre.type\n\nimport io.github.melin.superior.common.type.AbsNumericType\n\ndata c"
},
{
"path": "superior-postgres-parser/src/main/kotlin/io/github/melin/superior/parser/postgre/type/string.kt",
"chars": 842,
"preview": "package io.github.melin.superior.parser.postgre.type\n\nimport io.github.melin.superior.common.type.AbsStringType\n\ndata cl"
},
{
"path": "superior-postgres-parser/src/test/java/io/github/melin/superior/parser/postgre/PostgreSqlParserDdlTest.kt",
"chars": 11814,
"preview": "package io.github.melin.superior.parser.postgre\n\nimport io.github.melin.superior.common.AlterActionType\nimport io.github"
},
{
"path": "superior-postgres-parser/src/test/java/io/github/melin/superior/parser/postgre/PostgreSqlParserDmlTest.kt",
"chars": 10864,
"preview": "package io.github.melin.superior.parser.postgre\n\nimport io.github.melin.superior.common.StatementType\nimport io.github.m"
},
{
"path": "superior-postgres-parser/src/test/java/io/github/melin/superior/parser/postgre/PostgreSqlProcessParserTest.kt",
"chars": 12456,
"preview": "package io.github.melin.superior.parser.postgre\n\nimport io.github.melin.superior.common.StatementType\nimport io.github.m"
},
{
"path": "superior-postgres-parser/src/test/resources/log4j2.xml",
"chars": 520,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Configuration>\n <Appenders>\n <Console name=\"Console\" target=\"SYSTEM_OU"
},
{
"path": "superior-presto-parser/pom.xml",
"chars": 811,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "superior-presto-parser/src/main/antlr4/io/github/melin/superior/parser/presto/antlr4/PrestoSqlBase.g4",
"chars": 28526,
"preview": "/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance "
},
{
"path": "superior-presto-parser/src/main/java/io/github/melin/superior/parser/presto/CaseInsensitiveStream.java",
"chars": 1882,
"preview": "/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance "
},
{
"path": "superior-presto-parser/src/main/kotlin/io/github/melin/superior/parser/presto/AbstractSqlParser.kt",
"chars": 1210,
"preview": "package io.github.melin.superior.parser.presto\n\nimport io.github.melin.superior.common.antlr4.AntlrCaches\nimport io.gith"
},
{
"path": "superior-presto-parser/src/main/kotlin/io/github/melin/superior/parser/presto/PrestoSqlAntlr4Visitor.kt",
"chars": 7261,
"preview": "package io.github.melin.superior.parser.presto\n\nimport com.github.melin.superior.sql.parser.util.CommonUtils\nimport io.g"
},
{
"path": "superior-presto-parser/src/main/kotlin/io/github/melin/superior/parser/presto/PrestoSqlHelper.kt",
"chars": 4084,
"preview": "package io.github.melin.superior.parser.presto\n\nimport com.github.melin.superior.sql.parser.util.CommonUtils\nimport io.g"
},
{
"path": "superior-presto-parser/src/test/kotlin/io/github/melin/superior/parser/presto/PrestoSqlParserTest.kt",
"chars": 4449,
"preview": "package io.github.melin.superior.parser.presto\n\nimport io.github.melin.superior.common.StatementType\nimport io.github.me"
},
{
"path": "superior-presto-parser/src/test/resources/log4j2.xml",
"chars": 520,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Configuration>\n <Appenders>\n <Console name=\"Console\" target=\"SYSTEM_OU"
},
{
"path": "superior-redshift-parser/pom.xml",
"chars": 815,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "superior-redshift-parser/src/main/antlr4/io/github/melin/superior/parser/redshift/antlr4/RedshiftLexer.g4",
"chars": 32405,
"preview": "/*\nbased on\nhttps://github.com/tunnelvisionlabs/antlr4-grammar-postgresql/blob/master/src/com/tunnelvisionlabs/postgresq"
},
{
"path": "superior-redshift-parser/src/main/antlr4/io/github/melin/superior/parser/redshift/antlr4/RedshiftParser.g4",
"chars": 109788,
"preview": "parser grammar RedshiftParser;\n\n\noptions { tokenVocab = RedshiftLexer;\n superClass = RedshiftParserBase;\n}\n\n@header\n{"
},
{
"path": "superior-redshift-parser/src/main/java/io/github/melin/superior/parser/redshift/antlr4/LexerDispatchingErrorListener.java",
"chars": 1909,
"preview": "package io.github.melin.superior.parser.redshift.antlr4;\n\nimport java.util.BitSet;\nimport org.antlr.v4.runtime.*;\nimport"
},
{
"path": "superior-redshift-parser/src/main/java/io/github/melin/superior/parser/redshift/antlr4/ParserDispatchingErrorListener.java",
"chars": 1913,
"preview": "package io.github.melin.superior.parser.redshift.antlr4;\n\nimport java.util.BitSet;\nimport org.antlr.v4.runtime.*;\nimport"
},
{
"path": "superior-redshift-parser/src/main/java/io/github/melin/superior/parser/redshift/antlr4/RedshiftLexerBase.java",
"chars": 1672,
"preview": "package io.github.melin.superior.parser.redshift.antlr4;\n\nimport java.util.ArrayDeque;\nimport java.util.Deque;\nimport or"
},
{
"path": "superior-redshift-parser/src/main/java/io/github/melin/superior/parser/redshift/antlr4/RedshiftParserBase.java",
"chars": 4875,
"preview": "package io.github.melin.superior.parser.redshift.antlr4;\n\nimport io.github.melin.superior.common.antlr4.UpperCaseCharStr"
},
{
"path": "superior-redshift-parser/src/main/kotlin/io/github/melin/superior/parser/postgre/AbstractSqlParser.kt",
"chars": 1193,
"preview": "package io.github.melin.superior.parser.postgre\n\nimport io.github.melin.superior.common.antlr4.AntlrCaches\nimport io.git"
},
{
"path": "superior-redshift-parser/src/main/kotlin/io/github/melin/superior/parser/postgre/RedshiftSqlAntlr4Visitor.kt",
"chars": 27353,
"preview": "package io.github.melin.superior.parser.postgre\n\nimport com.github.melin.superior.sql.parser.util.CommonUtils\nimport com"
},
{
"path": "superior-redshift-parser/src/main/kotlin/io/github/melin/superior/parser/postgre/RedshiftSqlHelper.kt",
"chars": 4108,
"preview": "package io.github.melin.superior.parser.postgre\n\nimport com.github.melin.superior.sql.parser.util.CommonUtils\nimport io."
},
{
"path": "superior-redshift-parser/src/main/kotlin/io/github/melin/superior/parser/postgre/relational/CreatePartitionTable.kt",
"chars": 643,
"preview": "package io.github.melin.superior.parser.postgre.relational\n\nimport io.github.melin.superior.common.PrivilegeType\nimport "
},
{
"path": "superior-redshift-parser/src/main/kotlin/io/github/melin/superior/parser/postgre/type/BooleanType.kt",
"chars": 223,
"preview": "package io.github.melin.superior.parser.postgre.type\n\nimport io.github.melin.superior.common.type.AbsType\n\nclass Boolean"
},
{
"path": "superior-redshift-parser/src/main/kotlin/io/github/melin/superior/parser/postgre/type/JsonType.kt",
"chars": 177,
"preview": "package io.github.melin.superior.parser.postgre.type\n\nimport io.github.melin.superior.common.type.AbsType\n\nclass JsonTyp"
},
{
"path": "superior-redshift-parser/src/main/kotlin/io/github/melin/superior/parser/postgre/type/datetime.kt",
"chars": 655,
"preview": "package io.github.melin.superior.parser.postgre.type\n\nimport io.github.melin.superior.common.type.AbsDataTimeType\n\nclass"
}
]
// ... and 74 more files (download for full content)
About this extraction
This page contains the full source code of the melin/superior-sql-parser GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 274 files (2.4 MB), approximately 654.0k tokens, and a symbol index with 160 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.