├── .github
└── workflows
│ ├── image_push.yml
│ └── maven_test.yml
├── .gitignore
├── LICENSE
├── README.md
├── checkstyle
└── checkstyle.xml
├── docs
├── Architecture.png
├── Idea.md
├── QuickStart.md
├── VtDriver.png
├── VtDriver支持的SQL.md
├── VtDriver适配.md
├── architecture.en.png
├── lombok.png
├── preheat.md
├── properties.md
├── proto_2.png
├── readme.en.md
└── splitTable.md
├── pom.xml
├── proto
├── pom.xml
└── src
│ └── main
│ └── proto
│ ├── README.md
│ ├── automation.proto
│ ├── automationservice.proto
│ ├── binlogdata.proto
│ ├── binlogservice.proto
│ ├── logutil.proto
│ ├── mysqlctl.proto
│ ├── query.proto
│ ├── queryservice.proto
│ ├── replicationdata.proto
│ ├── tableacl.proto
│ ├── tabletmanagerdata.proto
│ ├── tabletmanagerservice.proto
│ ├── throttlerdata.proto
│ ├── throttlerservice.proto
│ ├── topodata.proto
│ ├── vschema.proto
│ ├── vtctldata.proto
│ ├── vtctlservice.proto
│ ├── vtgate.proto
│ ├── vtgateservice.proto
│ ├── vtrpc.proto
│ ├── vttest.proto
│ ├── vttime.proto
│ ├── vtworkerdata.proto
│ ├── vtworkerservice.proto
│ └── workflow.proto
├── src
├── main
│ ├── java
│ │ ├── binlogdata
│ │ │ └── Binlogdata.java
│ │ ├── com
│ │ │ └── jd
│ │ │ │ └── jdbc
│ │ │ │ ├── Executor.java
│ │ │ │ ├── IExecute.java
│ │ │ │ ├── VSchemaManager.java
│ │ │ │ ├── VcursorImpl.java
│ │ │ │ ├── api
│ │ │ │ ├── VtApiServer.java
│ │ │ │ ├── VtApiServerResponse.java
│ │ │ │ ├── VtApiStatusResponse.java
│ │ │ │ ├── VtHttpHandler.java
│ │ │ │ └── handler
│ │ │ │ │ ├── VtStatusHandler.java
│ │ │ │ │ └── VtVschemaRefreshHandler.java
│ │ │ │ ├── common
│ │ │ │ ├── Constant.java
│ │ │ │ ├── Hex.java
│ │ │ │ ├── tuple
│ │ │ │ │ ├── ImmutablePair.java
│ │ │ │ │ ├── ImmutableTriple.java
│ │ │ │ │ ├── MutablePair.java
│ │ │ │ │ ├── MutableTriple.java
│ │ │ │ │ ├── Pair.java
│ │ │ │ │ └── Triple.java
│ │ │ │ └── util
│ │ │ │ │ ├── CollectionUtils.java
│ │ │ │ │ ├── Crc32Utill.java
│ │ │ │ │ └── MapUtil.java
│ │ │ │ ├── concurrency
│ │ │ │ ├── AllErrorRecorder.java
│ │ │ │ └── ErrorRecorder.java
│ │ │ │ ├── context
│ │ │ │ ├── IContext.java
│ │ │ │ ├── PlanningContext.java
│ │ │ │ ├── VtBackgroundContext.java
│ │ │ │ ├── VtCancelContext.java
│ │ │ │ ├── VtContext.java
│ │ │ │ ├── VtContextConstant.java
│ │ │ │ └── VtDeadlineContext.java
│ │ │ │ ├── discovery
│ │ │ │ ├── HealthCheck.java
│ │ │ │ ├── SecurityCenter.java
│ │ │ │ ├── TabletHealthCheck.java
│ │ │ │ ├── TopologyWatcher.java
│ │ │ │ └── TopologyWatcherManager.java
│ │ │ │ ├── engine
│ │ │ │ ├── AbstractMultiQueryEngine.java
│ │ │ │ ├── AbstractRouteEngine.java
│ │ │ │ ├── BasePrimitiveEngine.java
│ │ │ │ ├── ConcatenateEngine.java
│ │ │ │ ├── DMLEngine.java
│ │ │ │ ├── DMLOpcode.java
│ │ │ │ ├── DeleteEngine.java
│ │ │ │ ├── Engine.java
│ │ │ │ ├── InsertEngine.java
│ │ │ │ ├── JoinEngine.java
│ │ │ │ ├── LimitEngine.java
│ │ │ │ ├── LimitStream.java
│ │ │ │ ├── MemorySortEngine.java
│ │ │ │ ├── MemorySortStream.java
│ │ │ │ ├── MultiQueryEngine.java
│ │ │ │ ├── OrderByParams.java
│ │ │ │ ├── OrderedAggregateEngine.java
│ │ │ │ ├── Plan.java
│ │ │ │ ├── PrimitiveEngine.java
│ │ │ │ ├── ProjectionEngine.java
│ │ │ │ ├── PulloutSubqueryEngine.java
│ │ │ │ ├── RouteEngine.java
│ │ │ │ ├── RouteStream.java
│ │ │ │ ├── SendEngine.java
│ │ │ │ ├── SetEngine.java
│ │ │ │ ├── SingleRowEngine.java
│ │ │ │ ├── SubQueryEngine.java
│ │ │ │ ├── TableShardQuery.java
│ │ │ │ ├── UpdateEngine.java
│ │ │ │ ├── Vcursor.java
│ │ │ │ ├── gen4
│ │ │ │ │ ├── AbstractAggregateGen4.java
│ │ │ │ │ ├── CheckCol.java
│ │ │ │ │ ├── ConcatenateGen4Engine.java
│ │ │ │ │ ├── DistinctGen4Engine.java
│ │ │ │ │ ├── FilterGen4Engine.java
│ │ │ │ │ ├── GroupByParams.java
│ │ │ │ │ ├── JoinGen4Engine.java
│ │ │ │ │ ├── LimitGen4Engine.java
│ │ │ │ │ ├── MemorySortGen4Engine.java
│ │ │ │ │ ├── OrderByParamsGen4.java
│ │ │ │ │ ├── OrderedAggregateGen4Engine.java
│ │ │ │ │ ├── ProbeTable.java
│ │ │ │ │ ├── RouteGen4Engine.java
│ │ │ │ │ ├── RoutingParameters.java
│ │ │ │ │ ├── ScalarAggregateGen4Engine.java
│ │ │ │ │ ├── SimpleConverterLookup.java
│ │ │ │ │ ├── SimpleProjectionGen4Engine.java
│ │ │ │ │ ├── VindexLookup.java
│ │ │ │ │ └── VitessCompare.java
│ │ │ │ ├── sequence
│ │ │ │ │ ├── Generate.java
│ │ │ │ │ └── SequenceCache.java
│ │ │ │ └── table
│ │ │ │ │ ├── TableDMLEngine.java
│ │ │ │ │ ├── TableDeleteEngine.java
│ │ │ │ │ ├── TableEngine.java
│ │ │ │ │ ├── TableInsertEngine.java
│ │ │ │ │ ├── TableQueryEngine.java
│ │ │ │ │ ├── TableRouteEngine.java
│ │ │ │ │ └── TableUpdateEngine.java
│ │ │ │ ├── evalengine
│ │ │ │ ├── Arithmetic.java
│ │ │ │ ├── Comparisons.java
│ │ │ │ ├── EvalEngine.java
│ │ │ │ ├── EvalResult.java
│ │ │ │ ├── Logical.java
│ │ │ │ ├── Simplify.java
│ │ │ │ └── TranslationLookup.java
│ │ │ │ ├── exception
│ │ │ │ └── SQLExceptionTranslator.java
│ │ │ │ ├── key
│ │ │ │ ├── BinaryHashUtil.java
│ │ │ │ ├── Bytes.java
│ │ │ │ ├── CurrentShard.java
│ │ │ │ ├── Destination.java
│ │ │ │ ├── DestinationAllShard.java
│ │ │ │ ├── DestinationAnyShard.java
│ │ │ │ ├── DestinationKeyspaceID.java
│ │ │ │ ├── DestinationNone.java
│ │ │ │ ├── DestinationResolve.java
│ │ │ │ ├── DestinationShard.java
│ │ │ │ ├── Key.java
│ │ │ │ ├── Shard.java
│ │ │ │ ├── ShardEnum.java
│ │ │ │ ├── StandardShard.java
│ │ │ │ ├── Strings.java
│ │ │ │ └── Uint64key.java
│ │ │ │ ├── monitor
│ │ │ │ ├── ConnectionCollector.java
│ │ │ │ ├── DefaultConfig.java
│ │ │ │ ├── HealthCheckCollector.java
│ │ │ │ ├── HealthyCollector.java
│ │ │ │ ├── MonitorServer.java
│ │ │ │ ├── PlanCollector.java
│ │ │ │ ├── PortCollector.java
│ │ │ │ ├── QueryServiceCollector.java
│ │ │ │ ├── SplitTableUtilCollector.java
│ │ │ │ ├── SqlErrorCollector.java
│ │ │ │ ├── SqlErrorRecorder.java
│ │ │ │ ├── SrvKeyspaceCollector.java
│ │ │ │ ├── StatementCollector.java
│ │ │ │ ├── ThreadPoolCollector.java
│ │ │ │ ├── TopoServerCollector.java
│ │ │ │ ├── TopologyCollector.java
│ │ │ │ ├── VersionCollector.java
│ │ │ │ └── discovery
│ │ │ │ │ ├── HeartBeatReport.java
│ │ │ │ │ └── ResultDTO.java
│ │ │ │ ├── planbuilder
│ │ │ │ ├── AbstractRoutePlan.java
│ │ │ │ ├── Builder.java
│ │ │ │ ├── BuilderImpl.java
│ │ │ │ ├── Column.java
│ │ │ │ ├── ConcatenatePlan.java
│ │ │ │ ├── DMLPlan.java
│ │ │ │ ├── DeletePlan.java
│ │ │ │ ├── InsertPlan.java
│ │ │ │ ├── JoinPlan.java
│ │ │ │ ├── Jointab.java
│ │ │ │ ├── LimitPlan.java
│ │ │ │ ├── MemorySortPlan.java
│ │ │ │ ├── MergeSortPlan.java
│ │ │ │ ├── MultiQueryPlan.java
│ │ │ │ ├── OrderedAggregatePlan.java
│ │ │ │ ├── PlanBuilder.java
│ │ │ │ ├── PrimitiveBuilder.java
│ │ │ │ ├── PulloutSubqueryPlan.java
│ │ │ │ ├── ResultColumn.java
│ │ │ │ ├── ResultsBuilder.java
│ │ │ │ ├── RoutePlan.java
│ │ │ │ ├── SetPlan.java
│ │ │ │ ├── SubqueryPlan.java
│ │ │ │ ├── Symtab.java
│ │ │ │ ├── Truncater.java
│ │ │ │ ├── UpdatePlan.java
│ │ │ │ ├── gen4
│ │ │ │ │ ├── AggregationPushing.java
│ │ │ │ │ ├── Gen4Planner.java
│ │ │ │ │ ├── HorizonPlanning.java
│ │ │ │ │ ├── InnerJoin.java
│ │ │ │ │ ├── IntroducesTable.java
│ │ │ │ │ ├── Offsets.java
│ │ │ │ │ ├── PlanVisitor.java
│ │ │ │ │ ├── PostProcess.java
│ │ │ │ │ ├── ProjectionPushing.java
│ │ │ │ │ ├── QueryProjection.java
│ │ │ │ │ ├── QueryTable.java
│ │ │ │ │ ├── Rewriter.java
│ │ │ │ │ ├── SingleShardedShortcut.java
│ │ │ │ │ ├── SortedIterator.java
│ │ │ │ │ ├── TableName.java
│ │ │ │ │ ├── logical
│ │ │ │ │ │ ├── AbstractGen4Plan.java
│ │ │ │ │ │ ├── ConcatenateGen4Plan.java
│ │ │ │ │ │ ├── DistinctGen4Plan.java
│ │ │ │ │ │ ├── FilterGen4Plan.java
│ │ │ │ │ │ ├── HashJoinPlan.java
│ │ │ │ │ │ ├── JoinGen4Plan.java
│ │ │ │ │ │ ├── LimitGen4Plan.java
│ │ │ │ │ │ ├── LogicalPlan.java
│ │ │ │ │ │ ├── LogicalPlanCommon.java
│ │ │ │ │ │ ├── MemorySortGen4Plan.java
│ │ │ │ │ │ ├── OrderedAggregateGen4Plan.java
│ │ │ │ │ │ ├── ProjectionGen4Plan.java
│ │ │ │ │ │ ├── ResultsBuilder.java
│ │ │ │ │ │ ├── RouteGen4Plan.java
│ │ │ │ │ │ └── SimpleProjectionGen4Plan.java
│ │ │ │ │ └── operator
│ │ │ │ │ │ ├── Operator.java
│ │ │ │ │ │ ├── OperatorFuncs.java
│ │ │ │ │ │ ├── OperatorToQuery.java
│ │ │ │ │ │ ├── OperatorTransformers.java
│ │ │ │ │ │ ├── OperatorUtil.java
│ │ │ │ │ │ ├── logical
│ │ │ │ │ │ ├── Concatenate.java
│ │ │ │ │ │ ├── Derived.java
│ │ │ │ │ │ ├── Filter.java
│ │ │ │ │ │ ├── Join.java
│ │ │ │ │ │ ├── LogicalOperator.java
│ │ │ │ │ │ ├── QueryGraph.java
│ │ │ │ │ │ ├── SubQuery.java
│ │ │ │ │ │ └── Update.java
│ │ │ │ │ │ └── physical
│ │ │ │ │ │ ├── ApplyJoin.java
│ │ │ │ │ │ ├── Cost.java
│ │ │ │ │ │ ├── Filter.java
│ │ │ │ │ │ ├── OpCache.java
│ │ │ │ │ │ ├── PhysicalOperator.java
│ │ │ │ │ │ ├── Route.java
│ │ │ │ │ │ ├── RoutePlanning.java
│ │ │ │ │ │ ├── Table.java
│ │ │ │ │ │ ├── TableSetPair.java
│ │ │ │ │ │ ├── Union.java
│ │ │ │ │ │ ├── VindexOption.java
│ │ │ │ │ │ └── VindexPlusPredicates.java
│ │ │ │ ├── semantics
│ │ │ │ │ ├── Analyzer.java
│ │ │ │ │ ├── Binder.java
│ │ │ │ │ ├── Certain.java
│ │ │ │ │ ├── ColumnInfo.java
│ │ │ │ │ ├── ColumnName.java
│ │ │ │ │ ├── Dependencies.java
│ │ │ │ │ ├── Dependency.java
│ │ │ │ │ ├── DerivedTable.java
│ │ │ │ │ ├── EarlyRewriter.java
│ │ │ │ │ ├── Exception.java
│ │ │ │ │ ├── ExprDependencies.java
│ │ │ │ │ ├── LargeTableSet.java
│ │ │ │ │ ├── Nothing.java
│ │ │ │ │ ├── Originable.java
│ │ │ │ │ ├── RealTable.java
│ │ │ │ │ ├── SQLObjectExpr.java
│ │ │ │ │ ├── SchemaInformation.java
│ │ │ │ │ ├── Scope.java
│ │ │ │ │ ├── Scoper.java
│ │ │ │ │ ├── SemTable.java
│ │ │ │ │ ├── TableCollector.java
│ │ │ │ │ ├── TableInfo.java
│ │ │ │ │ ├── TableSet.java
│ │ │ │ │ ├── Type.java
│ │ │ │ │ ├── Typer.java
│ │ │ │ │ ├── Uncertain.java
│ │ │ │ │ ├── VSchema.java
│ │ │ │ │ ├── VTableInfo.java
│ │ │ │ │ ├── VindexTable.java
│ │ │ │ │ └── Vtable.java
│ │ │ │ └── tableplan
│ │ │ │ │ ├── TableDMLPlan.java
│ │ │ │ │ └── TableRoutePlan.java
│ │ │ │ ├── pool
│ │ │ │ ├── ExecuteResult.java
│ │ │ │ ├── HikariUtil.java
│ │ │ │ ├── InnerConnection.java
│ │ │ │ ├── InnerConnectionConstant.java
│ │ │ │ ├── Numbered.java
│ │ │ │ ├── StatefulConnection.java
│ │ │ │ └── StatefulConnectionPool.java
│ │ │ │ ├── queryservice
│ │ │ │ ├── AbstractQueryService.java
│ │ │ │ ├── AbstractTabletQueryService.java
│ │ │ │ ├── AsyncQueryService.java
│ │ │ │ ├── BlockingQueryService.java
│ │ │ │ ├── CombinedQueryService.java
│ │ │ │ ├── IHealthCheckQueryService.java
│ │ │ │ ├── IInner.java
│ │ │ │ ├── IParentQueryService.java
│ │ │ │ ├── IQueryService.java
│ │ │ │ ├── NativeQueryService.java
│ │ │ │ ├── QueryService.java
│ │ │ │ ├── RetryTabletQueryService.java
│ │ │ │ ├── RoleType.java
│ │ │ │ ├── ShardQueryService.java
│ │ │ │ ├── StreamIterator.java
│ │ │ │ ├── TabletDialer.java
│ │ │ │ ├── TabletQueryService.java
│ │ │ │ ├── VtIterator.java
│ │ │ │ └── util
│ │ │ │ │ ├── RoleUtils.java
│ │ │ │ │ └── VtResultSetUtils.java
│ │ │ │ ├── session
│ │ │ │ ├── CommitOrder.java
│ │ │ │ ├── SafeSession.java
│ │ │ │ ├── ShardSession.java
│ │ │ │ ├── TransactionMode.java
│ │ │ │ └── VitessSession.java
│ │ │ │ ├── spring
│ │ │ │ └── VitessDataSourceInitializingBean.java
│ │ │ │ ├── sqlparser
│ │ │ │ ├── ASTUtils.java
│ │ │ │ ├── Comment.java
│ │ │ │ ├── SQLUtils.java
│ │ │ │ ├── SqlParser.java
│ │ │ │ ├── ast
│ │ │ │ │ ├── SQLArgument.java
│ │ │ │ │ ├── SQLArrayDataType.java
│ │ │ │ │ ├── SQLCommentHint.java
│ │ │ │ │ ├── SQLDataType.java
│ │ │ │ │ ├── SQLDataTypeImpl.java
│ │ │ │ │ ├── SQLDeclareItem.java
│ │ │ │ │ ├── SQLExpr.java
│ │ │ │ │ ├── SQLExprImpl.java
│ │ │ │ │ ├── SQLHint.java
│ │ │ │ │ ├── SQLKeep.java
│ │ │ │ │ ├── SQLLimit.java
│ │ │ │ │ ├── SQLMapDataType.java
│ │ │ │ │ ├── SQLName.java
│ │ │ │ │ ├── SQLObject.java
│ │ │ │ │ ├── SQLObjectImpl.java
│ │ │ │ │ ├── SQLObjectWithDataType.java
│ │ │ │ │ ├── SQLOrderBy.java
│ │ │ │ │ ├── SQLOrderingSpecification.java
│ │ │ │ │ ├── SQLOver.java
│ │ │ │ │ ├── SQLParameter.java
│ │ │ │ │ ├── SQLPartition.java
│ │ │ │ │ ├── SQLPartitionBy.java
│ │ │ │ │ ├── SQLPartitionByHash.java
│ │ │ │ │ ├── SQLPartitionByList.java
│ │ │ │ │ ├── SQLPartitionByRange.java
│ │ │ │ │ ├── SQLPartitionValue.java
│ │ │ │ │ ├── SQLRecordDataType.java
│ │ │ │ │ ├── SQLReplaceable.java
│ │ │ │ │ ├── SQLSetQuantifier.java
│ │ │ │ │ ├── SQLStatement.java
│ │ │ │ │ ├── SQLStatementImpl.java
│ │ │ │ │ ├── SQLStructDataType.java
│ │ │ │ │ ├── SQLSubPartition.java
│ │ │ │ │ ├── SQLSubPartitionBy.java
│ │ │ │ │ ├── SQLSubPartitionByHash.java
│ │ │ │ │ ├── SQLSubPartitionByList.java
│ │ │ │ │ ├── SQLSubPartitionByRange.java
│ │ │ │ │ ├── SQLWindow.java
│ │ │ │ │ ├── expr
│ │ │ │ │ │ ├── SQLAggregateExpr.java
│ │ │ │ │ │ ├── SQLAggregateOption.java
│ │ │ │ │ │ ├── SQLAllColumnExpr.java
│ │ │ │ │ │ ├── SQLAllExpr.java
│ │ │ │ │ │ ├── SQLAnyExpr.java
│ │ │ │ │ │ ├── SQLArrayExpr.java
│ │ │ │ │ │ ├── SQLBetweenExpr.java
│ │ │ │ │ │ ├── SQLBinaryExpr.java
│ │ │ │ │ │ ├── SQLBinaryOpExpr.java
│ │ │ │ │ │ ├── SQLBinaryOpExprGroup.java
│ │ │ │ │ │ ├── SQLBinaryOperator.java
│ │ │ │ │ │ ├── SQLBooleanExpr.java
│ │ │ │ │ │ ├── SQLCaseExpr.java
│ │ │ │ │ │ ├── SQLCaseStatement.java
│ │ │ │ │ │ ├── SQLCastExpr.java
│ │ │ │ │ │ ├── SQLCharExpr.java
│ │ │ │ │ │ ├── SQLContainsExpr.java
│ │ │ │ │ │ ├── SQLCurrentOfCursorExpr.java
│ │ │ │ │ │ ├── SQLDateExpr.java
│ │ │ │ │ │ ├── SQLDefaultExpr.java
│ │ │ │ │ │ ├── SQLExistsExpr.java
│ │ │ │ │ │ ├── SQLExprUtils.java
│ │ │ │ │ │ ├── SQLFlashbackExpr.java
│ │ │ │ │ │ ├── SQLGroupingSetExpr.java
│ │ │ │ │ │ ├── SQLHexExpr.java
│ │ │ │ │ │ ├── SQLIdentifierExpr.java
│ │ │ │ │ │ ├── SQLInListExpr.java
│ │ │ │ │ │ ├── SQLInSubQueryExpr.java
│ │ │ │ │ │ ├── SQLIntegerExpr.java
│ │ │ │ │ │ ├── SQLIntervalExpr.java
│ │ │ │ │ │ ├── SQLIntervalUnit.java
│ │ │ │ │ │ ├── SQLListExpr.java
│ │ │ │ │ │ ├── SQLLiteralExpr.java
│ │ │ │ │ │ ├── SQLMethodInvokeExpr.java
│ │ │ │ │ │ ├── SQLNCharExpr.java
│ │ │ │ │ │ ├── SQLNotExpr.java
│ │ │ │ │ │ ├── SQLNullExpr.java
│ │ │ │ │ │ ├── SQLNumberExpr.java
│ │ │ │ │ │ ├── SQLNumericLiteralExpr.java
│ │ │ │ │ │ ├── SQLPropertyExpr.java
│ │ │ │ │ │ ├── SQLQueryExpr.java
│ │ │ │ │ │ ├── SQLRealExpr.java
│ │ │ │ │ │ ├── SQLSequenceExpr.java
│ │ │ │ │ │ ├── SQLSomeExpr.java
│ │ │ │ │ │ ├── SQLTextLiteralExpr.java
│ │ │ │ │ │ ├── SQLTimestampExpr.java
│ │ │ │ │ │ ├── SQLUnaryExpr.java
│ │ │ │ │ │ ├── SQLUnaryOperator.java
│ │ │ │ │ │ ├── SQLValuableExpr.java
│ │ │ │ │ │ ├── SQLValuesExpr.java
│ │ │ │ │ │ ├── SQLVariantRefExpr.java
│ │ │ │ │ │ ├── SQLVariantRefListExpr.java
│ │ │ │ │ │ ├── VtArgument.java
│ │ │ │ │ │ ├── VtListArgument.java
│ │ │ │ │ │ └── VtOffset.java
│ │ │ │ │ └── statement
│ │ │ │ │ │ ├── SQLAlterCharacter.java
│ │ │ │ │ │ ├── SQLAlterDatabaseStatement.java
│ │ │ │ │ │ ├── SQLAlterFunctionStatement.java
│ │ │ │ │ │ ├── SQLAlterProcedureStatement.java
│ │ │ │ │ │ ├── SQLAlterSequenceStatement.java
│ │ │ │ │ │ ├── SQLAlterStatement.java
│ │ │ │ │ │ ├── SQLAlterTableAddColumn.java
│ │ │ │ │ │ ├── SQLAlterTableAddConstraint.java
│ │ │ │ │ │ ├── SQLAlterTableAddIndex.java
│ │ │ │ │ │ ├── SQLAlterTableAddPartition.java
│ │ │ │ │ │ ├── SQLAlterTableAlterColumn.java
│ │ │ │ │ │ ├── SQLAlterTableAnalyzePartition.java
│ │ │ │ │ │ ├── SQLAlterTableCheckPartition.java
│ │ │ │ │ │ ├── SQLAlterTableCoalescePartition.java
│ │ │ │ │ │ ├── SQLAlterTableConvertCharSet.java
│ │ │ │ │ │ ├── SQLAlterTableDisableConstraint.java
│ │ │ │ │ │ ├── SQLAlterTableDisableKeys.java
│ │ │ │ │ │ ├── SQLAlterTableDisableLifecycle.java
│ │ │ │ │ │ ├── SQLAlterTableDiscardPartition.java
│ │ │ │ │ │ ├── SQLAlterTableDropColumnItem.java
│ │ │ │ │ │ ├── SQLAlterTableDropConstraint.java
│ │ │ │ │ │ ├── SQLAlterTableDropForeignKey.java
│ │ │ │ │ │ ├── SQLAlterTableDropIndex.java
│ │ │ │ │ │ ├── SQLAlterTableDropKey.java
│ │ │ │ │ │ ├── SQLAlterTableDropPartition.java
│ │ │ │ │ │ ├── SQLAlterTableDropPrimaryKey.java
│ │ │ │ │ │ ├── SQLAlterTableEnableConstraint.java
│ │ │ │ │ │ ├── SQLAlterTableEnableKeys.java
│ │ │ │ │ │ ├── SQLAlterTableEnableLifecycle.java
│ │ │ │ │ │ ├── SQLAlterTableExchangePartition.java
│ │ │ │ │ │ ├── SQLAlterTableImportPartition.java
│ │ │ │ │ │ ├── SQLAlterTableItem.java
│ │ │ │ │ │ ├── SQLAlterTableOptimizePartition.java
│ │ │ │ │ │ ├── SQLAlterTableReOrganizePartition.java
│ │ │ │ │ │ ├── SQLAlterTableRebuildPartition.java
│ │ │ │ │ │ ├── SQLAlterTableRename.java
│ │ │ │ │ │ ├── SQLAlterTableRenameColumn.java
│ │ │ │ │ │ ├── SQLAlterTableRenameIndex.java
│ │ │ │ │ │ ├── SQLAlterTableRenamePartition.java
│ │ │ │ │ │ ├── SQLAlterTableRepairPartition.java
│ │ │ │ │ │ ├── SQLAlterTableSetComment.java
│ │ │ │ │ │ ├── SQLAlterTableSetLifecycle.java
│ │ │ │ │ │ ├── SQLAlterTableStatement.java
│ │ │ │ │ │ ├── SQLAlterTableTouch.java
│ │ │ │ │ │ ├── SQLAlterTableTruncatePartition.java
│ │ │ │ │ │ ├── SQLAlterTypeStatement.java
│ │ │ │ │ │ ├── SQLAlterViewRenameStatement.java
│ │ │ │ │ │ ├── SQLAlterViewStatement.java
│ │ │ │ │ │ ├── SQLAssignItem.java
│ │ │ │ │ │ ├── SQLBlockStatement.java
│ │ │ │ │ │ ├── SQLCallStatement.java
│ │ │ │ │ │ ├── SQLCharacterDataType.java
│ │ │ │ │ │ ├── SQLCheck.java
│ │ │ │ │ │ ├── SQLCloseStatement.java
│ │ │ │ │ │ ├── SQLColumnCheck.java
│ │ │ │ │ │ ├── SQLColumnConstraint.java
│ │ │ │ │ │ ├── SQLColumnDefinition.java
│ │ │ │ │ │ ├── SQLColumnPrimaryKey.java
│ │ │ │ │ │ ├── SQLColumnReference.java
│ │ │ │ │ │ ├── SQLColumnUniqueKey.java
│ │ │ │ │ │ ├── SQLCommentStatement.java
│ │ │ │ │ │ ├── SQLCommitStatement.java
│ │ │ │ │ │ ├── SQLConstraint.java
│ │ │ │ │ │ ├── SQLConstraintImpl.java
│ │ │ │ │ │ ├── SQLCreateDatabaseStatement.java
│ │ │ │ │ │ ├── SQLCreateFunctionStatement.java
│ │ │ │ │ │ ├── SQLCreateIndexStatement.java
│ │ │ │ │ │ ├── SQLCreateMaterializedViewStatement.java
│ │ │ │ │ │ ├── SQLCreateProcedureStatement.java
│ │ │ │ │ │ ├── SQLCreateSequenceStatement.java
│ │ │ │ │ │ ├── SQLCreateStatement.java
│ │ │ │ │ │ ├── SQLCreateTableStatement.java
│ │ │ │ │ │ ├── SQLCreateTriggerStatement.java
│ │ │ │ │ │ ├── SQLCreateUserStatement.java
│ │ │ │ │ │ ├── SQLCreateViewStatement.java
│ │ │ │ │ │ ├── SQLDDLStatement.java
│ │ │ │ │ │ ├── SQLDeclareStatement.java
│ │ │ │ │ │ ├── SQLDeleteStatement.java
│ │ │ │ │ │ ├── SQLDescribeStatement.java
│ │ │ │ │ │ ├── SQLDropDatabaseStatement.java
│ │ │ │ │ │ ├── SQLDropEventStatement.java
│ │ │ │ │ │ ├── SQLDropFunctionStatement.java
│ │ │ │ │ │ ├── SQLDropIndexStatement.java
│ │ │ │ │ │ ├── SQLDropLogFileGroupStatement.java
│ │ │ │ │ │ ├── SQLDropMaterializedViewStatement.java
│ │ │ │ │ │ ├── SQLDropProcedureStatement.java
│ │ │ │ │ │ ├── SQLDropSequenceStatement.java
│ │ │ │ │ │ ├── SQLDropServerStatement.java
│ │ │ │ │ │ ├── SQLDropStatement.java
│ │ │ │ │ │ ├── SQLDropSynonymStatement.java
│ │ │ │ │ │ ├── SQLDropTableSpaceStatement.java
│ │ │ │ │ │ ├── SQLDropTableStatement.java
│ │ │ │ │ │ ├── SQLDropTriggerStatement.java
│ │ │ │ │ │ ├── SQLDropTypeStatement.java
│ │ │ │ │ │ ├── SQLDropUserStatement.java
│ │ │ │ │ │ ├── SQLDropViewStatement.java
│ │ │ │ │ │ ├── SQLDumpStatement.java
│ │ │ │ │ │ ├── SQLErrorLoggingClause.java
│ │ │ │ │ │ ├── SQLExplainStatement.java
│ │ │ │ │ │ ├── SQLExprHint.java
│ │ │ │ │ │ ├── SQLExprStatement.java
│ │ │ │ │ │ ├── SQLExprTableSource.java
│ │ │ │ │ │ ├── SQLExternalRecordFormat.java
│ │ │ │ │ │ ├── SQLFetchStatement.java
│ │ │ │ │ │ ├── SQLForeignKeyConstraint.java
│ │ │ │ │ │ ├── SQLForeignKeyImpl.java
│ │ │ │ │ │ ├── SQLGrantStatement.java
│ │ │ │ │ │ ├── SQLIfStatement.java
│ │ │ │ │ │ ├── SQLInsertInto.java
│ │ │ │ │ │ ├── SQLInsertStatement.java
│ │ │ │ │ │ ├── SQLJoinTableSource.java
│ │ │ │ │ │ ├── SQLLateralViewTableSource.java
│ │ │ │ │ │ ├── SQLLoopStatement.java
│ │ │ │ │ │ ├── SQLMergeStatement.java
│ │ │ │ │ │ ├── SQLNotNullConstraint.java
│ │ │ │ │ │ ├── SQLNullConstraint.java
│ │ │ │ │ │ ├── SQLObjectType.java
│ │ │ │ │ │ ├── SQLOpenStatement.java
│ │ │ │ │ │ ├── SQLPrimaryKey.java
│ │ │ │ │ │ ├── SQLPrimaryKeyImpl.java
│ │ │ │ │ │ ├── SQLReleaseSavePointStatement.java
│ │ │ │ │ │ ├── SQLReplaceStatement.java
│ │ │ │ │ │ ├── SQLReturnStatement.java
│ │ │ │ │ │ ├── SQLRevokeStatement.java
│ │ │ │ │ │ ├── SQLRollbackStatement.java
│ │ │ │ │ │ ├── SQLSavePointStatement.java
│ │ │ │ │ │ ├── SQLScriptCommitStatement.java
│ │ │ │ │ │ ├── SQLSelect.java
│ │ │ │ │ │ ├── SQLSelectGroupByClause.java
│ │ │ │ │ │ ├── SQLSelectItem.java
│ │ │ │ │ │ ├── SQLSelectOrderByItem.java
│ │ │ │ │ │ ├── SQLSelectQuery.java
│ │ │ │ │ │ ├── SQLSelectQueryBlock.java
│ │ │ │ │ │ ├── SQLSelectStatement.java
│ │ │ │ │ │ ├── SQLSetStatement.java
│ │ │ │ │ │ ├── SQLShowErrorsStatement.java
│ │ │ │ │ │ ├── SQLShowTablesStatement.java
│ │ │ │ │ │ ├── SQLStartTransactionStatement.java
│ │ │ │ │ │ ├── SQLSubqueryTableSource.java
│ │ │ │ │ │ ├── SQLTableConstraint.java
│ │ │ │ │ │ ├── SQLTableElement.java
│ │ │ │ │ │ ├── SQLTableSource.java
│ │ │ │ │ │ ├── SQLTableSourceImpl.java
│ │ │ │ │ │ ├── SQLTruncateStatement.java
│ │ │ │ │ │ ├── SQLUnionOperator.java
│ │ │ │ │ │ ├── SQLUnionQuery.java
│ │ │ │ │ │ ├── SQLUnionQueryTableSource.java
│ │ │ │ │ │ ├── SQLUnique.java
│ │ │ │ │ │ ├── SQLUniqueConstraint.java
│ │ │ │ │ │ ├── SQLUpdateSetItem.java
│ │ │ │ │ │ ├── SQLUpdateStatement.java
│ │ │ │ │ │ ├── SQLUseStatement.java
│ │ │ │ │ │ ├── SQLValuesTableSource.java
│ │ │ │ │ │ ├── SQLWhileStatement.java
│ │ │ │ │ │ └── SQLWithSubqueryClause.java
│ │ │ │ ├── dialect
│ │ │ │ │ └── mysql
│ │ │ │ │ │ ├── BindVarNeeds.java
│ │ │ │ │ │ ├── Normalizer.java
│ │ │ │ │ │ ├── SmartNormalizer.java
│ │ │ │ │ │ ├── ast
│ │ │ │ │ │ ├── MySqlForceIndexHint.java
│ │ │ │ │ │ ├── MySqlHint.java
│ │ │ │ │ │ ├── MySqlIgnoreIndexHint.java
│ │ │ │ │ │ ├── MySqlIndexHint.java
│ │ │ │ │ │ ├── MySqlIndexHintImpl.java
│ │ │ │ │ │ ├── MySqlKey.java
│ │ │ │ │ │ ├── MySqlObject.java
│ │ │ │ │ │ ├── MySqlObjectImpl.java
│ │ │ │ │ │ ├── MySqlPrimaryKey.java
│ │ │ │ │ │ ├── MySqlUnique.java
│ │ │ │ │ │ ├── MySqlUseIndexHint.java
│ │ │ │ │ │ ├── MysqlForeignKey.java
│ │ │ │ │ │ ├── clause
│ │ │ │ │ │ │ ├── ConditionValue.java
│ │ │ │ │ │ │ ├── MySqlCaseStatement.java
│ │ │ │ │ │ │ ├── MySqlCursorDeclareStatement.java
│ │ │ │ │ │ │ ├── MySqlDeclareConditionStatement.java
│ │ │ │ │ │ │ ├── MySqlDeclareHandlerStatement.java
│ │ │ │ │ │ │ ├── MySqlDeclareStatement.java
│ │ │ │ │ │ │ ├── MySqlExplainType.java
│ │ │ │ │ │ │ ├── MySqlFormatName.java
│ │ │ │ │ │ │ ├── MySqlHandlerType.java
│ │ │ │ │ │ │ ├── MySqlIterateStatement.java
│ │ │ │ │ │ │ ├── MySqlLeaveStatement.java
│ │ │ │ │ │ │ ├── MySqlRepeatStatement.java
│ │ │ │ │ │ │ ├── MySqlSelectIntoStatement.java
│ │ │ │ │ │ │ └── MySqlStatementType.java
│ │ │ │ │ │ ├── expr
│ │ │ │ │ │ │ ├── MySqlCharExpr.java
│ │ │ │ │ │ │ ├── MySqlExpr.java
│ │ │ │ │ │ │ ├── MySqlExprImpl.java
│ │ │ │ │ │ │ ├── MySqlExtractExpr.java
│ │ │ │ │ │ │ ├── MySqlMatchAgainstExpr.java
│ │ │ │ │ │ │ ├── MySqlOrderingExpr.java
│ │ │ │ │ │ │ ├── MySqlOutFileExpr.java
│ │ │ │ │ │ │ └── MySqlUserName.java
│ │ │ │ │ │ └── statement
│ │ │ │ │ │ │ ├── CobarShowStatus.java
│ │ │ │ │ │ │ ├── MySqlAlterEventStatement.java
│ │ │ │ │ │ │ ├── MySqlAlterLogFileGroupStatement.java
│ │ │ │ │ │ │ ├── MySqlAlterServerStatement.java
│ │ │ │ │ │ │ ├── MySqlAlterTableAlterColumn.java
│ │ │ │ │ │ │ ├── MySqlAlterTableChangeColumn.java
│ │ │ │ │ │ │ ├── MySqlAlterTableDiscardTablespace.java
│ │ │ │ │ │ │ ├── MySqlAlterTableImportTablespace.java
│ │ │ │ │ │ │ ├── MySqlAlterTableModifyColumn.java
│ │ │ │ │ │ │ ├── MySqlAlterTableOption.java
│ │ │ │ │ │ │ ├── MySqlAlterTablespaceStatement.java
│ │ │ │ │ │ │ ├── MySqlAlterUserStatement.java
│ │ │ │ │ │ │ ├── MySqlAnalyzeStatement.java
│ │ │ │ │ │ │ ├── MySqlBinlogStatement.java
│ │ │ │ │ │ │ ├── MySqlChecksumTableStatement.java
│ │ │ │ │ │ │ ├── MySqlCreateAddLogFileGroupStatement.java
│ │ │ │ │ │ │ ├── MySqlCreateEventStatement.java
│ │ │ │ │ │ │ ├── MySqlCreateServerStatement.java
│ │ │ │ │ │ │ ├── MySqlCreateTableSpaceStatement.java
│ │ │ │ │ │ │ ├── MySqlCreateTableStatement.java
│ │ │ │ │ │ │ ├── MySqlCreateUserStatement.java
│ │ │ │ │ │ │ ├── MySqlDeleteStatement.java
│ │ │ │ │ │ │ ├── MySqlEventSchedule.java
│ │ │ │ │ │ │ ├── MySqlExecuteStatement.java
│ │ │ │ │ │ │ ├── MySqlExplainStatement.java
│ │ │ │ │ │ │ ├── MySqlFlushStatement.java
│ │ │ │ │ │ │ ├── MySqlHelpStatement.java
│ │ │ │ │ │ │ ├── MySqlHintStatement.java
│ │ │ │ │ │ │ ├── MySqlInsertReplaceStatement.java
│ │ │ │ │ │ │ ├── MySqlInsertStatement.java
│ │ │ │ │ │ │ ├── MySqlKillStatement.java
│ │ │ │ │ │ │ ├── MySqlLoadDataInFileStatement.java
│ │ │ │ │ │ │ ├── MySqlLoadXmlStatement.java
│ │ │ │ │ │ │ ├── MySqlLockTableStatement.java
│ │ │ │ │ │ │ ├── MySqlOptimizeStatement.java
│ │ │ │ │ │ │ ├── MySqlPartitionByKey.java
│ │ │ │ │ │ │ ├── MySqlPrepareStatement.java
│ │ │ │ │ │ │ ├── MySqlRenameTableStatement.java
│ │ │ │ │ │ │ ├── MySqlResetStatement.java
│ │ │ │ │ │ │ ├── MySqlSelectQueryBlock.java
│ │ │ │ │ │ │ ├── MySqlSetTransactionStatement.java
│ │ │ │ │ │ │ ├── MySqlShowAuthorsStatement.java
│ │ │ │ │ │ │ ├── MySqlShowBinLogEventsStatement.java
│ │ │ │ │ │ │ ├── MySqlShowBinaryLogsStatement.java
│ │ │ │ │ │ │ ├── MySqlShowCharacterSetStatement.java
│ │ │ │ │ │ │ ├── MySqlShowCollationStatement.java
│ │ │ │ │ │ │ ├── MySqlShowColumnsStatement.java
│ │ │ │ │ │ │ ├── MySqlShowContributorsStatement.java
│ │ │ │ │ │ │ ├── MySqlShowCreateDatabaseStatement.java
│ │ │ │ │ │ │ ├── MySqlShowCreateEventStatement.java
│ │ │ │ │ │ │ ├── MySqlShowCreateFunctionStatement.java
│ │ │ │ │ │ │ ├── MySqlShowCreateProcedureStatement.java
│ │ │ │ │ │ │ ├── MySqlShowCreateTableStatement.java
│ │ │ │ │ │ │ ├── MySqlShowCreateTriggerStatement.java
│ │ │ │ │ │ │ ├── MySqlShowCreateViewStatement.java
│ │ │ │ │ │ │ ├── MySqlShowDatabasePartitionStatusStatement.java
│ │ │ │ │ │ │ ├── MySqlShowDatabasesStatement.java
│ │ │ │ │ │ │ ├── MySqlShowEngineStatement.java
│ │ │ │ │ │ │ ├── MySqlShowEnginesStatement.java
│ │ │ │ │ │ │ ├── MySqlShowErrorsStatement.java
│ │ │ │ │ │ │ ├── MySqlShowEventsStatement.java
│ │ │ │ │ │ │ ├── MySqlShowFunctionCodeStatement.java
│ │ │ │ │ │ │ ├── MySqlShowFunctionStatusStatement.java
│ │ │ │ │ │ │ ├── MySqlShowGrantsStatement.java
│ │ │ │ │ │ │ ├── MySqlShowIndexesStatement.java
│ │ │ │ │ │ │ ├── MySqlShowKeysStatement.java
│ │ │ │ │ │ │ ├── MySqlShowMasterLogsStatement.java
│ │ │ │ │ │ │ ├── MySqlShowMasterStatusStatement.java
│ │ │ │ │ │ │ ├── MySqlShowOpenTablesStatement.java
│ │ │ │ │ │ │ ├── MySqlShowPluginsStatement.java
│ │ │ │ │ │ │ ├── MySqlShowPrivilegesStatement.java
│ │ │ │ │ │ │ ├── MySqlShowProcedureCodeStatement.java
│ │ │ │ │ │ │ ├── MySqlShowProcedureStatusStatement.java
│ │ │ │ │ │ │ ├── MySqlShowProcessListStatement.java
│ │ │ │ │ │ │ ├── MySqlShowProfileStatement.java
│ │ │ │ │ │ │ ├── MySqlShowProfilesStatement.java
│ │ │ │ │ │ │ ├── MySqlShowRelayLogEventsStatement.java
│ │ │ │ │ │ │ ├── MySqlShowSlaveHostsStatement.java
│ │ │ │ │ │ │ ├── MySqlShowSlaveStatusStatement.java
│ │ │ │ │ │ │ ├── MySqlShowStatement.java
│ │ │ │ │ │ │ ├── MySqlShowStatusStatement.java
│ │ │ │ │ │ │ ├── MySqlShowTableStatusStatement.java
│ │ │ │ │ │ │ ├── MySqlShowTriggersStatement.java
│ │ │ │ │ │ │ ├── MySqlShowVariantsStatement.java
│ │ │ │ │ │ │ ├── MySqlShowWarningsStatement.java
│ │ │ │ │ │ │ ├── MySqlStatement.java
│ │ │ │ │ │ │ ├── MySqlStatementImpl.java
│ │ │ │ │ │ │ ├── MySqlSubPartitionByKey.java
│ │ │ │ │ │ │ ├── MySqlSubPartitionByList.java
│ │ │ │ │ │ │ ├── MySqlTableIndex.java
│ │ │ │ │ │ │ ├── MySqlUnlockTablesStatement.java
│ │ │ │ │ │ │ ├── MySqlUpdateStatement.java
│ │ │ │ │ │ │ ├── MySqlUpdateTableSource.java
│ │ │ │ │ │ │ └── MysqlDeallocatePrepareStatement.java
│ │ │ │ │ │ ├── custom
│ │ │ │ │ │ └── VitessSchemaASTVisitorAdapter.java
│ │ │ │ │ │ ├── executor
│ │ │ │ │ │ └── MySqlProcedureExecutor.java
│ │ │ │ │ │ ├── parser
│ │ │ │ │ │ ├── MySqlCreateTableParser.java
│ │ │ │ │ │ ├── MySqlExprParser.java
│ │ │ │ │ │ ├── MySqlLexer.java
│ │ │ │ │ │ ├── MySqlSelectIntoParser.java
│ │ │ │ │ │ ├── MySqlSelectParser.java
│ │ │ │ │ │ └── MySqlStatementParser.java
│ │ │ │ │ │ └── visitor
│ │ │ │ │ │ ├── AddDualVisitor.java
│ │ │ │ │ │ ├── CheckNodeTypesVisitor.java
│ │ │ │ │ │ ├── MySqlASTVisitor.java
│ │ │ │ │ │ ├── MySqlASTVisitorAdapter.java
│ │ │ │ │ │ ├── MySqlEvalVisitorImpl.java
│ │ │ │ │ │ ├── MySqlExportParameterVisitor.java
│ │ │ │ │ │ ├── MySqlOutputVisitor.java
│ │ │ │ │ │ ├── MySqlSchemaStatVisitor.java
│ │ │ │ │ │ ├── MySqlShowColumnOutpuVisitor.java
│ │ │ │ │ │ ├── RewriteHavingAggrWithOffsetVisitor.java
│ │ │ │ │ │ ├── SwitchTableVisitor.java
│ │ │ │ │ │ ├── TableRouteGetEngineVisitor.java
│ │ │ │ │ │ ├── VtChangeSchemaVisitor.java
│ │ │ │ │ │ ├── VtFindOriginVisitor.java
│ │ │ │ │ │ ├── VtFormatImpossibleQueryVisitor.java
│ │ │ │ │ │ ├── VtGetBindVarsVisitor.java
│ │ │ │ │ │ ├── VtHasSubqueryVisitor.java
│ │ │ │ │ │ ├── VtJoinPushOrderByVisitor.java
│ │ │ │ │ │ ├── VtNormalizeVisitor.java
│ │ │ │ │ │ ├── VtPutBindVarsVisitor.java
│ │ │ │ │ │ ├── VtRemoveBacktickVisitor.java
│ │ │ │ │ │ ├── VtRemoveDbNameExpectSystemDbVisitor.java
│ │ │ │ │ │ ├── VtRemoveDbNameInColumnVisitor.java
│ │ │ │ │ │ ├── VtRemoveDbNameVisitor.java
│ │ │ │ │ │ ├── VtReplaceExprVisitor.java
│ │ │ │ │ │ ├── VtReplaceVariantRefExprVisitor.java
│ │ │ │ │ │ ├── VtRestoreVisitor.java
│ │ │ │ │ │ ├── VtRewriteTableSchemaVisitor.java
│ │ │ │ │ │ ├── VtRouteWireupFixUpAstVisitor.java
│ │ │ │ │ │ ├── VtRouteWireupVarFormatVisitor.java
│ │ │ │ │ │ ├── VtSmartNormalizeVisitor.java
│ │ │ │ │ │ ├── VtTableRouteWireupFixUpAstVisitor.java
│ │ │ │ │ │ └── VtTableRouteWireupVarFormatVisitor.java
│ │ │ │ ├── parser
│ │ │ │ │ ├── CharTypes.java
│ │ │ │ │ ├── EOFParserException.java
│ │ │ │ │ ├── InsertColumnsCache.java
│ │ │ │ │ ├── Keywords.java
│ │ │ │ │ ├── LayoutCharacters.java
│ │ │ │ │ ├── Lexer.java
│ │ │ │ │ ├── NotAllowCommentException.java
│ │ │ │ │ ├── ParserException.java
│ │ │ │ │ ├── SQLCreateTableParser.java
│ │ │ │ │ ├── SQLDDLParser.java
│ │ │ │ │ ├── SQLExprParser.java
│ │ │ │ │ ├── SQLParseException.java
│ │ │ │ │ ├── SQLParser.java
│ │ │ │ │ ├── SQLParserFeature.java
│ │ │ │ │ ├── SQLParserUtils.java
│ │ │ │ │ ├── SQLSelectListCache.java
│ │ │ │ │ ├── SQLSelectParser.java
│ │ │ │ │ ├── SQLStatementParser.java
│ │ │ │ │ ├── SymbolTable.java
│ │ │ │ │ ├── Token.java
│ │ │ │ │ └── VitessRuntimeException.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── Schema.java
│ │ │ │ │ ├── SchemaObject.java
│ │ │ │ │ ├── SchemaObjectImpl.java
│ │ │ │ │ ├── SchemaObjectType.java
│ │ │ │ │ ├── SchemaRepository.java
│ │ │ │ │ ├── SchemaResolveVisitor.java
│ │ │ │ │ └── SchemaResolveVisitorFactory.java
│ │ │ │ ├── stat
│ │ │ │ │ └── TableStat.java
│ │ │ │ ├── support
│ │ │ │ │ ├── json
│ │ │ │ │ │ ├── JSONParser.java
│ │ │ │ │ │ ├── JSONUtils.java
│ │ │ │ │ │ └── JSONWriter.java
│ │ │ │ │ └── logging
│ │ │ │ │ │ ├── JakartaCommonsLoggingImpl.java
│ │ │ │ │ │ ├── Jdk14LoggingImpl.java
│ │ │ │ │ │ ├── Log.java
│ │ │ │ │ │ ├── Log4j2Impl.java
│ │ │ │ │ │ ├── Log4jImpl.java
│ │ │ │ │ │ ├── LogFactory.java
│ │ │ │ │ │ ├── NoLoggingImpl.java
│ │ │ │ │ │ ├── Resources.java
│ │ │ │ │ │ └── SLF4JImpl.java
│ │ │ │ ├── utils
│ │ │ │ │ ├── Consumer.java
│ │ │ │ │ ├── FnvHash.java
│ │ │ │ │ ├── HexBin.java
│ │ │ │ │ ├── JdbcConstants.java
│ │ │ │ │ ├── JdbcUtils.java
│ │ │ │ │ ├── ListDG.java
│ │ │ │ │ ├── MySqlUtils.java
│ │ │ │ │ ├── ResultSetConsumer.java
│ │ │ │ │ ├── SplitMultiQueryUtils.java
│ │ │ │ │ ├── StringUtils.java
│ │ │ │ │ ├── TableNameUtils.java
│ │ │ │ │ └── Utils.java
│ │ │ │ └── visitor
│ │ │ │ │ ├── AnalyzerVisitor.java
│ │ │ │ │ ├── CheckForInvalidGroupingExpressionsVisitor.java
│ │ │ │ │ ├── CheckUnionVisitor.java
│ │ │ │ │ ├── ExportParameterVisitor.java
│ │ │ │ │ ├── ExportParameterVisitorUtils.java
│ │ │ │ │ ├── ExportParameterizedOutputVisitor.java
│ │ │ │ │ ├── ExprDependenciesVisitor.java
│ │ │ │ │ ├── OrderByGroupByNumberRewriteVisitor.java
│ │ │ │ │ ├── ParameterizedOutputVisitorUtils.java
│ │ │ │ │ ├── ParameterizedVisitor.java
│ │ │ │ │ ├── PrintableVisitor.java
│ │ │ │ │ ├── RewriteHavingVisitor.java
│ │ │ │ │ ├── SQLASTOutputVisitor.java
│ │ │ │ │ ├── SQLASTVisitor.java
│ │ │ │ │ ├── SQLASTVisitorAdapter.java
│ │ │ │ │ ├── SQLEvalVisitor.java
│ │ │ │ │ ├── SQLEvalVisitorImpl.java
│ │ │ │ │ ├── SQLEvalVisitorUtils.java
│ │ │ │ │ ├── SQLTransformVisitor.java
│ │ │ │ │ ├── SchemaStatVisitor.java
│ │ │ │ │ ├── VisitorFeature.java
│ │ │ │ │ ├── VtBreakExpressionInLHSandRHSVisitor.java
│ │ │ │ │ ├── VtVisitor.java
│ │ │ │ │ └── functions
│ │ │ │ │ ├── Ascii.java
│ │ │ │ │ ├── Bin.java
│ │ │ │ │ ├── BitLength.java
│ │ │ │ │ ├── Char.java
│ │ │ │ │ ├── Concat.java
│ │ │ │ │ ├── Elt.java
│ │ │ │ │ ├── Function.java
│ │ │ │ │ ├── Greatest.java
│ │ │ │ │ ├── Hex.java
│ │ │ │ │ ├── If.java
│ │ │ │ │ ├── Insert.java
│ │ │ │ │ ├── Instr.java
│ │ │ │ │ ├── Isnull.java
│ │ │ │ │ ├── Lcase.java
│ │ │ │ │ ├── Least.java
│ │ │ │ │ ├── Left.java
│ │ │ │ │ ├── Length.java
│ │ │ │ │ ├── Locate.java
│ │ │ │ │ ├── Lpad.java
│ │ │ │ │ ├── Ltrim.java
│ │ │ │ │ ├── Nil.java
│ │ │ │ │ ├── Now.java
│ │ │ │ │ ├── OneParamFunctions.java
│ │ │ │ │ ├── Reverse.java
│ │ │ │ │ ├── Right.java
│ │ │ │ │ ├── Substring.java
│ │ │ │ │ ├── Trim.java
│ │ │ │ │ ├── Ucase.java
│ │ │ │ │ └── Unhex.java
│ │ │ │ ├── sqltypes
│ │ │ │ ├── BatchVtResultSet.java
│ │ │ │ ├── BeginBatchVtResultSet.java
│ │ │ │ ├── BeginVtResultSet.java
│ │ │ │ ├── Constants.java
│ │ │ │ ├── SqlTypes.java
│ │ │ │ ├── VtNumberRange.java
│ │ │ │ ├── VtPlanValue.java
│ │ │ │ ├── VtResultSet.java
│ │ │ │ ├── VtResultSetMessage.java
│ │ │ │ ├── VtResultValue.java
│ │ │ │ ├── VtRowList.java
│ │ │ │ ├── VtSqlStatementType.java
│ │ │ │ ├── VtStreamResultSet.java
│ │ │ │ ├── VtType.java
│ │ │ │ └── VtValue.java
│ │ │ │ ├── srvtopo
│ │ │ │ ├── BindVariable.java
│ │ │ │ ├── BoundQuery.java
│ │ │ │ ├── Gateway.java
│ │ │ │ ├── ResilientServer.java
│ │ │ │ ├── ResolvedShard.java
│ │ │ │ ├── Resolver.java
│ │ │ │ ├── ScatterConn.java
│ │ │ │ ├── SrvTopo.java
│ │ │ │ ├── SrvTopoException.java
│ │ │ │ ├── SrvTopoServer.java
│ │ │ │ ├── TabletGateway.java
│ │ │ │ └── TxConn.java
│ │ │ │ ├── tindexes
│ │ │ │ ├── ActualTable.java
│ │ │ │ ├── Column.java
│ │ │ │ ├── LogicTable.java
│ │ │ │ ├── ShardTableByMurmur.java
│ │ │ │ ├── SplitTableUtil.java
│ │ │ │ ├── TableDestinationGroup.java
│ │ │ │ ├── TableIndex.java
│ │ │ │ ├── TableRuleMod.java
│ │ │ │ └── config
│ │ │ │ │ ├── LogicTableConfig.java
│ │ │ │ │ ├── SchemaConfig.java
│ │ │ │ │ └── SplitTableConfig.java
│ │ │ │ ├── topo
│ │ │ │ ├── Resource.java
│ │ │ │ ├── Topo.java
│ │ │ │ ├── TopoCellInfo.java
│ │ │ │ ├── TopoConnection.java
│ │ │ │ ├── TopoException.java
│ │ │ │ ├── TopoExceptionCode.java
│ │ │ │ ├── TopoFactory.java
│ │ │ │ ├── TopoServer.java
│ │ │ │ ├── TopoSrvKeyspace.java
│ │ │ │ ├── TopoStatsConnection.java
│ │ │ │ ├── TopoTablet.java
│ │ │ │ ├── TopoVschema.java
│ │ │ │ ├── etcd2topo
│ │ │ │ │ ├── Etcd2TopoFactory.java
│ │ │ │ │ ├── Etcd2TopoServer.java
│ │ │ │ │ ├── EtcdWatcher.java
│ │ │ │ │ └── SrvKeyspaceListener.java
│ │ │ │ └── topoproto
│ │ │ │ │ └── TopoProto.java
│ │ │ │ ├── util
│ │ │ │ ├── KeyspaceUtil.java
│ │ │ │ ├── NetUtil.java
│ │ │ │ ├── ScheduledManager.java
│ │ │ │ ├── SelectItemUtil.java
│ │ │ │ ├── TimeUtil.java
│ │ │ │ ├── cache
│ │ │ │ │ ├── CacheBase.java
│ │ │ │ │ └── lrucache
│ │ │ │ │ │ └── LRUCache.java
│ │ │ │ ├── consolidator
│ │ │ │ │ ├── Consolidator.java
│ │ │ │ │ ├── ConsolidatorResult.java
│ │ │ │ │ └── Result.java
│ │ │ │ └── threadpool
│ │ │ │ │ ├── AbstractVtExecutorService.java
│ │ │ │ │ ├── InitThreadPoolService.java
│ │ │ │ │ ├── JdkUtil.java
│ │ │ │ │ ├── JvmUtil.java
│ │ │ │ │ ├── VtRejectedExecutionHandler.java
│ │ │ │ │ ├── VtThreadFactoryBuilder.java
│ │ │ │ │ └── impl
│ │ │ │ │ ├── TabletNettyExecutorService.java
│ │ │ │ │ ├── VtHealthCheckExecutorService.java
│ │ │ │ │ └── VtQueryExecutorService.java
│ │ │ │ ├── vindexes
│ │ │ │ ├── LookupPlanable.java
│ │ │ │ ├── MultiColumn.java
│ │ │ │ ├── Reversible.java
│ │ │ │ ├── SingleColumn.java
│ │ │ │ ├── VKeyspace.java
│ │ │ │ ├── Vindex.java
│ │ │ │ ├── VschemaConstant.java
│ │ │ │ ├── cryto
│ │ │ │ │ └── TripleDES.java
│ │ │ │ └── hash
│ │ │ │ │ ├── AbstractHash.java
│ │ │ │ │ ├── Arithmetic.java
│ │ │ │ │ ├── Binary.java
│ │ │ │ │ ├── BinaryHash.java
│ │ │ │ │ ├── Hash.java
│ │ │ │ │ ├── MurmurVtValueIndex.java
│ │ │ │ │ └── VtValueIndex.java
│ │ │ │ └── vitess
│ │ │ │ ├── AbstractVitessConnection.java
│ │ │ │ ├── AbstractVitessPreparedStatement.java
│ │ │ │ ├── AbstractVitessResultSet.java
│ │ │ │ ├── AbstractVitessResultSetMetaData.java
│ │ │ │ ├── AbstractVitessStatement.java
│ │ │ │ ├── Config.java
│ │ │ │ ├── VitessConnection.java
│ │ │ │ ├── VitessDataSource.java
│ │ │ │ ├── VitessDriver.java
│ │ │ │ ├── VitessJdbcProperyUtil.java
│ │ │ │ ├── VitessJdbcUrlParser.java
│ │ │ │ ├── VitessPreparedStatement.java
│ │ │ │ ├── VitessResultSet.java
│ │ │ │ ├── VitessResultSetMetaData.java
│ │ │ │ ├── VitessStatement.java
│ │ │ │ ├── VitessWrapper.java
│ │ │ │ ├── metadata
│ │ │ │ ├── AbstractDatabaseMetaData.java
│ │ │ │ ├── CachedDatabaseMetaData.java
│ │ │ │ └── VitessDatabaseMetaData.java
│ │ │ │ ├── mysql
│ │ │ │ ├── VitessPropertyKey.java
│ │ │ │ └── VitessQueryBindVariable.java
│ │ │ │ └── resultset
│ │ │ │ ├── AbstractDatabaseMetaDataResultSet.java
│ │ │ │ ├── DatabaseMetaDataResultSet.java
│ │ │ │ ├── DateTimeUtil.java
│ │ │ │ ├── MetaDataResultSetUtil.java
│ │ │ │ └── ResultSetUtil.java
│ │ ├── io
│ │ │ └── vitess
│ │ │ │ └── proto
│ │ │ │ ├── Query.java
│ │ │ │ ├── Topodata.java
│ │ │ │ └── Vtrpc.java
│ │ ├── queryservice
│ │ │ ├── QueryGrpc.java
│ │ │ └── Queryservice.java
│ │ ├── vschema
│ │ │ └── Vschema.java
│ │ └── vttime
│ │ │ └── Vttime.java
│ └── resources
│ │ ├── META-INF
│ │ └── services
│ │ │ ├── com.jd.jdbc.tindexes.TableIndex
│ │ │ └── java.sql.Driver
│ │ └── vtdriver-version.properties
└── test
│ ├── java
│ ├── com
│ │ └── jd
│ │ │ ├── BaseTest.java
│ │ │ └── jdbc
│ │ │ ├── api
│ │ │ └── VtApiServerTest.java
│ │ │ ├── cache
│ │ │ └── LRUCacheTest.java
│ │ │ ├── concurrency
│ │ │ └── AllErrorRecorderTest.java
│ │ │ ├── context
│ │ │ └── ContextTest.java
│ │ │ ├── discovery
│ │ │ ├── EtcdTopoServerTest.java
│ │ │ ├── HealthCheckTest.java
│ │ │ ├── MockTablet.java
│ │ │ └── ReadWriteSplitTest.java
│ │ │ ├── engine
│ │ │ ├── ASCIICharEncodingTest.java
│ │ │ ├── CharEncodingTest.java
│ │ │ ├── DeleteEngineTest.java
│ │ │ ├── FakePrimitive.java
│ │ │ ├── InsertEngineTest.java
│ │ │ ├── RouteEngineTest.java
│ │ │ ├── SelectEngineTest.java
│ │ │ ├── SelectTestSuite.java
│ │ │ ├── UpdateEngineTest.java
│ │ │ ├── destination
│ │ │ │ └── DestinationTest.java
│ │ │ ├── gen4
│ │ │ │ ├── ConcatenateGen4EngineTest.java
│ │ │ │ ├── DistinctGen4EngineTest.java
│ │ │ │ ├── FilterGen4EngineTest.java
│ │ │ │ ├── JoinGen4EngineTest.java
│ │ │ │ ├── LimitGen4EngineTest.java
│ │ │ │ ├── MemorySortGen4EngineTest.java
│ │ │ │ ├── OrderedAggregateGen4EngineTest.java
│ │ │ │ ├── RouteGen4EngineTest.java
│ │ │ │ ├── ScalarAggregateGen4EngineTest.java
│ │ │ │ └── VitessCompareTest.java
│ │ │ ├── join
│ │ │ │ ├── JoinTypeTest.java
│ │ │ │ ├── ShardedJoinTest.java
│ │ │ │ └── UnShardedJoinTest.java
│ │ │ ├── subquery
│ │ │ │ ├── ShardedSubqueryTest.java
│ │ │ │ └── UnShardedSubqueryTest.java
│ │ │ ├── union
│ │ │ │ ├── ShardedUnionTest.java
│ │ │ │ └── UnShardedUnionTest.java
│ │ │ ├── util
│ │ │ │ └── TestResult.java
│ │ │ └── vcursor
│ │ │ │ ├── FakeVcursorUtil.java
│ │ │ │ ├── LoggingVCursor.java
│ │ │ │ └── NoopVCursor.java
│ │ │ ├── evalengine
│ │ │ └── ArithmeticTest.java
│ │ │ ├── key
│ │ │ └── BinaryHashUtilTest.java
│ │ │ ├── planbuilder
│ │ │ ├── AbstractPlanTest.java
│ │ │ ├── AdvancedPlanTest.java
│ │ │ ├── Gen4PlanTest.java
│ │ │ ├── PlanCacheTest.java
│ │ │ ├── PlanPerformanceTest.java
│ │ │ ├── PlanTest.java
│ │ │ ├── gen4
│ │ │ │ ├── AnalyzerTest.java
│ │ │ │ ├── HorizonPlanningTest.java
│ │ │ │ ├── OperatorTest.java
│ │ │ │ ├── QueryProjectionTest.java
│ │ │ │ ├── RewriterTest.java
│ │ │ │ └── operator
│ │ │ │ │ └── physical
│ │ │ │ │ └── RoutePlanningTest.java
│ │ │ ├── semantics
│ │ │ │ ├── EarlyRewriterTest.java
│ │ │ │ ├── FakeSI.java
│ │ │ │ └── TableSetTest.java
│ │ │ └── vschema
│ │ │ │ ├── AbstractTable.java
│ │ │ │ ├── Authoritative.java
│ │ │ │ ├── AutoIncrement.java
│ │ │ │ ├── ColumnVindexesItem.java
│ │ │ │ ├── ColumnsItem.java
│ │ │ │ ├── Dual.java
│ │ │ │ ├── Foo.java
│ │ │ │ ├── Hash.java
│ │ │ │ ├── Keyspaces.java
│ │ │ │ ├── M1.java
│ │ │ │ ├── Main.java
│ │ │ │ ├── Multicolvin.java
│ │ │ │ ├── Music.java
│ │ │ │ ├── MusicExtra.java
│ │ │ │ ├── OverlapVindex.java
│ │ │ │ ├── PinTest.java
│ │ │ │ ├── PlanVschema.java
│ │ │ │ ├── Samecolvin.java
│ │ │ │ ├── SecondUser.java
│ │ │ │ ├── Seq.java
│ │ │ │ ├── Tables.java
│ │ │ │ ├── Test.java
│ │ │ │ ├── Unsharded.java
│ │ │ │ ├── UnshardedA.java
│ │ │ │ ├── UnshardedAuthoritative.java
│ │ │ │ ├── UnshardedAuto.java
│ │ │ │ ├── UnshardedB.java
│ │ │ │ ├── User.java
│ │ │ │ ├── UserExtra.java
│ │ │ │ ├── UserMetadata.java
│ │ │ │ ├── Vindexes.java
│ │ │ │ └── WeirdName.java
│ │ │ ├── queryservice
│ │ │ ├── MockQueryServer.java
│ │ │ ├── TabletDialerAgent.java
│ │ │ └── util
│ │ │ │ └── RoleUtilsTest.java
│ │ │ ├── shards
│ │ │ └── hash
│ │ │ │ ├── KeyTest.java
│ │ │ │ └── VtConnHashTest.java
│ │ │ ├── show
│ │ │ └── ShowVitessShardsTest.java
│ │ │ ├── sqlparser
│ │ │ ├── ChangeSchemaTest.java
│ │ │ ├── KeywordTest.java
│ │ │ ├── NormalizeRewritePutTest.java
│ │ │ ├── SmartNormalizeDateTest.java
│ │ │ ├── SmartNormalizeTest1.java
│ │ │ ├── SmartNormalizeTest2.java
│ │ │ └── dialect
│ │ │ │ └── mysql
│ │ │ │ └── visitor
│ │ │ │ └── AddDualVisitorTest.java
│ │ │ ├── sqltypes
│ │ │ └── VtValueTest.java
│ │ │ ├── table
│ │ │ ├── ConcurrentSplitTableTest.java
│ │ │ ├── LastInsertIdTest.java
│ │ │ ├── SplitTableUtilTest.java
│ │ │ ├── TableAutoGeneratedKeysTest.java
│ │ │ ├── TableRewriteBatchedStatementsTest.java
│ │ │ ├── TableTestUtil.java
│ │ │ ├── TestParallelQuery.java
│ │ │ ├── TransactionTest.java
│ │ │ ├── batch
│ │ │ │ └── BatchTest.java
│ │ │ ├── engine
│ │ │ │ ├── DeleteTest.java
│ │ │ │ ├── InsertTest.java
│ │ │ │ ├── SelectTest.java
│ │ │ │ ├── TableSequenceTest.java
│ │ │ │ ├── UpdateTest.java
│ │ │ │ ├── join
│ │ │ │ │ └── JoinTest.java
│ │ │ │ ├── subquery
│ │ │ │ │ └── SubqueryTest.java
│ │ │ │ ├── union
│ │ │ │ │ └── UnionTest.java
│ │ │ │ └── unshard
│ │ │ │ │ ├── DeleteUnShardTest.java
│ │ │ │ │ ├── InsertUnShardTest.java
│ │ │ │ │ ├── SelectUnShardTest.java
│ │ │ │ │ └── UpdateUnShardTest.java
│ │ │ ├── multiquery
│ │ │ │ └── MultiqueryTest.java
│ │ │ ├── streamquery
│ │ │ │ └── StreamQueryTest.java
│ │ │ ├── table
│ │ │ │ └── TestTableSort.java
│ │ │ └── unshard
│ │ │ │ ├── ConcurrentSplitTableUnshardTest.java
│ │ │ │ ├── LastInsertIdUnShardTest.java
│ │ │ │ ├── TableAutoGeneratedKeysUnShardTest.java
│ │ │ │ └── TransactionUnShardTest.java
│ │ │ ├── threadpool
│ │ │ ├── InitConnectionPoolParams.java
│ │ │ └── VtThreadPoolExecutorTest.java
│ │ │ ├── topo
│ │ │ ├── MemoryTopoFactory.java
│ │ │ ├── MemoryTopoServer.java
│ │ │ ├── discovery
│ │ │ │ └── TestHealthCheck.java
│ │ │ └── etcd2topo
│ │ │ │ ├── Etcd2TopoFactoryTest.java
│ │ │ │ ├── Etcd2TopoServerTest.java
│ │ │ │ └── ServerTest.java
│ │ │ ├── util
│ │ │ ├── InnerConnectionPoolUtil.java
│ │ │ ├── JdkUtilTest.java
│ │ │ ├── JsonUtil.java
│ │ │ └── SplitMultiQueryUtilsTest.java
│ │ │ └── vitess
│ │ │ ├── KeyspaceNotExistTest.java
│ │ │ ├── TimeTest.java
│ │ │ ├── TimeTestUtil.java
│ │ │ ├── TimeZoneTest.java
│ │ │ ├── TimezoneConfigureTest.java
│ │ │ ├── TransactionTest.java
│ │ │ ├── TransactionUnShardTest.java
│ │ │ ├── TypeTest.java
│ │ │ ├── VitessAutoGeneratedKeysRewriteBatchTest.java
│ │ │ ├── VitessAutoGeneratedKeysTest.java
│ │ │ ├── VitessDriverCPTest.java
│ │ │ ├── VitessDriverConnectionPoolTest.java
│ │ │ ├── VitessDriverConsolidatorTest.java
│ │ │ ├── VitessDriverDatabaseMetaDataTest.java
│ │ │ ├── VitessDriverExecuteBatchTest.java
│ │ │ ├── VitessDriverFindColumnByName.java
│ │ │ ├── VitessDriverReadWriteSplit.java
│ │ │ ├── VitessDriverTestBase.java
│ │ │ ├── VitessDriverUnshardedTest.java
│ │ │ ├── VitessJdbcUrlParserTest.java
│ │ │ ├── allowMultiQueries
│ │ │ ├── VitessDriverAllowMultiQuerieTest.java
│ │ │ ├── VitessDriverMultiQueriesTest.java
│ │ │ └── VitessDriverMultiQuerySubsectionTest.java
│ │ │ └── parser
│ │ │ └── test
│ │ │ ├── SelectTest.java
│ │ │ ├── SqlParserTest.java
│ │ │ └── TestUtils.java
│ └── testsuite
│ │ ├── TestSuite.java
│ │ ├── internal
│ │ ├── TestSuiteConn.java
│ │ ├── TestSuiteShardSpec.java
│ │ ├── config
│ │ │ ├── DriverJdbcCfg.java
│ │ │ ├── TestSuiteCfgPath.java
│ │ │ ├── TestSuiteCfgReader.java
│ │ │ └── TestSuiteJdbcCfg.java
│ │ ├── environment
│ │ │ ├── DriverEnv.java
│ │ │ └── TestSuiteEnv.java
│ │ └── testcase
│ │ │ └── TestSuiteCase.java
│ │ └── util
│ │ ├── printer
│ │ └── TestSuitePrinter.java
│ │ └── random
│ │ └── TestSuiteRandom.java
│ └── resources
│ ├── emojis.json
│ ├── engine
│ ├── destination
│ │ ├── delete_cases.json
│ │ ├── select_cases.json
│ │ └── update_cases.json
│ ├── dml_delete_sharded.json
│ ├── dml_delete_unsharded.json
│ ├── dml_insert_sharded.json
│ ├── dml_insert_unsharded.json
│ ├── dml_update_sharded.json
│ ├── dml_update_unsharded.json
│ ├── join
│ │ ├── datatype
│ │ │ └── datatype_join_test.json
│ │ ├── sharded
│ │ │ └── join_cases.json
│ │ └── unsharded
│ │ │ └── join_cases.json
│ ├── selectengine
│ │ ├── aggr_cases.json
│ │ ├── bug_in_resolve_cases
│ │ │ ├── aggr_cases.json
│ │ │ ├── memory_sort_cases.json
│ │ │ └── select_cases.json
│ │ ├── calculate_dual_case.json
│ │ ├── deepPagination.json
│ │ ├── filter_cases.json
│ │ ├── from_cases.json
│ │ ├── memory_sort_cases.json
│ │ ├── postprocess_cases.json
│ │ └── select_cases.json
│ ├── subquery
│ │ ├── sharded
│ │ │ └── subquery_cases.json
│ │ └── unsharded
│ │ │ └── subquery_cases.json
│ ├── tableengine
│ │ ├── delete_case.json
│ │ ├── delete_case_upperCase.json
│ │ ├── insert_case.json
│ │ ├── insert_case_seq.json
│ │ ├── insert_case_upperCase.json
│ │ ├── join_case.json
│ │ ├── multiquery
│ │ │ └── select_case.json
│ │ ├── select_aggr_case.json
│ │ ├── select_aggr_case_unsupport.json
│ │ ├── select_aggr_case_upperCase.json
│ │ ├── select_case.json
│ │ ├── select_case_upperCase.json
│ │ ├── select_filter_case.json
│ │ ├── select_filter_case_upperCase.json
│ │ ├── select_memsort_case.json
│ │ ├── select_memsort_case_upperCase.json
│ │ ├── select_postprocess_case.json
│ │ ├── select_postprocess_case_upperCase.json
│ │ ├── split-table-seq-tindex.yml
│ │ ├── split-table-seq.yml
│ │ ├── split-table_1.yml
│ │ ├── split-table_2.yml
│ │ ├── streamquery
│ │ │ └── select_case.json
│ │ ├── subquery_case.json
│ │ ├── union_case.json
│ │ ├── update_case.json
│ │ └── update_case_upperCase.json
│ └── union
│ │ ├── sharded
│ │ └── union_cases.json
│ │ └── unsharded
│ │ └── union_cases.json
│ ├── log4j.properties
│ ├── plan
│ ├── Gen4
│ │ ├── operator_test_data.txt
│ │ ├── operator_test_data_bk.txt
│ │ └── operator_test_data_one.txt
│ ├── aggr_cases.txt
│ ├── aggr_cases_unsupported.txt
│ ├── destination_case.txt
│ ├── destination_cases_error.txt
│ ├── dml_delete_cases.txt
│ ├── dml_delete_cases_unsupported.txt
│ ├── dml_insert_cases.txt
│ ├── dml_insert_cases_unsupported.txt
│ ├── dml_update_cases.txt
│ ├── dml_update_cases_unsupported.txt
│ ├── filter_cases.txt
│ ├── filter_cases_unsupported.txt
│ ├── from_cases.txt
│ ├── from_cases_unsupported.txt
│ ├── memory_sort_cases.txt
│ ├── memory_sort_cases_unsupported.txt
│ ├── one_cases.txt
│ ├── plan_schema.json
│ ├── postprocess_cases.txt
│ ├── postprocess_cases_unsupported.txt
│ ├── select_cases.txt
│ ├── select_cases_unsupported.txt
│ └── union_cases.txt
│ ├── table
│ ├── autoGeneratedKeys.yml
│ ├── shardTable.yml
│ ├── shardTableByLong.yml
│ ├── shardTableByMode.yml
│ └── shardTableByString.yml
│ ├── testsuite-dev.properties
│ ├── transaction
│ ├── table_transaction_case.json
│ ├── table_transaction_case_seq.json
│ └── transaction.json
│ ├── util
│ └── splitmultiqueryutils.json
│ ├── vitess_env
│ ├── create_tables.sh
│ ├── init_mysql_user.sh
│ ├── setup.sh
│ ├── vtdriver-env-v11.0.0.patch
│ ├── vtdriver-env-v12.0.2.patch
│ ├── vtdriver-env-v13.0.0.patch
│ └── vtdriver
│ │ ├── commerce_unsharded.sql
│ │ ├── customer_sharded.sql
│ │ ├── mysql_user.sql
│ │ ├── vschema_commerce_unsharded.json
│ │ └── vschema_customer_sharded.json
│ └── vtdriver-split-table.yml
└── vtdriver-spring-boot-starter
├── README.md
├── pom.xml
└── src
├── main
├── java
│ └── com
│ │ └── jd
│ │ └── vtdriver
│ │ └── spring
│ │ └── boot
│ │ └── autoconfigure
│ │ ├── VtDriverAutoConfiguration.java
│ │ ├── VtDriverSplitTable.java
│ │ └── properties
│ │ └── VtDriverSplitTableProperties.java
└── resources
│ └── META-INF
│ └── spring.factories
└── test
├── java
└── com
│ └── jd
│ └── vtdriver
│ └── spring
│ └── boot
│ ├── demo
│ ├── VtdriverSpringbootApplication.java
│ ├── mapper
│ │ ├── TableMapper.java
│ │ └── UserMapper.java
│ └── model
│ │ ├── Table.java
│ │ └── User.java
│ └── testcase
│ ├── DemoTest.java
│ └── VtDriverSplitTableTest.java
└── resources
├── application-yaml.yaml
└── application.properties
/.github/workflows/image_push.yml:
--------------------------------------------------------------------------------
1 | name: image_push
2 |
3 | on: workflow_dispatch
4 |
5 | jobs:
6 | push_to_docker_hub:
7 | name: Build and push image to Docker Hub
8 | runs-on: ubuntu-latest
9 | steps:
10 | - name: Check out the repo
11 | uses: actions/checkout@v2
12 | - name: Clone vitess repository
13 | uses: actions/checkout@v2
14 | with:
15 | repository: vitessio/vitess
16 | path: src/test/resources/vitess_env/build_vitess/vitess
17 | ref: v13.0.0
18 | - name: run setup.sh v13.0.0
19 | run: cd src/test/resources/vitess_env && chmod ug+x setup.sh && ./setup.sh
20 | - name: Log in to Docker Hub
21 | uses: docker/login-action@v1
22 | with:
23 | username: ${{ secrets.DOCKER_USERNAME }}
24 | password: ${{ secrets.DOCKERHUB_TOKEN }}
25 | - name: Push image to Docker Hub
26 | run: docker push vtdriverio/vtdriver-env:latest
27 |
--------------------------------------------------------------------------------
/docs/Architecture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jd-opensource/vtdriver/4ec144cc589c232610dea62054cae16d7a75aa98/docs/Architecture.png
--------------------------------------------------------------------------------
/docs/Idea.md:
--------------------------------------------------------------------------------
1 | ## IDEA配置
2 | ### lombok
3 | 由于VtDriver源码使用了lombok插件提供的一些注解,需要在IDEA中安装
4 | file-->setting-->plugins,输入 Lombok 搜索,进行安装
5 |
6 | 
7 | ### proto编译
8 | VtDriver内部使用了一些proto生成的代码,已经把需要用到的类利用protobuf生成后放入VtDriver的目录下
9 | 若需要修改proto文件,可按照下面的步骤生成proto对应的java类,并放入源码中
10 | 
--------------------------------------------------------------------------------
/docs/VtDriver.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jd-opensource/vtdriver/4ec144cc589c232610dea62054cae16d7a75aa98/docs/VtDriver.png
--------------------------------------------------------------------------------
/docs/VtDriver适配.md:
--------------------------------------------------------------------------------
1 | ### VtDriver适配已有的Vitess环境
2 |
3 | 1. 修改ETCD_SERVER
4 |
5 | 如果部署的Vitess环境和项目不在同一机器上,要在vitess/examples/local/env.sh中修改ETCD_SERVER的ip修改为环境所部署机器的ip (
6 | 不是127.0.0.1或者localhost),并重启生效。确保项目所在机器可以访问到ETCD
7 |
8 | 2. 运行测试用例(可选)
9 |
10 | 根据项目中的文件
11 |
12 | vtdriver/src/test/resources/config/commerce_unsharded.sql
13 |
14 | vtdriver/src/test/resources/config/customer_sharded.sql
15 |
16 | 分别对单分片和两分片的库创建表;
17 |
18 | 参考vSchema文件
19 |
20 | vtdriver/src/test/resources/config/vschema_commerce_unsharded.json
21 |
22 | vtdriver/src/test/resources/config/vschema_customer_sharded.json
23 |
24 | 更新vSchema;
25 |
26 | 设置相关库的sql_mode
27 |
28 | ```sql
29 | set global sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
30 | ```
31 |
32 | 3. 链接数据库
33 |
34 | 可参考[QuickStart.md](./QuickStart.md)的第二步进行配置
--------------------------------------------------------------------------------
/docs/architecture.en.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jd-opensource/vtdriver/4ec144cc589c232610dea62054cae16d7a75aa98/docs/architecture.en.png
--------------------------------------------------------------------------------
/docs/lombok.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jd-opensource/vtdriver/4ec144cc589c232610dea62054cae16d7a75aa98/docs/lombok.png
--------------------------------------------------------------------------------
/docs/preheat.md:
--------------------------------------------------------------------------------
1 | # VtDriver预热
2 |
3 | 应用启动时需要先连接元数据,获取MySQL的连接信息,然后再与底层的mysql建立连接,这个时间确实会比使用MySQL要长,因为分片场景要连接到多个MySQL。
4 |
5 | ## 预热方式
6 | ### Spring XML配置方式
7 | ```
8 |
9 | ```
10 | ### Spring Java Config配置方式
11 | ```
12 | @Bean
13 | public VitessDataSourceInitializingBean vitessDataSourceInitializingBean() {
14 | return new VitessDataSourceInitializingBean();
15 | }
16 | ```
17 | ### SpringBoot也可以直接使用vtdriver-spring-boot-starter
--------------------------------------------------------------------------------
/docs/proto_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jd-opensource/vtdriver/4ec144cc589c232610dea62054cae16d7a75aa98/docs/proto_2.png
--------------------------------------------------------------------------------
/proto/src/main/proto/tableacl.proto:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2019 The Vitess Authors.
3 |
4 | Licensed under the Apache License, Version 2.0 (the "License");
5 | you may not use this file except in compliance with the License.
6 | You may obtain a copy of the License at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing, software
11 | distributed under the License is distributed on an "AS IS" BASIS,
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | See the License for the specific language governing permissions and
14 | limitations under the License.
15 | */
16 |
17 | // Table ACL proto definitions.
18 |
19 | syntax = "proto3";
20 | option go_package = "vitess.io/vitess/go/vt/proto/tableacl";
21 |
22 | package tableacl;
23 |
24 | // TableGroupSpec defines ACLs for a group of tables.
25 | message TableGroupSpec {
26 | string name = 1;
27 | // either tables or a table name prefixes (if it ends in a %)
28 | repeated string table_names_or_prefixes = 2;
29 | repeated string readers = 3;
30 | repeated string writers = 4;
31 | repeated string admins = 5;
32 | }
33 |
34 | message Config {
35 | repeated TableGroupSpec table_groups = 1;
36 | }
37 |
--------------------------------------------------------------------------------
/proto/src/main/proto/vtctlservice.proto:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2019 The Vitess Authors.
3 |
4 | Licensed under the Apache License, Version 2.0 (the "License");
5 | you may not use this file except in compliance with the License.
6 | You may obtain a copy of the License at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing, software
11 | distributed under the License is distributed on an "AS IS" BASIS,
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | See the License for the specific language governing permissions and
14 | limitations under the License.
15 | */
16 |
17 | // This package contains a service allowing you to use vtctld as a
18 | // proxy for vt commands.
19 |
20 | syntax = "proto3";
21 | option go_package = "vitess.io/vitess/go/vt/proto/vtctlservice";
22 |
23 | package vtctlservice;
24 |
25 | import "vtctldata.proto";
26 |
27 | // Service Vtctl allows you to call vt commands through gRPC.
28 | service Vtctl {
29 | rpc ExecuteVtctlCommand (vtctldata.ExecuteVtctlCommandRequest) returns (stream vtctldata.ExecuteVtctlCommandResponse) {};
30 | }
31 |
--------------------------------------------------------------------------------
/proto/src/main/proto/vttime.proto:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2019 The Vitess Authors.
3 |
4 | Licensed under the Apache License, Version 2.0 (the "License");
5 | you may not use this file except in compliance with the License.
6 | You may obtain a copy of the License at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing, software
11 | distributed under the License is distributed on an "AS IS" BASIS,
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | See the License for the specific language governing permissions and
14 | limitations under the License.
15 | */
16 |
17 | // This package contains a shared time data structure
18 |
19 | syntax = "proto3";
20 | option go_package = "vitess.io/vitess/go/vt/proto/vttime";
21 |
22 | package vttime;
23 |
24 | // Time represents a time stamp in nanoseconds. In go, use logutil library
25 | // to convert times.
26 | message Time {
27 | int64 seconds = 1;
28 | int32 nanoseconds = 2;
29 | }
30 |
31 |
--------------------------------------------------------------------------------
/proto/src/main/proto/vtworkerdata.proto:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2019 The Vitess Authors.
3 |
4 | Licensed under the Apache License, Version 2.0 (the "License");
5 | you may not use this file except in compliance with the License.
6 | You may obtain a copy of the License at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing, software
11 | distributed under the License is distributed on an "AS IS" BASIS,
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | See the License for the specific language governing permissions and
14 | limitations under the License.
15 | */
16 |
17 | // Data structures for the vtworker RPC interface.
18 |
19 | syntax = "proto3";
20 | option go_package = "vitess.io/vitess/go/vt/proto/vtworkerdata";
21 |
22 | package vtworkerdata;
23 |
24 | import "logutil.proto";
25 |
26 | // ExecuteVtworkerCommandRequest is the payload for ExecuteVtworkerCommand.
27 | message ExecuteVtworkerCommandRequest {
28 | repeated string args = 1;
29 | }
30 |
31 | // ExecuteVtworkerCommandResponse is streamed back by ExecuteVtworkerCommand.
32 | message ExecuteVtworkerCommandResponse {
33 | logutil.Event event = 1;
34 | }
35 |
--------------------------------------------------------------------------------
/proto/src/main/proto/vtworkerservice.proto:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2019 The Vitess Authors.
3 |
4 | Licensed under the Apache License, Version 2.0 (the "License");
5 | you may not use this file except in compliance with the License.
6 | You may obtain a copy of the License at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing, software
11 | distributed under the License is distributed on an "AS IS" BASIS,
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | See the License for the specific language governing permissions and
14 | limitations under the License.
15 | */
16 |
17 | // RPC interface for vtworker.
18 | // The interface is very similar to the vtctld interface (see vtctlservice.proto).
19 |
20 | syntax = "proto3";
21 | option go_package = "vitess.io/vitess/go/vt/proto/vtworkerservice";
22 |
23 | package vtworkerservice;
24 |
25 | import "vtworkerdata.proto";
26 |
27 | // Vtworker contains the vtworker RPC calls.
28 | service Vtworker {
29 | // ExecuteVtworkerCommand allows to run a vtworker command by specifying the
30 | // same arguments as on the command line.
31 | rpc ExecuteVtworkerCommand (vtworkerdata.ExecuteVtworkerCommandRequest) returns (stream vtworkerdata.ExecuteVtworkerCommandResponse) {};
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/com/jd/jdbc/api/VtApiServerResponse.java:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2021 JD Project Authors.
3 |
4 | Licensed under the Apache License, Version 2.0 (the "License");
5 | you may not use this file except in compliance with the License.
6 | You may obtain a copy of the License at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing, software
11 | distributed under the License is distributed on an "AS IS" BASIS,
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | See the License for the specific language governing permissions and
14 | limitations under the License.
15 | */
16 |
17 | package com.jd.jdbc.api;
18 |
19 | import java.io.Serializable;
20 | import lombok.Getter;
21 |
22 | @Getter
23 | public enum VtApiServerResponse implements Serializable {
24 | /**
25 | *
26 | */
27 | SUCCESS(200, "Success"),
28 | FAILURE(500, "Failure");
29 |
30 | private final int code;
31 |
32 | private final String message;
33 |
34 | VtApiServerResponse(int code, String message) {
35 | this.code = code;
36 | this.message = message;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/main/java/com/jd/jdbc/common/util/Crc32Utill.java:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2021 JD Project Authors.
3 |
4 | Licensed under the Apache License, Version 2.0 (the "License");
5 | you may not use this file except in compliance with the License.
6 | You may obtain a copy of the License at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing, software
11 | distributed under the License is distributed on an "AS IS" BASIS,
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | See the License for the specific language governing permissions and
14 | limitations under the License.
15 | */
16 |
17 | package com.jd.jdbc.common.util;
18 |
19 | import java.util.zip.CRC32;
20 |
21 | public class Crc32Utill {
22 |
23 | private Crc32Utill() {
24 | }
25 |
26 | public static long checksumByCrc32(byte[] b) {
27 | CRC32 crc32 = new CRC32();
28 | crc32.update(b);
29 | return crc32.getValue();
30 | }
31 |
32 | public static long checksumByCrc32(int b) {
33 | CRC32 crc32 = new CRC32();
34 | crc32.update(b);
35 | return crc32.getValue();
36 | }
37 |
38 | }
39 |
--------------------------------------------------------------------------------
/src/main/java/com/jd/jdbc/common/util/MapUtil.java:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2021 JD Project Authors.
3 |
4 | Licensed under the Apache License, Version 2.0 (the "License");
5 | you may not use this file except in compliance with the License.
6 | You may obtain a copy of the License at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing, software
11 | distributed under the License is distributed on an "AS IS" BASIS,
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | See the License for the specific language governing permissions and
14 | limitations under the License.
15 | */
16 |
17 | package com.jd.jdbc.common.util;
18 |
19 | import java.util.Map;
20 | import java.util.function.Function;
21 |
22 | public class MapUtil {
23 | private MapUtil() {
24 | }
25 |
26 | public static V computeIfAbsent(Map concurrentHashMap, K key, Function super K, ? extends V> mappingFunction) {
27 | V value = concurrentHashMap.get(key);
28 | if (value != null) {
29 | return value;
30 | }
31 | return concurrentHashMap.computeIfAbsent(key, mappingFunction);
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/main/java/com/jd/jdbc/concurrency/ErrorRecorder.java:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2021 JD Project Authors. Licensed under Apache-2.0.
3 |
4 | Copyright 2019 The Vitess Authors.
5 |
6 | Licensed under the Apache License, Version 2.0 (the "License");
7 | you may not use this file except in compliance with the License.
8 | You may obtain a copy of the License at
9 |
10 | http://www.apache.org/licenses/LICENSE-2.0
11 |
12 | Unless required by applicable law or agreed to in writing, software
13 | distributed under the License is distributed on an "AS IS" BASIS,
14 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | See the License for the specific language governing permissions and
16 | limitations under the License.
17 | */
18 |
19 | package com.jd.jdbc.concurrency;
20 |
21 | import java.sql.SQLException;
22 |
23 | public interface ErrorRecorder {
24 |
25 | /**
26 | * @param e
27 | */
28 | void recordError(Exception e);
29 |
30 | /**
31 | * @return
32 | */
33 | Boolean hasErrors();
34 |
35 | /**
36 | * @return
37 | */
38 | SQLException error();
39 | }
40 |
--------------------------------------------------------------------------------
/src/main/java/com/jd/jdbc/context/VtContextConstant.java:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2021 JD Project Authors. Licensed under Apache-2.0.
3 |
4 | Copyright 2019 The Vitess Authors.
5 |
6 | Licensed under the Apache License, Version 2.0 (the "License");
7 | you may not use this file except in compliance with the License.
8 | You may obtain a copy of the License at
9 |
10 | http://www.apache.org/licenses/LICENSE-2.0
11 |
12 | Unless required by applicable law or agreed to in writing, software
13 | distributed under the License is distributed on an "AS IS" BASIS,
14 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | See the License for the specific language governing permissions and
16 | limitations under the License.
17 | */
18 |
19 | package com.jd.jdbc.context;
20 |
21 | public class VtContextConstant {
22 | public static final String EXECUTION_CANCELLED = "execution is cancelled. ";
23 |
24 | public static final String BEGIN_EXECUTION_CANCELLED = "begin execution is cancelled. ";
25 |
26 | public static final String STREAM_EXECUTION_CANCELLED = "stream execution is cancelled. ";
27 |
28 | public static final String CONTEXT_CANCELLED = "context is canceled. ";
29 | }
--------------------------------------------------------------------------------
/src/main/java/com/jd/jdbc/context/VtDeadlineContext.java:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2021 JD Project Authors. Licensed under Apache-2.0.
3 |
4 | Copyright 2019 The Vitess Authors.
5 |
6 | Licensed under the Apache License, Version 2.0 (the "License");
7 | you may not use this file except in compliance with the License.
8 | You may obtain a copy of the License at
9 |
10 | http://www.apache.org/licenses/LICENSE-2.0
11 |
12 | Unless required by applicable law or agreed to in writing, software
13 | distributed under the License is distributed on an "AS IS" BASIS,
14 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | See the License for the specific language governing permissions and
16 | limitations under the License.
17 | */
18 |
19 | package com.jd.jdbc.context;
20 |
21 | import java.util.Date;
22 | import java.util.Map;
23 |
24 | public class VtDeadlineContext extends VtCancelContext {
25 |
26 | public VtDeadlineContext(IContext parent, Date deadline, Map