Full Code of alibaba/druid for AI

master dbbf4ae6d5ae cached
6550 files
24.6 MB
4.4M tokens
35432 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (17,506K chars total). Download the full file to get everything.
Repository: alibaba/druid
Branch: master
Commit: dbbf4ae6d5ae
Files: 6550
Total size: 24.6 MB

Directory structure:
gitextract__wvhcd09/

├── .cursor/
│   ├── commands/
│   │   ├── opsx-apply.md
│   │   ├── opsx-archive.md
│   │   ├── opsx-bulk-archive.md
│   │   ├── opsx-continue.md
│   │   ├── opsx-explore.md
│   │   ├── opsx-ff.md
│   │   ├── opsx-new.md
│   │   ├── opsx-onboard.md
│   │   ├── opsx-sync.md
│   │   └── opsx-verify.md
│   └── skills/
│       ├── openspec-apply-change/
│       │   └── SKILL.md
│       ├── openspec-archive-change/
│       │   └── SKILL.md
│       ├── openspec-bulk-archive-change/
│       │   └── SKILL.md
│       ├── openspec-continue-change/
│       │   └── SKILL.md
│       ├── openspec-explore/
│       │   └── SKILL.md
│       ├── openspec-ff-change/
│       │   └── SKILL.md
│       ├── openspec-new-change/
│       │   └── SKILL.md
│       ├── openspec-onboard/
│       │   └── SKILL.md
│       ├── openspec-sync-specs/
│       │   └── SKILL.md
│       └── openspec-verify-change/
│           └── SKILL.md
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   └── bug_report.yml
│   ├── ISSUE_TEMPLATE.md
│   └── workflows/
│       └── ci.yaml
├── .gitignore
├── .mvn/
│   └── wrapper/
│       ├── MavenWrapperDownloader.java
│       ├── maven-wrapper.jar
│       └── maven-wrapper.properties
├── .qoder/
│   ├── commands/
│   │   └── opsx/
│   │       ├── apply.md
│   │       ├── archive.md
│   │       ├── bulk-archive.md
│   │       ├── continue.md
│   │       ├── explore.md
│   │       ├── ff.md
│   │       ├── new.md
│   │       ├── onboard.md
│   │       ├── sync.md
│   │       └── verify.md
│   └── skills/
│       ├── openspec-apply-change/
│       │   └── SKILL.md
│       ├── openspec-archive-change/
│       │   └── SKILL.md
│       ├── openspec-bulk-archive-change/
│       │   └── SKILL.md
│       ├── openspec-continue-change/
│       │   └── SKILL.md
│       ├── openspec-explore/
│       │   └── SKILL.md
│       ├── openspec-ff-change/
│       │   └── SKILL.md
│       ├── openspec-new-change/
│       │   └── SKILL.md
│       ├── openspec-onboard/
│       │   └── SKILL.md
│       ├── openspec-sync-specs/
│       │   └── SKILL.md
│       └── openspec-verify-change/
│           └── SKILL.md
├── .travis.yml
├── AGENTS.md
├── CONTRIBUTING.md
├── NOTICE
├── QWEN.md
├── README.md
├── README_EN.md
├── SECURITY.md
├── codecov.yml
├── core/
│   ├── .gitignore
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   ├── META-INF/
│       │   │   │   └── MANIFEST.MF
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── druid/
│       │   │               ├── Constants.java
│       │   │               ├── DbType.java
│       │   │               ├── DruidRuntimeException.java
│       │   │               ├── FastsqlColumnAmbiguousException.java
│       │   │               ├── FastsqlException.java
│       │   │               ├── TransactionTimeoutException.java
│       │   │               ├── VERSION.java
│       │   │               ├── filter/
│       │   │               │   ├── AutoLoad.java
│       │   │               │   ├── Filter.java
│       │   │               │   ├── FilterAdapter.java
│       │   │               │   ├── FilterChain.java
│       │   │               │   ├── FilterChainImpl.java
│       │   │               │   ├── FilterEventAdapter.java
│       │   │               │   ├── FilterManager.java
│       │   │               │   ├── config/
│       │   │               │   │   ├── ConfigFilter.java
│       │   │               │   │   └── ConfigTools.java
│       │   │               │   ├── encoding/
│       │   │               │   │   ├── CharsetConvert.java
│       │   │               │   │   ├── CharsetParameter.java
│       │   │               │   │   └── EncodingConvertFilter.java
│       │   │               │   ├── logging/
│       │   │               │   │   ├── CommonsLogFilter.java
│       │   │               │   │   ├── CommonsLogFilterMBean.java
│       │   │               │   │   ├── Log4j2Filter.java
│       │   │               │   │   ├── Log4j2FilterMBean.java
│       │   │               │   │   ├── Log4jFilter.java
│       │   │               │   │   ├── Log4jFilterMBean.java
│       │   │               │   │   ├── LogFilter.java
│       │   │               │   │   ├── LogFilterMBean.java
│       │   │               │   │   └── Slf4jLogFilter.java
│       │   │               │   ├── mysql8datetime/
│       │   │               │   │   ├── MySQL8DateTimeResultSetMetaData.java
│       │   │               │   │   └── MySQL8DateTimeSqlTypeFilter.java
│       │   │               │   └── stat/
│       │   │               │       ├── MergeStatFilter.java
│       │   │               │       ├── StatFilter.java
│       │   │               │       ├── StatFilterContext.java
│       │   │               │       ├── StatFilterContextListener.java
│       │   │               │       ├── StatFilterContextListenerAdapter.java
│       │   │               │       └── StatFilterMBean.java
│       │   │               ├── mock/
│       │   │               │   ├── MockArray.java
│       │   │               │   ├── MockBlob.java
│       │   │               │   ├── MockCallableStatement.java
│       │   │               │   ├── MockClob.java
│       │   │               │   ├── MockConnection.java
│       │   │               │   ├── MockConnectionClosedException.java
│       │   │               │   ├── MockDriver.java
│       │   │               │   ├── MockDriverMBean.java
│       │   │               │   ├── MockNClob.java
│       │   │               │   ├── MockParameterMetaData.java
│       │   │               │   ├── MockPreparedStatement.java
│       │   │               │   ├── MockRef.java
│       │   │               │   ├── MockResultSet.java
│       │   │               │   ├── MockResultSetMetaData.java
│       │   │               │   ├── MockRowId.java
│       │   │               │   ├── MockSQLXML.java
│       │   │               │   ├── MockSavepoint.java
│       │   │               │   ├── MockStatement.java
│       │   │               │   ├── MockStatementBase.java
│       │   │               │   ├── MockStruct.java
│       │   │               │   └── handler/
│       │   │               │       ├── MockExecuteHandler.java
│       │   │               │       └── MySqlMockExecuteHandlerImpl.java
│       │   │               ├── pool/
│       │   │               │   ├── DataSourceClosedException.java
│       │   │               │   ├── DataSourceDisableException.java
│       │   │               │   ├── DataSourceNotAvailableException.java
│       │   │               │   ├── DruidAbstractDataSource.java
│       │   │               │   ├── DruidAbstractDataSourceMBean.java
│       │   │               │   ├── DruidConnectionHolder.java
│       │   │               │   ├── DruidDataSource.java
│       │   │               │   ├── DruidDataSourceC3P0Adapter.java
│       │   │               │   ├── DruidDataSourceC3P0AdapterMBean.java
│       │   │               │   ├── DruidDataSourceFactory.java
│       │   │               │   ├── DruidDataSourceMBean.java
│       │   │               │   ├── DruidDataSourceStatLogger.java
│       │   │               │   ├── DruidDataSourceStatLoggerAdapter.java
│       │   │               │   ├── DruidDataSourceStatLoggerImpl.java
│       │   │               │   ├── DruidDataSourceStatValue.java
│       │   │               │   ├── DruidPooledCallableStatement.java
│       │   │               │   ├── DruidPooledConnection.java
│       │   │               │   ├── DruidPooledPreparedStatement.java
│       │   │               │   ├── DruidPooledResultSet.java
│       │   │               │   ├── DruidPooledStatement.java
│       │   │               │   ├── DruidStatementConnection.java
│       │   │               │   ├── ExceptionSorter.java
│       │   │               │   ├── GetConnectionTimeoutException.java
│       │   │               │   ├── JDBC4ValidConnectionChecker.java
│       │   │               │   ├── ManagedDataSource.java
│       │   │               │   ├── PoolableWrapper.java
│       │   │               │   ├── PreparedStatementHolder.java
│       │   │               │   ├── PreparedStatementPool.java
│       │   │               │   ├── ValidConnectionChecker.java
│       │   │               │   ├── ValidConnectionCheckerAdapter.java
│       │   │               │   ├── WrapperAdapter.java
│       │   │               │   ├── ha/
│       │   │               │   │   ├── DataSourceCreator.java
│       │   │               │   │   ├── HighAvailableDataSource.java
│       │   │               │   │   ├── PropertiesUtils.java
│       │   │               │   │   ├── node/
│       │   │               │   │   │   ├── FileNodeListener.java
│       │   │               │   │   │   ├── NodeEvent.java
│       │   │               │   │   │   ├── NodeEventTypeEnum.java
│       │   │               │   │   │   ├── NodeListener.java
│       │   │               │   │   │   ├── PoolUpdater.java
│       │   │               │   │   │   ├── ZookeeperNodeInfo.java
│       │   │               │   │   │   ├── ZookeeperNodeListener.java
│       │   │               │   │   │   └── ZookeeperNodeRegister.java
│       │   │               │   │   └── selector/
│       │   │               │   │       ├── DataSourceSelector.java
│       │   │               │   │       ├── DataSourceSelectorEnum.java
│       │   │               │   │       ├── DataSourceSelectorFactory.java
│       │   │               │   │       ├── NamedDataSourceSelector.java
│       │   │               │   │       ├── RandomDataSourceRecoverThread.java
│       │   │               │   │       ├── RandomDataSourceSelector.java
│       │   │               │   │       ├── RandomDataSourceValidateFilter.java
│       │   │               │   │       ├── RandomDataSourceValidateThread.java
│       │   │               │   │       ├── StickyDataSourceHolder.java
│       │   │               │   │       └── StickyRandomDataSourceSelector.java
│       │   │               │   ├── vendor/
│       │   │               │   │   ├── AbstractOracleExceptionSorter.java
│       │   │               │   │   ├── DB2ExceptionSorter.java
│       │   │               │   │   ├── InformixExceptionSorter.java
│       │   │               │   │   ├── MSSQLValidConnectionChecker.java
│       │   │               │   │   ├── MockExceptionSorter.java
│       │   │               │   │   ├── MySqlExceptionSorter.java
│       │   │               │   │   ├── MySqlValidConnectionChecker.java
│       │   │               │   │   ├── NullExceptionSorter.java
│       │   │               │   │   ├── OceanBaseOracleExceptionSorter.java
│       │   │               │   │   ├── OceanBaseValidConnectionChecker.java
│       │   │               │   │   ├── OracleExceptionSorter.java
│       │   │               │   │   ├── OracleValidConnectionChecker.java
│       │   │               │   │   ├── PGExceptionSorter.java
│       │   │               │   │   ├── PGValidConnectionChecker.java
│       │   │               │   │   ├── PhoenixExceptionSorter.java
│       │   │               │   │   └── SybaseExceptionSorter.java
│       │   │               │   └── xa/
│       │   │               │       ├── DruidPooledXAConnection.java
│       │   │               │       ├── DruidXADataSource.java
│       │   │               │       ├── JtdsXAConnection.java
│       │   │               │       └── JtdsXAResource.java
│       │   │               ├── proxy/
│       │   │               │   ├── DruidDriver.java
│       │   │               │   ├── DruidDriverMBean.java
│       │   │               │   └── jdbc/
│       │   │               │       ├── CallableStatementProxy.java
│       │   │               │       ├── CallableStatementProxyImpl.java
│       │   │               │       ├── ClobProxy.java
│       │   │               │       ├── ClobProxyImpl.java
│       │   │               │       ├── ConnectionProxy.java
│       │   │               │       ├── ConnectionProxyImpl.java
│       │   │               │       ├── DataSourceProxy.java
│       │   │               │       ├── DataSourceProxyConfig.java
│       │   │               │       ├── DataSourceProxyImpl.java
│       │   │               │       ├── DataSourceProxyImplMBean.java
│       │   │               │       ├── DatabaseMetaDataProxyImpl.java
│       │   │               │       ├── JdbcParameter.java
│       │   │               │       ├── JdbcParameterDate.java
│       │   │               │       ├── JdbcParameterDecimal.java
│       │   │               │       ├── JdbcParameterImpl.java
│       │   │               │       ├── JdbcParameterInt.java
│       │   │               │       ├── JdbcParameterLong.java
│       │   │               │       ├── JdbcParameterNull.java
│       │   │               │       ├── JdbcParameterString.java
│       │   │               │       ├── JdbcParameterTimestamp.java
│       │   │               │       ├── NClobProxy.java
│       │   │               │       ├── NClobProxyImpl.java
│       │   │               │       ├── PreparedStatementProxy.java
│       │   │               │       ├── PreparedStatementProxyImpl.java
│       │   │               │       ├── ResultSetMetaDataProxy.java
│       │   │               │       ├── ResultSetMetaDataProxyImpl.java
│       │   │               │       ├── ResultSetProxy.java
│       │   │               │       ├── ResultSetProxyImpl.java
│       │   │               │       ├── StatementExecuteType.java
│       │   │               │       ├── StatementProxy.java
│       │   │               │       ├── StatementProxyImpl.java
│       │   │               │       ├── TransactionInfo.java
│       │   │               │       ├── WrapperProxy.java
│       │   │               │       └── WrapperProxyImpl.java
│       │   │               ├── sql/
│       │   │               │   ├── PagerUtils.java
│       │   │               │   ├── SQLDialect.java
│       │   │               │   ├── SQLUtils.java
│       │   │               │   ├── ast/
│       │   │               │   │   ├── AutoIncrementType.java
│       │   │               │   │   ├── ClusteringType.java
│       │   │               │   │   ├── DistributedByType.java
│       │   │               │   │   ├── SQLAdhocTableSource.java
│       │   │               │   │   ├── SQLAnnIndex.java
│       │   │               │   │   ├── SQLArgument.java
│       │   │               │   │   ├── SQLArrayDataType.java
│       │   │               │   │   ├── SQLCommentHint.java
│       │   │               │   │   ├── SQLComputeIncrementalStatsStatement.java
│       │   │               │   │   ├── SQLCurrentTimeExpr.java
│       │   │               │   │   ├── SQLCurrentUserExpr.java
│       │   │               │   │   ├── SQLDataType.java
│       │   │               │   │   ├── SQLDataTypeImpl.java
│       │   │               │   │   ├── SQLDataTypeRefExpr.java
│       │   │               │   │   ├── SQLDbTypedObject.java
│       │   │               │   │   ├── SQLDeclareItem.java
│       │   │               │   │   ├── SQLExpr.java
│       │   │               │   │   ├── SQLExprComparor.java
│       │   │               │   │   ├── SQLExprImpl.java
│       │   │               │   │   ├── SQLHint.java
│       │   │               │   │   ├── SQLIndex.java
│       │   │               │   │   ├── SQLIndexDefinition.java
│       │   │               │   │   ├── SQLIndexOptions.java
│       │   │               │   │   ├── SQLJSONValueExpr.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
│       │   │               │   │   ├── SQLPartitionBatch.java
│       │   │               │   │   ├── SQLPartitionBy.java
│       │   │               │   │   ├── SQLPartitionByHash.java
│       │   │               │   │   ├── SQLPartitionByList.java
│       │   │               │   │   ├── SQLPartitionByRange.java
│       │   │               │   │   ├── SQLPartitionByValue.java
│       │   │               │   │   ├── SQLPartitionOf.java
│       │   │               │   │   ├── SQLPartitionSingle.java
│       │   │               │   │   ├── SQLPartitionSpec.java
│       │   │               │   │   ├── SQLPartitionValue.java
│       │   │               │   │   ├── SQLPivot.java
│       │   │               │   │   ├── SQLRecordDataType.java
│       │   │               │   │   ├── SQLReplaceable.java
│       │   │               │   │   ├── SQLResetStatement.java
│       │   │               │   │   ├── SQLRowDataType.java
│       │   │               │   │   ├── SQLSetQuantifier.java
│       │   │               │   │   ├── SQLStatement.java
│       │   │               │   │   ├── SQLStatementImpl.java
│       │   │               │   │   ├── SQLStructDataType.java
│       │   │               │   │   ├── SQLSubPartition.java
│       │   │               │   │   ├── SQLSubPartitionBy.java
│       │   │               │   │   ├── SQLSubPartitionByHash.java
│       │   │               │   │   ├── SQLSubPartitionByList.java
│       │   │               │   │   ├── SQLSubPartitionByRange.java
│       │   │               │   │   ├── SQLTableDataType.java
│       │   │               │   │   ├── SQLTop.java
│       │   │               │   │   ├── SQLUnionDataType.java
│       │   │               │   │   ├── SQLUnpivot.java
│       │   │               │   │   ├── SQLWindow.java
│       │   │               │   │   ├── SQLZOrderBy.java
│       │   │               │   │   ├── TDDLHint.java
│       │   │               │   │   ├── expr/
│       │   │               │   │   │   ├── SQLAggregateExpr.java
│       │   │               │   │   │   ├── SQLAggregateOption.java
│       │   │               │   │   │   ├── SQLAliasedExpr.java
│       │   │               │   │   │   ├── SQLAllColumnExpr.java
│       │   │               │   │   │   ├── SQLAllExpr.java
│       │   │               │   │   │   ├── SQLAnyExpr.java
│       │   │               │   │   │   ├── SQLArrayExpr.java
│       │   │               │   │   │   ├── SQLAtTimeZoneExpr.java
│       │   │               │   │   │   ├── SQLBetweenExpr.java
│       │   │               │   │   │   ├── SQLBigIntExpr.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
│       │   │               │   │   │   ├── SQLDateTimeExpr.java
│       │   │               │   │   │   ├── SQLDateTypeExpr.java
│       │   │               │   │   │   ├── SQLDbLinkExpr.java
│       │   │               │   │   │   ├── SQLDecimalExpr.java
│       │   │               │   │   │   ├── SQLDefaultExpr.java
│       │   │               │   │   │   ├── SQLDoubleExpr.java
│       │   │               │   │   │   ├── SQLExistsExpr.java
│       │   │               │   │   │   ├── SQLExprUtils.java
│       │   │               │   │   │   ├── SQLExtractExpr.java
│       │   │               │   │   │   ├── SQLFlashbackExpr.java
│       │   │               │   │   │   ├── SQLFloatExpr.java
│       │   │               │   │   │   ├── SQLGroupingSetExpr.java
│       │   │               │   │   │   ├── SQLHexExpr.java
│       │   │               │   │   │   ├── SQLIdentifierExpr.java
│       │   │               │   │   │   ├── SQLInListExpr.java
│       │   │               │   │   │   ├── SQLInSubQueryExpr.java
│       │   │               │   │   │   ├── SQLIntegerExpr.java
│       │   │               │   │   │   ├── SQLIntervalExpr.java
│       │   │               │   │   │   ├── SQLIntervalUnit.java
│       │   │               │   │   │   ├── SQLJSONExpr.java
│       │   │               │   │   │   ├── SQLListExpr.java
│       │   │               │   │   │   ├── SQLLiteralExpr.java
│       │   │               │   │   │   ├── SQLMatchAgainstExpr.java
│       │   │               │   │   │   ├── SQLMethodInvokeExpr.java
│       │   │               │   │   │   ├── SQLNCharExpr.java
│       │   │               │   │   │   ├── SQLNotExpr.java
│       │   │               │   │   │   ├── SQLNullExpr.java
│       │   │               │   │   │   ├── SQLNumberExpr.java
│       │   │               │   │   │   ├── SQLNumericLiteralExpr.java
│       │   │               │   │   │   ├── SQLParametricMethodInvokeExpr.java
│       │   │               │   │   │   ├── SQLPatternExpr.java
│       │   │               │   │   │   ├── SQLPropertyExpr.java
│       │   │               │   │   │   ├── SQLQueryExpr.java
│       │   │               │   │   │   ├── SQLRealExpr.java
│       │   │               │   │   │   ├── SQLSequenceExpr.java
│       │   │               │   │   │   ├── SQLSizeExpr.java
│       │   │               │   │   │   ├── SQLSmallIntExpr.java
│       │   │               │   │   │   ├── SQLSomeExpr.java
│       │   │               │   │   │   ├── SQLStructExpr.java
│       │   │               │   │   │   ├── SQLTextLiteralExpr.java
│       │   │               │   │   │   ├── SQLTimeExpr.java
│       │   │               │   │   │   ├── SQLTimestampExpr.java
│       │   │               │   │   │   ├── SQLTimestampNTZExpr.java
│       │   │               │   │   │   ├── SQLTinyIntExpr.java
│       │   │               │   │   │   ├── SQLTypeExpr.java
│       │   │               │   │   │   ├── SQLUnaryExpr.java
│       │   │               │   │   │   ├── SQLUnaryOperator.java
│       │   │               │   │   │   ├── SQLValuableExpr.java
│       │   │               │   │   │   ├── SQLValuesExpr.java
│       │   │               │   │   │   └── SQLVariantRefExpr.java
│       │   │               │   │   └── statement/
│       │   │               │   │       ├── SQLAlterCharacter.java
│       │   │               │   │       ├── SQLAlterDatabaseItem.java
│       │   │               │   │       ├── SQLAlterDatabaseStatement.java
│       │   │               │   │       ├── SQLAlterFunctionStatement.java
│       │   │               │   │       ├── SQLAlterIndexStatement.java
│       │   │               │   │       ├── SQLAlterMaterializedViewStatement.java
│       │   │               │   │       ├── SQLAlterOutlineStatement.java
│       │   │               │   │       ├── SQLAlterProcedureStatement.java
│       │   │               │   │       ├── SQLAlterSequenceStatement.java
│       │   │               │   │       ├── SQLAlterStatement.java
│       │   │               │   │       ├── SQLAlterSystemGetConfigStatement.java
│       │   │               │   │       ├── SQLAlterSystemSetConfigStatement.java
│       │   │               │   │       ├── SQLAlterTableAddClusteringKey.java
│       │   │               │   │       ├── SQLAlterTableAddColumn.java
│       │   │               │   │       ├── SQLAlterTableAddConstraint.java
│       │   │               │   │       ├── SQLAlterTableAddExtPartition.java
│       │   │               │   │       ├── SQLAlterTableAddIndex.java
│       │   │               │   │       ├── SQLAlterTableAddPartition.java
│       │   │               │   │       ├── SQLAlterTableAddSupplemental.java
│       │   │               │   │       ├── SQLAlterTableAlterColumn.java
│       │   │               │   │       ├── SQLAlterTableAlterIndex.java
│       │   │               │   │       ├── SQLAlterTableAnalyzePartition.java
│       │   │               │   │       ├── SQLAlterTableArchive.java
│       │   │               │   │       ├── SQLAlterTableArchivePartition.java
│       │   │               │   │       ├── SQLAlterTableAttachPartition.java
│       │   │               │   │       ├── SQLAlterTableBlockSize.java
│       │   │               │   │       ├── SQLAlterTableChangeOwner.java
│       │   │               │   │       ├── SQLAlterTableCheckPartition.java
│       │   │               │   │       ├── SQLAlterTableCoalescePartition.java
│       │   │               │   │       ├── SQLAlterTableCompression.java
│       │   │               │   │       ├── SQLAlterTableConvertCharSet.java
│       │   │               │   │       ├── SQLAlterTableDeleteByCondition.java
│       │   │               │   │       ├── SQLAlterTableDetachPartition.java
│       │   │               │   │       ├── SQLAlterTableDisableConstraint.java
│       │   │               │   │       ├── SQLAlterTableDisableKeys.java
│       │   │               │   │       ├── SQLAlterTableDisableLifecycle.java
│       │   │               │   │       ├── SQLAlterTableDiscardPartition.java
│       │   │               │   │       ├── SQLAlterTableDropCheck.java
│       │   │               │   │       ├── SQLAlterTableDropClusteringKey.java
│       │   │               │   │       ├── SQLAlterTableDropColumnItem.java
│       │   │               │   │       ├── SQLAlterTableDropConstraint.java
│       │   │               │   │       ├── SQLAlterTableDropExtPartition.java
│       │   │               │   │       ├── SQLAlterTableDropForeignKey.java
│       │   │               │   │       ├── SQLAlterTableDropIndex.java
│       │   │               │   │       ├── SQLAlterTableDropKey.java
│       │   │               │   │       ├── SQLAlterTableDropPartition.java
│       │   │               │   │       ├── SQLAlterTableDropPrimaryKey.java
│       │   │               │   │       ├── SQLAlterTableDropSubpartition.java
│       │   │               │   │       ├── SQLAlterTableEnableConstraint.java
│       │   │               │   │       ├── SQLAlterTableEnableKeys.java
│       │   │               │   │       ├── SQLAlterTableEnableLifecycle.java
│       │   │               │   │       ├── SQLAlterTableExchangePartition.java
│       │   │               │   │       ├── SQLAlterTableGroupStatement.java
│       │   │               │   │       ├── SQLAlterTableImportPartition.java
│       │   │               │   │       ├── SQLAlterTableItem.java
│       │   │               │   │       ├── SQLAlterTableMergePartition.java
│       │   │               │   │       ├── SQLAlterTableModifyClusteredBy.java
│       │   │               │   │       ├── SQLAlterTableOptimizePartition.java
│       │   │               │   │       ├── SQLAlterTablePartition.java
│       │   │               │   │       ├── SQLAlterTablePartitionCount.java
│       │   │               │   │       ├── SQLAlterTablePartitionLifecycle.java
│       │   │               │   │       ├── SQLAlterTablePartitionSetProperties.java
│       │   │               │   │       ├── SQLAlterTableReOrganizePartition.java
│       │   │               │   │       ├── SQLAlterTableRebuildPartition.java
│       │   │               │   │       ├── SQLAlterTableRecoverPartitions.java
│       │   │               │   │       ├── SQLAlterTableRename.java
│       │   │               │   │       ├── SQLAlterTableRenameColumn.java
│       │   │               │   │       ├── SQLAlterTableRenameConstraint.java
│       │   │               │   │       ├── SQLAlterTableRenameIndex.java
│       │   │               │   │       ├── SQLAlterTableRenamePartition.java
│       │   │               │   │       ├── SQLAlterTableRepairPartition.java
│       │   │               │   │       ├── SQLAlterTableReplaceColumn.java
│       │   │               │   │       ├── SQLAlterTableSetComment.java
│       │   │               │   │       ├── SQLAlterTableSetFileFormat.java
│       │   │               │   │       ├── SQLAlterTableSetLifecycle.java
│       │   │               │   │       ├── SQLAlterTableSetLocation.java
│       │   │               │   │       ├── SQLAlterTableSetOption.java
│       │   │               │   │       ├── SQLAlterTableSetSchema.java
│       │   │               │   │       ├── SQLAlterTableSetSerde.java
│       │   │               │   │       ├── SQLAlterTableSetSerdeProperties.java
│       │   │               │   │       ├── SQLAlterTableSetTableSpace.java
│       │   │               │   │       ├── SQLAlterTableStatement.java
│       │   │               │   │       ├── SQLAlterTableSubpartitionAvailablePartitionNum.java
│       │   │               │   │       ├── SQLAlterTableSubpartitionLifecycle.java
│       │   │               │   │       ├── SQLAlterTableTouch.java
│       │   │               │   │       ├── SQLAlterTableTruncatePartition.java
│       │   │               │   │       ├── SQLAlterTableUnarchivePartition.java
│       │   │               │   │       ├── SQLAlterTableValidateConstraint.java
│       │   │               │   │       ├── SQLAlterTypeStatement.java
│       │   │               │   │       ├── SQLAlterViewRenameStatement.java
│       │   │               │   │       ├── SQLAlterViewStatement.java
│       │   │               │   │       ├── SQLAnalyzeTableStatement.java
│       │   │               │   │       ├── SQLArchiveTableStatement.java
│       │   │               │   │       ├── SQLAssignItem.java
│       │   │               │   │       ├── SQLBackupStatement.java
│       │   │               │   │       ├── SQLBeginStatement.java
│       │   │               │   │       ├── SQLBlockStatement.java
│       │   │               │   │       ├── SQLBreakStatement.java
│       │   │               │   │       ├── SQLBuildTableStatement.java
│       │   │               │   │       ├── SQLCallStatement.java
│       │   │               │   │       ├── SQLCancelJobStatement.java
│       │   │               │   │       ├── SQLCharacterDataType.java
│       │   │               │   │       ├── SQLCheck.java
│       │   │               │   │       ├── SQLCloneTableStatement.java
│       │   │               │   │       ├── SQLCloseStatement.java
│       │   │               │   │       ├── SQLColumnCheck.java
│       │   │               │   │       ├── SQLColumnConstraint.java
│       │   │               │   │       ├── SQLColumnDefault.java
│       │   │               │   │       ├── SQLColumnDefinition.java
│       │   │               │   │       ├── SQLColumnPrimaryKey.java
│       │   │               │   │       ├── SQLColumnReference.java
│       │   │               │   │       ├── SQLColumnUniqueKey.java
│       │   │               │   │       ├── SQLCommentStatement.java
│       │   │               │   │       ├── SQLCommitStatement.java
│       │   │               │   │       ├── SQLCommitTransactionStatement.java
│       │   │               │   │       ├── SQLConstraint.java
│       │   │               │   │       ├── SQLConstraintImpl.java
│       │   │               │   │       ├── SQLContinueStatement.java
│       │   │               │   │       ├── SQLCopyFromStatement.java
│       │   │               │   │       ├── SQLCostStatement.java
│       │   │               │   │       ├── SQLCreateDatabaseStatement.java
│       │   │               │   │       ├── SQLCreateFunctionStatement.java
│       │   │               │   │       ├── SQLCreateIndexStatement.java
│       │   │               │   │       ├── SQLCreateMaterializedViewStatement.java
│       │   │               │   │       ├── SQLCreateOutlineStatement.java
│       │   │               │   │       ├── SQLCreateProcedureStatement.java
│       │   │               │   │       ├── SQLCreateRoleStatement.java
│       │   │               │   │       ├── SQLCreateSequenceStatement.java
│       │   │               │   │       ├── SQLCreateStatement.java
│       │   │               │   │       ├── SQLCreateTableGroupStatement.java
│       │   │               │   │       ├── SQLCreateTableStatement.java
│       │   │               │   │       ├── SQLCreateTriggerStatement.java
│       │   │               │   │       ├── SQLCreateUserStatement.java
│       │   │               │   │       ├── SQLCreateViewStatement.java
│       │   │               │   │       ├── SQLDDLStatement.java
│       │   │               │   │       ├── SQLDeclareStatement.java
│       │   │               │   │       ├── SQLDefault.java
│       │   │               │   │       ├── SQLDeleteStatement.java
│       │   │               │   │       ├── SQLDescribeStatement.java
│       │   │               │   │       ├── SQLDropCatalogStatement.java
│       │   │               │   │       ├── SQLDropDatabaseStatement.java
│       │   │               │   │       ├── SQLDropEventStatement.java
│       │   │               │   │       ├── SQLDropFunctionStatement.java
│       │   │               │   │       ├── SQLDropIndexStatement.java
│       │   │               │   │       ├── SQLDropLogFileGroupStatement.java
│       │   │               │   │       ├── SQLDropMaterializedViewStatement.java
│       │   │               │   │       ├── SQLDropOfflineModelStatement.java
│       │   │               │   │       ├── SQLDropOutlineStatement.java
│       │   │               │   │       ├── SQLDropProcedureStatement.java
│       │   │               │   │       ├── SQLDropResourceGroupStatement.java
│       │   │               │   │       ├── SQLDropResourceStatement.java
│       │   │               │   │       ├── SQLDropRoleStatement.java
│       │   │               │   │       ├── SQLDropSequenceStatement.java
│       │   │               │   │       ├── SQLDropServerStatement.java
│       │   │               │   │       ├── SQLDropStatement.java
│       │   │               │   │       ├── SQLDropSynonymStatement.java
│       │   │               │   │       ├── SQLDropTableGroupStatement.java
│       │   │               │   │       ├── SQLDropTableSpaceStatement.java
│       │   │               │   │       ├── SQLDropTableStatement.java
│       │   │               │   │       ├── SQLDropTriggerStatement.java
│       │   │               │   │       ├── SQLDropTypeStatement.java
│       │   │               │   │       ├── SQLDropUserStatement.java
│       │   │               │   │       ├── SQLDropViewStatement.java
│       │   │               │   │       ├── SQLDumpStatement.java
│       │   │               │   │       ├── SQLErrorLoggingClause.java
│       │   │               │   │       ├── SQLExceptionStatement.java
│       │   │               │   │       ├── SQLExecuteImmediateStatement.java
│       │   │               │   │       ├── SQLExplainAnalyzeStatement.java
│       │   │               │   │       ├── SQLExplainStatement.java
│       │   │               │   │       ├── SQLExportDatabaseStatement.java
│       │   │               │   │       ├── SQLExportTableStatement.java
│       │   │               │   │       ├── SQLExprHint.java
│       │   │               │   │       ├── SQLExprStatement.java
│       │   │               │   │       ├── SQLExprTableSource.java
│       │   │               │   │       ├── SQLExternalRecordFormat.java
│       │   │               │   │       ├── SQLFetchStatement.java
│       │   │               │   │       ├── SQLForStatement.java
│       │   │               │   │       ├── SQLForeignKeyConstraint.java
│       │   │               │   │       ├── SQLForeignKeyImpl.java
│       │   │               │   │       ├── SQLGeneratedTableSource.java
│       │   │               │   │       ├── SQLGetDiagnosticsStatement.java
│       │   │               │   │       ├── SQLGrantStatement.java
│       │   │               │   │       ├── SQLIfStatement.java
│       │   │               │   │       ├── SQLImportDatabaseStatement.java
│       │   │               │   │       ├── SQLImportTableStatement.java
│       │   │               │   │       ├── SQLInsertInto.java
│       │   │               │   │       ├── SQLInsertStatement.java
│       │   │               │   │       ├── SQLJoinTableSource.java
│       │   │               │   │       ├── SQLLateralViewTableSource.java
│       │   │               │   │       ├── SQLLeaveStatement.java
│       │   │               │   │       ├── SQLLockTableStatement.java
│       │   │               │   │       ├── SQLLoopStatement.java
│       │   │               │   │       ├── SQLMergeStatement.java
│       │   │               │   │       ├── SQLNotNullConstraint.java
│       │   │               │   │       ├── SQLNullConstraint.java
│       │   │               │   │       ├── SQLObjectType.java
│       │   │               │   │       ├── SQLOpenStatement.java
│       │   │               │   │       ├── SQLOptimizeStatement.java
│       │   │               │   │       ├── SQLPartitionRef.java
│       │   │               │   │       ├── SQLPrimaryKey.java
│       │   │               │   │       ├── SQLPrimaryKeyImpl.java
│       │   │               │   │       ├── SQLPrivilegeItem.java
│       │   │               │   │       ├── SQLPrivilegeStatement.java
│       │   │               │   │       ├── SQLPurgeLogsStatement.java
│       │   │               │   │       ├── SQLPurgeRecyclebinStatement.java
│       │   │               │   │       ├── SQLPurgeTableStatement.java
│       │   │               │   │       ├── SQLPurgeTemporaryOutputStatement.java
│       │   │               │   │       ├── SQLRaiseStatement.java
│       │   │               │   │       ├── SQLRefreshMaterializedViewStatement.java
│       │   │               │   │       ├── SQLRefreshTableStatement.java
│       │   │               │   │       ├── SQLReleaseSavePointStatement.java
│       │   │               │   │       ├── SQLRenameUserStatement.java
│       │   │               │   │       ├── SQLReplaceStatement.java
│       │   │               │   │       ├── SQLRestoreStatement.java
│       │   │               │   │       ├── SQLReturnStatement.java
│       │   │               │   │       ├── SQLRevokeStatement.java
│       │   │               │   │       ├── SQLRollbackStatement.java
│       │   │               │   │       ├── SQLRollbackTransactionStatement.java
│       │   │               │   │       ├── SQLSavePointStatement.java
│       │   │               │   │       ├── SQLScriptCommitStatement.java
│       │   │               │   │       ├── SQLSelect.java
│       │   │               │   │       ├── SQLSelectGroupByClause.java
│       │   │               │   │       ├── SQLSelectItem.java
│       │   │               │   │       ├── SQLSelectOrderByItem.java
│       │   │               │   │       ├── SQLSelectQuery.java
│       │   │               │   │       ├── SQLSelectQueryBase.java
│       │   │               │   │       ├── SQLSelectQueryBlock.java
│       │   │               │   │       ├── SQLSelectStatement.java
│       │   │               │   │       ├── SQLSetStatement.java
│       │   │               │   │       ├── SQLShowACLStatement.java
│       │   │               │   │       ├── SQLShowCatalogsStatement.java
│       │   │               │   │       ├── SQLShowColumnsStatement.java
│       │   │               │   │       ├── SQLShowCreateMaterializedViewStatement.java
│       │   │               │   │       ├── SQLShowCreateTableStatement.java
│       │   │               │   │       ├── SQLShowCreateViewStatement.java
│       │   │               │   │       ├── SQLShowDatabasesStatement.java
│       │   │               │   │       ├── SQLShowErrorsStatement.java
│       │   │               │   │       ├── SQLShowFunctionsStatement.java
│       │   │               │   │       ├── SQLShowGrantsStatement.java
│       │   │               │   │       ├── SQLShowHistoryStatement.java
│       │   │               │   │       ├── SQLShowIndexesStatement.java
│       │   │               │   │       ├── SQLShowMaterializedViewStatement.java
│       │   │               │   │       ├── SQLShowOutlinesStatement.java
│       │   │               │   │       ├── SQLShowPackagesStatement.java
│       │   │               │   │       ├── SQLShowPartitionsStmt.java
│       │   │               │   │       ├── SQLShowProcessListStatement.java
│       │   │               │   │       ├── SQLShowQueryTaskStatement.java
│       │   │               │   │       ├── SQLShowRecylebinStatement.java
│       │   │               │   │       ├── SQLShowRoleStatement.java
│       │   │               │   │       ├── SQLShowRolesStatement.java
│       │   │               │   │       ├── SQLShowSessionStatement.java
│       │   │               │   │       ├── SQLShowStatement.java
│       │   │               │   │       ├── SQLShowStatisticListStmt.java
│       │   │               │   │       ├── SQLShowStatisticStmt.java
│       │   │               │   │       ├── SQLShowTableGroupsStatement.java
│       │   │               │   │       ├── SQLShowTablesStatement.java
│       │   │               │   │       ├── SQLShowUsersStatement.java
│       │   │               │   │       ├── SQLShowVariantsStatement.java
│       │   │               │   │       ├── SQLShowViewsStatement.java
│       │   │               │   │       ├── SQLStartTransactionStatement.java
│       │   │               │   │       ├── SQLSubmitJobStatement.java
│       │   │               │   │       ├── SQLSubqueryTableSource.java
│       │   │               │   │       ├── SQLSyncMetaStatement.java
│       │   │               │   │       ├── SQLTableConstraint.java
│       │   │               │   │       ├── SQLTableElement.java
│       │   │               │   │       ├── SQLTableLike.java
│       │   │               │   │       ├── SQLTableSampling.java
│       │   │               │   │       ├── SQLTableSource.java
│       │   │               │   │       ├── SQLTableSourceImpl.java
│       │   │               │   │       ├── SQLTruncateStatement.java
│       │   │               │   │       ├── SQLUnionOperator.java
│       │   │               │   │       ├── SQLUnionQuery.java
│       │   │               │   │       ├── SQLUnionQueryTableSource.java
│       │   │               │   │       ├── SQLUnique.java
│       │   │               │   │       ├── SQLUniqueConstraint.java
│       │   │               │   │       ├── SQLUnnestTableSource.java
│       │   │               │   │       ├── SQLUpdateSetItem.java
│       │   │               │   │       ├── SQLUpdateStatement.java
│       │   │               │   │       ├── SQLUseStatement.java
│       │   │               │   │       ├── SQLValuesQuery.java
│       │   │               │   │       ├── SQLValuesTableSource.java
│       │   │               │   │       ├── SQLWhileStatement.java
│       │   │               │   │       ├── SQLWhoamiStatement.java
│       │   │               │   │       └── SQLWithSubqueryClause.java
│       │   │               │   ├── builder/
│       │   │               │   │   ├── SQLBuilder.java
│       │   │               │   │   ├── SQLBuilderFactory.java
│       │   │               │   │   ├── SQLDeleteBuilder.java
│       │   │               │   │   ├── SQLFunctionBuilder.java
│       │   │               │   │   ├── SQLSelectBuilder.java
│       │   │               │   │   ├── SQLUpdateBuilder.java
│       │   │               │   │   ├── UpdateBuilder.java
│       │   │               │   │   └── impl/
│       │   │               │   │       ├── SQLBuilderImpl.java
│       │   │               │   │       ├── SQLDeleteBuilderImpl.java
│       │   │               │   │       ├── SQLSelectBuilderImpl.java
│       │   │               │   │       └── SQLUpdateBuilderImpl.java
│       │   │               │   ├── dialect/
│       │   │               │   │   ├── athena/
│       │   │               │   │   │   ├── Athena.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── AthenaObject.java
│       │   │               │   │   │   │   └── stmt/
│       │   │               │   │   │   │       └── AthenaCreateTableStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── AthenaCreateTableParser.java
│       │   │               │   │   │   │   ├── AthenaExprParser.java
│       │   │               │   │   │   │   ├── AthenaLexer.java
│       │   │               │   │   │   │   ├── AthenaSelectParser.java
│       │   │               │   │   │   │   └── AthenaStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── AthenaASTVisitor.java
│       │   │               │   │   │       └── AthenaOutputVisitor.java
│       │   │               │   │   ├── bigquery/
│       │   │               │   │   │   ├── BQ.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── BigQueryAssertStatement.java
│       │   │               │   │   │   │   ├── BigQueryCharExpr.java
│       │   │               │   │   │   │   ├── BigQueryCreateModelStatement.java
│       │   │               │   │   │   │   ├── BigQueryCreateTableStatement.java
│       │   │               │   │   │   │   ├── BigQueryExecuteImmediateStatement.java
│       │   │               │   │   │   │   ├── BigQueryExportDataStatement.java
│       │   │               │   │   │   │   ├── BigQueryModelExpr.java
│       │   │               │   │   │   │   ├── BigQueryObject.java
│       │   │               │   │   │   │   ├── BigQuerySelectQueryBlock.java
│       │   │               │   │   │   │   └── BigQueryTableExpr.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── BigQueryCreateTableParser.java
│       │   │               │   │   │   │   ├── BigQueryExprParser.java
│       │   │               │   │   │   │   ├── BigQueryLexer.java
│       │   │               │   │   │   │   ├── BigQuerySelectParser.java
│       │   │               │   │   │   │   └── BigQueryStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── BigQueryASTVisitorAdapter.java
│       │   │               │   │   │       ├── BigQueryOutputVisitor.java
│       │   │               │   │   │       ├── BigQuerySchemaStatVisitor.java
│       │   │               │   │   │       └── BigQueryVisitor.java
│       │   │               │   │   ├── blink/
│       │   │               │   │   │   ├── Blink.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   └── BlinkCreateTableStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── BlinkCreateTableParser.java
│       │   │               │   │   │   │   ├── BlinkExprParser.java
│       │   │               │   │   │   │   ├── BlinkLexer.java
│       │   │               │   │   │   │   └── BlinkStatementParser.java
│       │   │               │   │   │   └── vsitor/
│       │   │               │   │   │       ├── BlinkOutputVisitor.java
│       │   │               │   │   │       └── BlinkVisitor.java
│       │   │               │   │   ├── clickhouse/
│       │   │               │   │   │   ├── CK.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── CKAlterTableStatement.java
│       │   │               │   │   │   │   ├── CKAlterTableUpdateStatement.java
│       │   │               │   │   │   │   ├── CKCreateMaterializedViewStatement.java
│       │   │               │   │   │   │   ├── CKCreateTableStatement.java
│       │   │               │   │   │   │   ├── CKDropTableStatement.java
│       │   │               │   │   │   │   ├── CKSelectQueryBlock.java
│       │   │               │   │   │   │   ├── ClickhouseColumnCodec.java
│       │   │               │   │   │   │   ├── ClickhouseColumnConstraint.java
│       │   │               │   │   │   │   └── ClickhouseColumnTTL.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── CKCreateTableParser.java
│       │   │               │   │   │   │   ├── CKExprParser.java
│       │   │               │   │   │   │   ├── CKLexer.java
│       │   │               │   │   │   │   ├── CKSelectParser.java
│       │   │               │   │   │   │   └── CKStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── CKASTVisitor.java
│       │   │               │   │   │       ├── CKExportParameterVisitor.java
│       │   │               │   │   │       ├── CKOutputVisitor.java
│       │   │               │   │   │       └── CKStatVisitor.java
│       │   │               │   │   ├── databricks/
│       │   │               │   │   │   ├── DataBricks.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── DatabricksCreateTableParser.java
│       │   │               │   │   │   │   ├── DatabricksExprParser.java
│       │   │               │   │   │   │   ├── DatabricksLexer.java
│       │   │               │   │   │   │   ├── DatabricksSelectParser.java
│       │   │               │   │   │   │   └── DatabricksStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── DatabricksASTASTVisitor.java
│       │   │               │   │   │       └── DatabricksOutputASTVisitor.java
│       │   │               │   │   ├── db2/
│       │   │               │   │   │   ├── Db2.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── DB2IntermediateResultTableSource.java
│       │   │               │   │   │   │   ├── DB2Object.java
│       │   │               │   │   │   │   ├── DB2Statement.java
│       │   │               │   │   │   │   ├── DB2StatementImpl.java
│       │   │               │   │   │   │   └── stmt/
│       │   │               │   │   │   │       ├── DB2CreateSchemaStatement.java
│       │   │               │   │   │   │       ├── DB2CreateTableStatement.java
│       │   │               │   │   │   │       ├── DB2DropSchemaStatement.java
│       │   │               │   │   │   │       ├── DB2SelectQueryBlock.java
│       │   │               │   │   │   │       └── DB2ValuesStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── DB2CreateTableParser.java
│       │   │               │   │   │   │   ├── DB2ExprParser.java
│       │   │               │   │   │   │   ├── DB2Lexer.java
│       │   │               │   │   │   │   ├── DB2SelectParser.java
│       │   │               │   │   │   │   └── DB2StatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── DB2ASTVisitor.java
│       │   │               │   │   │       ├── DB2ASTVisitorAdapter.java
│       │   │               │   │   │       ├── DB2EvalVisitor.java
│       │   │               │   │   │       ├── DB2ExportParameterVisitor.java
│       │   │               │   │   │       ├── DB2OutputVisitor.java
│       │   │               │   │   │       └── DB2SchemaStatVisitor.java
│       │   │               │   │   ├── dm/
│       │   │               │   │   │   ├── Dm.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── DmObject.java
│       │   │               │   │   │   │   ├── DmObjectImpl.java
│       │   │               │   │   │   │   └── stmt/
│       │   │               │   │   │   │       ├── DmDeleteStatement.java
│       │   │               │   │   │   │       ├── DmInsertStatement.java
│       │   │               │   │   │   │       ├── DmSelectQueryBlock.java
│       │   │               │   │   │   │       ├── DmSelectStatement.java
│       │   │               │   │   │   │       └── DmUpdateStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── DmCreateTableParser.java
│       │   │               │   │   │   │   ├── DmExprParser.java
│       │   │               │   │   │   │   ├── DmLexer.java
│       │   │               │   │   │   │   ├── DmSelectParser.java
│       │   │               │   │   │   │   └── DmStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── DmASTVisitor.java
│       │   │               │   │   │       ├── DmOutputVisitor.java
│       │   │               │   │   │       └── DmSchemaStatVisitor.java
│       │   │               │   │   ├── doris/
│       │   │               │   │   │   ├── Doris.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── DorisExprTableSource.java
│       │   │               │   │   │   │   ├── DorisObject.java
│       │   │               │   │   │   │   └── DorisObjectImpl.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── DorisCreateTableParser.java
│       │   │               │   │   │   │   ├── DorisExprParser.java
│       │   │               │   │   │   │   ├── DorisLexer.java
│       │   │               │   │   │   │   ├── DorisSelectParser.java
│       │   │               │   │   │   │   └── DorisStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── DorisASTVisitor.java
│       │   │               │   │   │       └── DorisOutputVisitor.java
│       │   │               │   │   ├── gaussdb/
│       │   │               │   │   │   ├── GaussDb.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── GaussDbDistributeBy.java
│       │   │               │   │   │   │   ├── GaussDbObject.java
│       │   │               │   │   │   │   ├── GaussDbObjectImpl.java
│       │   │               │   │   │   │   ├── GaussDbPartitionValue.java
│       │   │               │   │   │   │   └── stmt/
│       │   │               │   │   │   │       ├── GaussDbCreateTableStatement.java
│       │   │               │   │   │   │       └── GaussDbInsertStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── GaussDbCreateTableParser.java
│       │   │               │   │   │   │   ├── GaussDbExprParser.java
│       │   │               │   │   │   │   ├── GaussDbLexer.java
│       │   │               │   │   │   │   └── GaussDbStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── GaussDbASTVisitor.java
│       │   │               │   │   │       └── GaussDbOutputVisitor.java
│       │   │               │   │   ├── h2/
│       │   │               │   │   │   ├── H2.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── H2ExprParser.java
│       │   │               │   │   │   │   ├── H2Lexer.java
│       │   │               │   │   │   │   ├── H2SelectParser.java
│       │   │               │   │   │   │   └── H2StatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── H2ASTVisitor.java
│       │   │               │   │   │       ├── H2ASTVisitorAdapter.java
│       │   │               │   │   │       ├── H2EvalVisitor.java
│       │   │               │   │   │       ├── H2OutputVisitor.java
│       │   │               │   │   │       └── H2SchemaStatVisitor.java
│       │   │               │   │   ├── hive/
│       │   │               │   │   │   ├── Hive.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── HiveAddJarStatement.java
│       │   │               │   │   │   │   ├── HiveInputOutputFormat.java
│       │   │               │   │   │   │   ├── HiveInsert.java
│       │   │               │   │   │   │   ├── HiveInsertStatement.java
│       │   │               │   │   │   │   └── HiveMultiInsertStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── HiveCreateTableParser.java
│       │   │               │   │   │   │   ├── HiveExprParser.java
│       │   │               │   │   │   │   ├── HiveLexer.java
│       │   │               │   │   │   │   ├── HiveSelectParser.java
│       │   │               │   │   │   │   └── HiveStatementParser.java
│       │   │               │   │   │   ├── stmt/
│       │   │               │   │   │   │   ├── HiveCreateFunctionStatement.java
│       │   │               │   │   │   │   ├── HiveCreateTableStatement.java
│       │   │               │   │   │   │   ├── HiveLoadDataStatement.java
│       │   │               │   │   │   │   └── HiveMsckRepairStatement.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── HiveASTVisitor.java
│       │   │               │   │   │       ├── HiveASTVisitorAdapter.java
│       │   │               │   │   │       ├── HiveOutputVisitor.java
│       │   │               │   │   │       └── HiveSchemaStatVisitor.java
│       │   │               │   │   ├── hologres/
│       │   │               │   │   │   ├── Hologres.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── HologresCreateTableParser.java
│       │   │               │   │   │   │   ├── HologresExprParser.java
│       │   │               │   │   │   │   ├── HologresLexer.java
│       │   │               │   │   │   │   ├── HologresSelectParser.java
│       │   │               │   │   │   │   └── HologresStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       └── HologresOutputVisitor.java
│       │   │               │   │   ├── impala/
│       │   │               │   │   │   ├── Impala.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   └── ImpalaSQLPartitionValue.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── ImpalaCreateTableParser.java
│       │   │               │   │   │   │   ├── ImpalaExprParser.java
│       │   │               │   │   │   │   ├── ImpalaLexer.java
│       │   │               │   │   │   │   ├── ImpalaSelectParser.java
│       │   │               │   │   │   │   └── ImpalaStatementParser.java
│       │   │               │   │   │   ├── stmt/
│       │   │               │   │   │   │   ├── ImpalaCreateTableStatement.java
│       │   │               │   │   │   │   └── ImpalaInsertStatement.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── ImpalaASTVisitor.java
│       │   │               │   │   │       └── ImpalaOutputVisitor.java
│       │   │               │   │   ├── informix/
│       │   │               │   │   │   ├── Informix.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── InformixSelectParser.java
│       │   │               │   │   │   │   └── InformixStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       └── InformixOutputVisitor.java
│       │   │               │   │   ├── mysql/
│       │   │               │   │   │   ├── MySQL.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── AnalyzerIndexType.java
│       │   │               │   │   │   │   ├── FullTextType.java
│       │   │               │   │   │   │   ├── MySqlForceIndexHint.java
│       │   │               │   │   │   │   ├── MySqlHint.java
│       │   │               │   │   │   │   ├── MySqlIgnoreIndexHint.java
│       │   │               │   │   │   │   ├── MySqlIndexHint.java
│       │   │               │   │   │   │   ├── MySqlIndexHintImpl.java
│       │   │               │   │   │   │   ├── MySqlKey.java
│       │   │               │   │   │   │   ├── MySqlObject.java
│       │   │               │   │   │   │   ├── MySqlObjectImpl.java
│       │   │               │   │   │   │   ├── MySqlPrimaryKey.java
│       │   │               │   │   │   │   ├── MySqlUnique.java
│       │   │               │   │   │   │   ├── MySqlUseIndexHint.java
│       │   │               │   │   │   │   ├── MysqlForeignKey.java
│       │   │               │   │   │   │   ├── MysqlPartitionSingle.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
│       │   │               │   │   │   │   │   ├── MySqlJSONTableExpr.java
│       │   │               │   │   │   │   │   ├── MySqlOrderingExpr.java
│       │   │               │   │   │   │   │   ├── MySqlOutFileExpr.java
│       │   │               │   │   │   │   │   └── MySqlUserName.java
│       │   │               │   │   │   │   └── statement/
│       │   │               │   │   │   │       ├── CobarShowStatus.java
│       │   │               │   │   │   │       ├── DrdsBaselineStatement.java
│       │   │               │   │   │   │       ├── DrdsCancelDDLJob.java
│       │   │               │   │   │   │       ├── DrdsChangeDDLJob.java
│       │   │               │   │   │   │       ├── DrdsClearDDLJobCache.java
│       │   │               │   │   │   │       ├── DrdsInspectDDLJobCache.java
│       │   │               │   │   │   │       ├── DrdsRecoverDDLJob.java
│       │   │               │   │   │   │       ├── DrdsRemoveDDLJob.java
│       │   │               │   │   │   │       ├── DrdsRollbackDDLJob.java
│       │   │               │   │   │   │       ├── DrdsShowDDLJobs.java
│       │   │               │   │   │   │       ├── DrdsShowGlobalIndex.java
│       │   │               │   │   │   │       ├── DrdsShowMetadataLock.java
│       │   │               │   │   │   │       ├── MySqlAlterDatabaseKillJob.java
│       │   │               │   │   │   │       ├── MySqlAlterDatabaseSetOption.java
│       │   │               │   │   │   │       ├── MySqlAlterEventStatement.java
│       │   │               │   │   │   │       ├── MySqlAlterLogFileGroupStatement.java
│       │   │               │   │   │   │       ├── MySqlAlterServerStatement.java
│       │   │               │   │   │   │       ├── MySqlAlterTableAlgorithm.java
│       │   │               │   │   │   │       ├── MySqlAlterTableAlterColumn.java
│       │   │               │   │   │   │       ├── MySqlAlterTableAlterFullTextIndex.java
│       │   │               │   │   │   │       ├── MySqlAlterTableChangeColumn.java
│       │   │               │   │   │   │       ├── MySqlAlterTableDiscardTablespace.java
│       │   │               │   │   │   │       ├── MySqlAlterTableForce.java
│       │   │               │   │   │   │       ├── MySqlAlterTableImportTablespace.java
│       │   │               │   │   │   │       ├── MySqlAlterTableLock.java
│       │   │               │   │   │   │       ├── MySqlAlterTableModifyColumn.java
│       │   │               │   │   │   │       ├── MySqlAlterTableOption.java
│       │   │               │   │   │   │       ├── MySqlAlterTableOrderBy.java
│       │   │               │   │   │   │       ├── MySqlAlterTableValidation.java
│       │   │               │   │   │   │       ├── MySqlAlterTablespaceStatement.java
│       │   │               │   │   │   │       ├── MySqlAlterUserStatement.java
│       │   │               │   │   │   │       ├── MySqlAnalyzeStatement.java
│       │   │               │   │   │   │       ├── MySqlBinlogStatement.java
│       │   │               │   │   │   │       ├── MySqlCheckTableStatement.java
│       │   │               │   │   │   │       ├── MySqlChecksumTableStatement.java
│       │   │               │   │   │   │       ├── MySqlClearPlanCacheStatement.java
│       │   │               │   │   │   │       ├── MySqlCreateAddLogFileGroupStatement.java
│       │   │               │   │   │   │       ├── MySqlCreateEventStatement.java
│       │   │               │   │   │   │       ├── MySqlCreateExternalCatalogStatement.java
│       │   │               │   │   │   │       ├── MySqlCreateServerStatement.java
│       │   │               │   │   │   │       ├── MySqlCreateTableSpaceStatement.java
│       │   │               │   │   │   │       ├── MySqlCreateTableStatement.java
│       │   │               │   │   │   │       ├── MySqlCreateUserStatement.java
│       │   │               │   │   │   │       ├── MySqlDeleteStatement.java
│       │   │               │   │   │   │       ├── MySqlDisabledPlanCacheStatement.java
│       │   │               │   │   │   │       ├── MySqlEventSchedule.java
│       │   │               │   │   │   │       ├── MySqlExecuteForAdsStatement.java
│       │   │               │   │   │   │       ├── MySqlExecuteStatement.java
│       │   │               │   │   │   │       ├── MySqlExplainPlanCacheStatement.java
│       │   │               │   │   │   │       ├── MySqlExplainStatement.java
│       │   │               │   │   │   │       ├── MySqlExtPartition.java
│       │   │               │   │   │   │       ├── MySqlFlashbackStatement.java
│       │   │               │   │   │   │       ├── MySqlFlushStatement.java
│       │   │               │   │   │   │       ├── MySqlHelpStatement.java
│       │   │               │   │   │   │       ├── MySqlHintStatement.java
│       │   │               │   │   │   │       ├── MySqlInsertStatement.java
│       │   │               │   │   │   │       ├── MySqlKillStatement.java
│       │   │               │   │   │   │       ├── MySqlLoadDataInFileStatement.java
│       │   │               │   │   │   │       ├── MySqlLoadXmlStatement.java
│       │   │               │   │   │   │       ├── MySqlLockTableStatement.java
│       │   │               │   │   │   │       ├── MySqlManageInstanceGroupStatement.java
│       │   │               │   │   │   │       ├── MySqlMigrateStatement.java
│       │   │               │   │   │   │       ├── MySqlOptimizeStatement.java
│       │   │               │   │   │   │       ├── MySqlPartitionByKey.java
│       │   │               │   │   │   │       ├── MySqlPrepareStatement.java
│       │   │               │   │   │   │       ├── MySqlRaftLeaderTransferStatement.java
│       │   │               │   │   │   │       ├── MySqlRaftMemberChangeStatement.java
│       │   │               │   │   │   │       ├── MySqlRenameSequenceStatement.java
│       │   │               │   │   │   │       ├── MySqlRenameTableStatement.java
│       │   │               │   │   │   │       ├── MySqlSelectQueryBlock.java
│       │   │               │   │   │   │       ├── MySqlSetTransactionStatement.java
│       │   │               │   │   │   │       ├── MySqlShowAuthorsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowBinLogEventsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowBinaryLogsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowBroadcastsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowCharacterSetStatement.java
│       │   │               │   │   │   │       ├── MySqlShowClusterNameStatement.java
│       │   │               │   │   │   │       ├── MySqlShowCollationStatement.java
│       │   │               │   │   │   │       ├── MySqlShowConfigStatement.java
│       │   │               │   │   │   │       ├── MySqlShowContributorsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowCreateDatabaseStatement.java
│       │   │               │   │   │   │       ├── MySqlShowCreateEventStatement.java
│       │   │               │   │   │   │       ├── MySqlShowCreateFunctionStatement.java
│       │   │               │   │   │   │       ├── MySqlShowCreateProcedureStatement.java
│       │   │               │   │   │   │       ├── MySqlShowCreateTriggerStatement.java
│       │   │               │   │   │   │       ├── MySqlShowDatabaseStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowDatasourcesStatement.java
│       │   │               │   │   │   │       ├── MySqlShowDdlStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowDsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowEngineStatement.java
│       │   │               │   │   │   │       ├── MySqlShowEnginesStatement.java
│       │   │               │   │   │   │       ├── MySqlShowErrorsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowEventsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowFunctionCodeStatement.java
│       │   │               │   │   │   │       ├── MySqlShowFunctionStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowGrantsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowHMSMetaStatement.java
│       │   │               │   │   │   │       ├── MySqlShowHelpStatement.java
│       │   │               │   │   │   │       ├── MySqlShowJobStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowMasterLogsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowMasterStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowMigrateTaskStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowNodeStatement.java
│       │   │               │   │   │   │       ├── MySqlShowOpenTablesStatement.java
│       │   │               │   │   │   │       ├── MySqlShowPartitionsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowPhysicalProcesslistStatement.java
│       │   │               │   │   │   │       ├── MySqlShowPlanCacheStatement.java
│       │   │               │   │   │   │       ├── MySqlShowPlanCacheStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowPluginsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowPrivilegesStatement.java
│       │   │               │   │   │   │       ├── MySqlShowProcedureCodeStatement.java
│       │   │               │   │   │   │       ├── MySqlShowProcedureStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowProcessListStatement.java
│       │   │               │   │   │   │       ├── MySqlShowProfileStatement.java
│       │   │               │   │   │   │       ├── MySqlShowProfilesStatement.java
│       │   │               │   │   │   │       ├── MySqlShowRelayLogEventsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowRuleStatement.java
│       │   │               │   │   │   │       ├── MySqlShowRuleStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowSequencesStatement.java
│       │   │               │   │   │   │       ├── MySqlShowSlaveHostsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowSlaveStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowSlowStatement.java
│       │   │               │   │   │   │       ├── MySqlShowStatement.java
│       │   │               │   │   │   │       ├── MySqlShowStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowTableStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowTopologyStatement.java
│       │   │               │   │   │   │       ├── MySqlShowTraceStatement.java
│       │   │               │   │   │   │       ├── MySqlShowTriggersStatement.java
│       │   │               │   │   │   │       ├── MySqlShowWarningsStatement.java
│       │   │               │   │   │   │       ├── MySqlStatement.java
│       │   │               │   │   │   │       ├── MySqlStatementImpl.java
│       │   │               │   │   │   │       ├── MySqlSubPartitionByKey.java
│       │   │               │   │   │   │       ├── MySqlSubPartitionByList.java
│       │   │               │   │   │   │       ├── MySqlSubPartitionByValue.java
│       │   │               │   │   │   │       ├── MySqlTableIndex.java
│       │   │               │   │   │   │       ├── MySqlUnlockTablesStatement.java
│       │   │               │   │   │   │       ├── MySqlUpdatePlanCacheStatement.java
│       │   │               │   │   │   │       ├── MySqlUpdateStatement.java
│       │   │               │   │   │   │       ├── MySqlUpdateTableSource.java
│       │   │               │   │   │   │       ├── MySqlXAStatement.java
│       │   │               │   │   │   │       ├── MysqlAlterFullTextStatement.java
│       │   │               │   │   │   │       ├── MysqlAlterTableAlterCheck.java
│       │   │               │   │   │   │       ├── MysqlCreateFullTextAnalyzerStatement.java
│       │   │               │   │   │   │       ├── MysqlCreateFullTextCharFilterStatement.java
│       │   │               │   │   │   │       ├── MysqlCreateFullTextDictionaryStatement.java
│       │   │               │   │   │   │       ├── MysqlCreateFullTextTokenFilterStatement.java
│       │   │               │   │   │   │       ├── MysqlCreateFullTextTokenizerStatement.java
│       │   │               │   │   │   │       ├── MysqlDeallocatePrepareStatement.java
│       │   │               │   │   │   │       ├── MysqlDropFullTextStatement.java
│       │   │               │   │   │   │       ├── MysqlShowCreateFullTextStatement.java
│       │   │               │   │   │   │       ├── MysqlShowDbLockStatement.java
│       │   │               │   │   │   │       ├── MysqlShowFullTextStatement.java
│       │   │               │   │   │   │       ├── MysqlShowHtcStatement.java
│       │   │               │   │   │   │       ├── MysqlShowStcStatement.java
│       │   │               │   │   │   │       ├── SQLAlterResourceGroupStatement.java
│       │   │               │   │   │   │       ├── SQLCreateResourceGroupStatement.java
│       │   │               │   │   │   │       ├── SQLListResourceGroupStatement.java
│       │   │               │   │   │   │       └── TidbSplitTableStatement.java
│       │   │               │   │   │   ├── executor/
│       │   │               │   │   │   │   └── MySqlProcedureExecutor.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── MySqlCreateTableParser.java
│       │   │               │   │   │   │   ├── MySqlExprParser.java
│       │   │               │   │   │   │   ├── MySqlInsertReader.java
│       │   │               │   │   │   │   ├── MySqlLexer.java
│       │   │               │   │   │   │   ├── MySqlSelectIntoParser.java
│       │   │               │   │   │   │   ├── MySqlSelectParser.java
│       │   │               │   │   │   │   └── MySqlStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── MySqlASTVisitor.java
│       │   │               │   │   │       ├── MySqlASTVisitorAdapter.java
│       │   │               │   │   │       ├── MySqlEvalVisitorImpl.java
│       │   │               │   │   │       ├── MySqlExportParameterVisitor.java
│       │   │               │   │   │       ├── MySqlOutputVisitor.java
│       │   │               │   │   │       ├── MySqlParameterizedVisitor.java
│       │   │               │   │   │       ├── MySqlSchemaStatVisitor.java
│       │   │               │   │   │       ├── MySqlShowColumnOutpuVisitor.java
│       │   │               │   │   │       └── transform/
│       │   │               │   │   │           ├── FromSubqueryResolver.java
│       │   │               │   │   │           ├── NameResolveVisitor.java
│       │   │               │   │   │           └── OrderByResolve.java
│       │   │               │   │   ├── odps/
│       │   │               │   │   │   ├── Odps.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── OdpsAddAccountProviderStatement.java
│       │   │               │   │   │   │   ├── OdpsAddFileStatement.java
│       │   │               │   │   │   │   ├── OdpsAddStatisticStatement.java
│       │   │               │   │   │   │   ├── OdpsAddTableStatement.java
│       │   │               │   │   │   │   ├── OdpsAddUserStatement.java
│       │   │               │   │   │   │   ├── OdpsAlterTableChangeOwner.java
│       │   │               │   │   │   │   ├── OdpsAlterTableSetChangeLogs.java
│       │   │               │   │   │   │   ├── OdpsAlterTableSetFileFormat.java
│       │   │               │   │   │   │   ├── OdpsCopyStmt.java
│       │   │               │   │   │   │   ├── OdpsCountStatement.java
│       │   │               │   │   │   │   ├── OdpsCreateTableStatement.java
│       │   │               │   │   │   │   ├── OdpsDeclareVariableStatement.java
│       │   │               │   │   │   │   ├── OdpsExstoreStatement.java
│       │   │               │   │   │   │   ├── OdpsGrantStmt.java
│       │   │               │   │   │   │   ├── OdpsInstallPackageStatement.java
│       │   │               │   │   │   │   ├── OdpsListStmt.java
│       │   │               │   │   │   │   ├── OdpsNewExpr.java
│       │   │               │   │   │   │   ├── OdpsObject.java
│       │   │               │   │   │   │   ├── OdpsObjectImpl.java
│       │   │               │   │   │   │   ├── OdpsPAIStmt.java
│       │   │               │   │   │   │   ├── OdpsQueryAliasStatement.java
│       │   │               │   │   │   │   ├── OdpsReadStatement.java
│       │   │               │   │   │   │   ├── OdpsRemoveStatisticStatement.java
│       │   │               │   │   │   │   ├── OdpsRemoveUserStatement.java
│       │   │               │   │   │   │   ├── OdpsRestoreStatement.java
│       │   │               │   │   │   │   ├── OdpsSelectQueryBlock.java
│       │   │               │   │   │   │   ├── OdpsSetLabelStatement.java
│       │   │               │   │   │   │   ├── OdpsShowChangelogsStatement.java
│       │   │               │   │   │   │   ├── OdpsShowGrantsStmt.java
│       │   │               │   │   │   │   ├── OdpsStatementImpl.java
│       │   │               │   │   │   │   ├── OdpsStatisticClause.java
│       │   │               │   │   │   │   ├── OdpsTransformExpr.java
│       │   │               │   │   │   │   ├── OdpsUDTFSQLSelectItem.java
│       │   │               │   │   │   │   ├── OdpsUndoTableStatement.java
│       │   │               │   │   │   │   └── OdpsUnloadStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── OdpsCreateTableParser.java
│       │   │               │   │   │   │   ├── OdpsExprParser.java
│       │   │               │   │   │   │   ├── OdpsLexer.java
│       │   │               │   │   │   │   ├── OdpsSelectParser.java
│       │   │               │   │   │   │   └── OdpsStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── OdpsASTVisitor.java
│       │   │               │   │   │       ├── OdpsASTVisitorAdapter.java
│       │   │               │   │   │       ├── OdpsOutputVisitor.java
│       │   │               │   │   │       └── OdpsSchemaStatVisitor.java
│       │   │               │   │   ├── oracle/
│       │   │               │   │   │   ├── Oracle.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── OracleDataTypeIntervalDay.java
│       │   │               │   │   │   │   ├── OracleDataTypeIntervalYear.java
│       │   │               │   │   │   │   ├── OraclePartitionSingle.java
│       │   │               │   │   │   │   ├── OracleSQLObject.java
│       │   │               │   │   │   │   ├── OracleSQLObjectImpl.java
│       │   │               │   │   │   │   ├── OracleSegmentAttributes.java
│       │   │               │   │   │   │   ├── OracleSegmentAttributesImpl.java
│       │   │               │   │   │   │   ├── clause/
│       │   │               │   │   │   │   │   ├── CycleClause.java
│       │   │               │   │   │   │   │   ├── ModelClause.java
│       │   │               │   │   │   │   │   ├── OracleLobStorageClause.java
│       │   │               │   │   │   │   │   ├── OracleReturningClause.java
│       │   │               │   │   │   │   │   ├── OracleStorageClause.java
│       │   │               │   │   │   │   │   ├── OracleWithSubqueryEntry.java
│       │   │               │   │   │   │   │   ├── PartitionExtensionClause.java
│       │   │               │   │   │   │   │   ├── SampleClause.java
│       │   │               │   │   │   │   │   └── SearchClause.java
│       │   │               │   │   │   │   ├── expr/
│       │   │               │   │   │   │   │   ├── OracleAnalytic.java
│       │   │               │   │   │   │   │   ├── OracleAnalyticWindowing.java
│       │   │               │   │   │   │   │   ├── OracleArgumentExpr.java
│       │   │               │   │   │   │   │   ├── OracleBinaryDoubleExpr.java
│       │   │               │   │   │   │   │   ├── OracleBinaryFloatExpr.java
│       │   │               │   │   │   │   │   ├── OracleCursorExpr.java
│       │   │               │   │   │   │   │   ├── OracleDateTimeUnit.java
│       │   │               │   │   │   │   │   ├── OracleDatetimeExpr.java
│       │   │               │   │   │   │   │   ├── OracleExpr.java
│       │   │               │   │   │   │   │   ├── OracleIntervalExpr.java
│       │   │               │   │   │   │   │   ├── OracleIntervalType.java
│       │   │               │   │   │   │   │   ├── OracleIsOfTypeExpr.java
│       │   │               │   │   │   │   │   ├── OracleIsSetExpr.java
│       │   │               │   │   │   │   │   ├── OracleOuterExpr.java
│       │   │               │   │   │   │   │   ├── OracleRangeExpr.java
│       │   │               │   │   │   │   │   ├── OracleSysdateExpr.java
│       │   │               │   │   │   │   │   └── OracleTreatExpr.java
│       │   │               │   │   │   │   └── stmt/
│       │   │               │   │   │   │       ├── OracleAlterPackageStatement.java
│       │   │               │   │   │   │       ├── OracleAlterSessionStatement.java
│       │   │               │   │   │   │       ├── OracleAlterStatement.java
│       │   │               │   │   │   │       ├── OracleAlterSummaryStatement.java
│       │   │               │   │   │   │       ├── OracleAlterSynonymStatement.java
│       │   │               │   │   │   │       ├── OracleAlterTableDropPartition.java
│       │   │               │   │   │   │       ├── OracleAlterTableItem.java
│       │   │               │   │   │   │       ├── OracleAlterTableModify.java
│       │   │               │   │   │   │       ├── OracleAlterTableMoveTablespace.java
│       │   │               │   │   │   │       ├── OracleAlterTableRowMovement.java
│       │   │               │   │   │   │       ├── OracleAlterTableShrinkSpace.java
│       │   │               │   │   │   │       ├── OracleAlterTableSplitPartition.java
│       │   │               │   │   │   │       ├── OracleAlterTableTruncatePartition.java
│       │   │               │   │   │   │       ├── OracleAlterTablespaceAddDataFile.java
│       │   │               │   │   │   │       ├── OracleAlterTablespaceItem.java
│       │   │               │   │   │   │       ├── OracleAlterTablespaceStatement.java
│       │   │               │   │   │   │       ├── OracleAlterTriggerStatement.java
│       │   │               │   │   │   │       ├── OracleAlterViewStatement.java
│       │   │               │   │   │   │       ├── OracleCheck.java
│       │   │               │   │   │   │       ├── OracleConstraint.java
│       │   │               │   │   │   │       ├── OracleContinueStatement.java
│       │   │               │   │   │   │       ├── OracleCreateDatabaseDbLinkStatement.java
│       │   │               │   │   │   │       ├── OracleCreateIndexStatement.java
│       │   │               │   │   │   │       ├── OracleCreatePackageStatement.java
│       │   │               │   │   │   │       ├── OracleCreateSynonymStatement.java
│       │   │               │   │   │   │       ├── OracleCreateTableSpaceStatement.java
│       │   │               │   │   │   │       ├── OracleCreateTableStatement.java
│       │   │               │   │   │   │       ├── OracleCreateTypeStatement.java
│       │   │               │   │   │   │       ├── OracleDDLStatement.java
│       │   │               │   │   │   │       ├── OracleDeleteStatement.java
│       │   │               │   │   │   │       ├── OracleDropDbLinkStatement.java
│       │   │               │   │   │   │       ├── OracleDropPackageStatement.java
│       │   │               │   │   │   │       ├── OracleExecuteImmediateStatement.java
│       │   │               │   │   │   │       ├── OracleExitStatement.java
│       │   │               │   │   │   │       ├── OracleExplainStatement.java
│       │   │               │   │   │   │       ├── OracleFileSpecification.java
│       │   │               │   │   │   │       ├── OracleForStatement.java
│       │   │               │   │   │   │       ├── OracleForeignKey.java
│       │   │               │   │   │   │       ├── OracleGotoStatement.java
│       │   │               │   │   │   │       ├── OracleInsertStatement.java
│       │   │               │   │   │   │       ├── OracleLabelStatement.java
│       │   │               │   │   │   │       ├── OracleLobParameters.java
│       │   │               │   │   │   │       ├── OracleLockTableStatement.java
│       │   │               │   │   │   │       ├── OracleMultiInsertStatement.java
│       │   │               │   │   │   │       ├── OraclePipeRowStatement.java
│       │   │               │   │   │   │       ├── OraclePrimaryKey.java
│       │   │               │   │   │   │       ├── OracleRaiseStatement.java
│       │   │               │   │   │   │       ├── OracleRunStatement.java
│       │   │               │   │   │   │       ├── OracleSelectJoin.java
│       │   │               │   │   │   │       ├── OracleSelectPivotBase.java
│       │   │               │   │   │   │       ├── OracleSelectQueryBlock.java
│       │   │               │   │   │   │       ├── OracleSelectRestriction.java
│       │   │               │   │   │   │       ├── OracleSelectSubqueryTableSource.java
│       │   │               │   │   │   │       ├── OracleSelectTableReference.java
│       │   │               │   │   │   │       ├── OracleSelectTableSource.java
│       │   │               │   │   │   │       ├── OracleSetTransactionStatement.java
│       │   │               │   │   │   │       ├── OracleStatement.java
│       │   │               │   │   │   │       ├── OracleStatementImpl.java
│       │   │               │   │   │   │       ├── OracleSupplementalIdKey.java
│       │   │               │   │   │   │       ├── OracleSupplementalLogGrp.java
│       │   │               │   │   │   │       ├── OracleUnique.java
│       │   │               │   │   │   │       ├── OracleUpdateStatement.java
│       │   │               │   │   │   │       ├── OracleUsingIndexClause.java
│       │   │               │   │   │   │       └── OracleXmlColumnProperties.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── OracleCreateTableParser.java
│       │   │               │   │   │   │   ├── OracleExprParser.java
│       │   │               │   │   │   │   ├── OracleFunctionDataType.java
│       │   │               │   │   │   │   ├── OracleLexer.java
│       │   │               │   │   │   │   ├── OracleProcedureDataType.java
│       │   │               │   │   │   │   ├── OracleSelectParser.java
│       │   │               │   │   │   │   ├── OracleStatementParser.java
│       │   │               │   │   │   │   └── OracleUpdateParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── OracleASTParameterizedVisitor.java
│       │   │               │   │   │       ├── OracleASTVisitor.java
│       │   │               │   │   │       ├── OracleASTVisitorAdapter.java
│       │   │               │   │   │       ├── OracleEvalVisitor.java
│       │   │               │   │   │       ├── OracleExportParameterVisitor.java
│       │   │               │   │   │       ├── OracleOutputVisitor.java
│       │   │               │   │   │       ├── OracleParameterizedOutputVisitor.java
│       │   │               │   │   │       ├── OracleRowNumToLimit.java
│       │   │               │   │   │       ├── OracleSchemaStatVisitor.java
│       │   │               │   │   │       └── OracleToMySqlOutputVisitor.java
│       │   │               │   │   ├── oscar/
│       │   │               │   │   │   ├── Oscar.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── OscarObject.java
│       │   │               │   │   │   │   ├── OscarObjectImpl.java
│       │   │               │   │   │   │   ├── expr/
│       │   │               │   │   │   │   │   └── OscarExpr.java
│       │   │               │   │   │   │   └── stmt/
│       │   │               │   │   │   │       ├── OscarAlterSchemaStatement.java
│       │   │               │   │   │   │       ├── OscarAlterTableAlterColumnSetNotNull.java
│       │   │               │   │   │   │       ├── OscarConnectToStatement.java
│       │   │               │   │   │   │       ├── OscarCreateSchemaStatement.java
│       │   │               │   │   │   │       ├── OscarDeleteStatement.java
│       │   │               │   │   │   │       ├── OscarDropSchemaStatement.java
│       │   │               │   │   │   │       ├── OscarFunctionTableSource.java
│       │   │               │   │   │   │       ├── OscarInsertStatement.java
│       │   │               │   │   │   │       ├── OscarSelectQueryBlock.java
│       │   │               │   │   │   │       ├── OscarSelectStatement.java
│       │   │               │   │   │   │       ├── OscarShowStatement.java
│       │   │               │   │   │   │       ├── OscarStartTransactionStatement.java
│       │   │               │   │   │   │       ├── OscarStatement.java
│       │   │               │   │   │   │       └── OscarUpdateStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── OscarCreateTableParser.java
│       │   │               │   │   │   │   ├── OscarExprParser.java
│       │   │               │   │   │   │   ├── OscarLexer.java
│       │   │               │   │   │   │   └── OscarSelectParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── OscarASTVisitor.java
│       │   │               │   │   │       ├── OscarOutputVisitor.java
│       │   │               │   │   │       ├── OscarPermissionOutputVisitor.java
│       │   │               │   │   │       └── OscarStatementParser.java
│       │   │               │   │   ├── phoenix/
│       │   │               │   │   │   ├── Phoenix.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── PhoenixObject.java
│       │   │               │   │   │   │   ├── PhoenixStatementImpl.java
│       │   │               │   │   │   │   └── PhoenixUpsertStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── PhoenixExprParser.java
│       │   │               │   │   │   │   ├── PhoenixLexer.java
│       │   │               │   │   │   │   └── PhoenixStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── PhoenixASTVisitor.java
│       │   │               │   │   │       ├── PhoenixOutputVisitor.java
│       │   │               │   │   │       └── PhoenixSchemaStatVisitor.java
│       │   │               │   │   ├── postgresql/
│       │   │               │   │   │   ├── PG.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── PGSQLObject.java
│       │   │               │   │   │   │   ├── PGSQLObjectImpl.java
│       │   │               │   │   │   │   ├── expr/
│       │   │               │   │   │   │   │   ├── PGAttrExpr.java
│       │   │               │   │   │   │   │   ├── PGBoxExpr.java
│       │   │               │   │   │   │   │   ├── PGCharExpr.java
│       │   │               │   │   │   │   │   ├── PGCidrExpr.java
│       │   │               │   │   │   │   │   ├── PGCircleExpr.java
│       │   │               │   │   │   │   │   ├── PGDateField.java
│       │   │               │   │   │   │   │   ├── PGExpr.java
│       │   │               │   │   │   │   │   ├── PGExprImpl.java
│       │   │               │   │   │   │   │   ├── PGExtractExpr.java
│       │   │               │   │   │   │   │   ├── PGInetExpr.java
│       │   │               │   │   │   │   │   ├── PGLineSegmentsExpr.java
│       │   │               │   │   │   │   │   ├── PGMacAddrExpr.java
│       │   │               │   │   │   │   │   ├── PGPointExpr.java
│       │   │               │   │   │   │   │   ├── PGPolygonExpr.java
│       │   │               │   │   │   │   │   └── PGTypeCastExpr.java
│       │   │               │   │   │   │   └── stmt/
│       │   │               │   │   │   │       ├── PGAlterDatabaseStatement.java
│       │   │               │   │   │   │       ├── PGAlterSchemaStatement.java
│       │   │               │   │   │   │       ├── PGAlterTableAlterColumnSetNotNull.java
│       │   │               │   │   │   │       ├── PGAnalyzeStatement.java
│       │   │               │   │   │   │       ├── PGConnectToStatement.java
│       │   │               │   │   │   │       ├── PGCopyStatement.java
│       │   │               │   │   │   │       ├── PGCreateDatabaseStatement.java
│       │   │               │   │   │   │       ├── PGCreateExtensionStatement.java
│       │   │               │   │   │   │       ├── PGCreateSchemaStatement.java
│       │   │               │   │   │   │       ├── PGDeleteStatement.java
│       │   │               │   │   │   │       ├── PGDoStatement.java
│       │   │               │   │   │   │       ├── PGDropDatabaseStatement.java
│       │   │               │   │   │   │       ├── PGDropSchemaStatement.java
│       │   │               │   │   │   │       ├── PGEndTransactionStatement.java
│       │   │               │   │   │   │       ├── PGFunctionTableSource.java
│       │   │               │   │   │   │       ├── PGInsertStatement.java
│       │   │               │   │   │   │       ├── PGSQLStatement.java
│       │   │               │   │   │   │       ├── PGSelectQueryBlock.java
│       │   │               │   │   │   │       ├── PGSelectStatement.java
│       │   │               │   │   │   │       ├── PGShowStatement.java
│       │   │               │   │   │   │       ├── PGStartTransactionStatement.java
│       │   │               │   │   │   │       ├── PGUpdateStatement.java
│       │   │               │   │   │   │       └── PGVacuumStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── PGCreateTableParser.java
│       │   │               │   │   │   │   ├── PGExprParser.java
│       │   │               │   │   │   │   ├── PGLexer.java
│       │   │               │   │   │   │   ├── PGSQLStatementParser.java
│       │   │               │   │   │   │   └── PGSelectParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── PGASTVisitor.java
│       │   │               │   │   │       ├── PGASTVisitorAdapter.java
│       │   │               │   │   │       ├── PGEvalVisitor.java
│       │   │               │   │   │       ├── PGExportParameterVisitor.java
│       │   │               │   │   │       ├── PGOutputVisitor.java
│       │   │               │   │   │       └── PGSchemaStatVisitor.java
│       │   │               │   │   ├── presto/
│       │   │               │   │   │   ├── Presto.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── PrestoColumnConstraint.java
│       │   │               │   │   │   │   ├── PrestoColumnWith.java
│       │   │               │   │   │   │   ├── PrestoDateTimeExpr.java
│       │   │               │   │   │   │   ├── PrestoObject.java
│       │   │               │   │   │   │   └── stmt/
│       │   │               │   │   │   │       ├── PrestoAlterFunctionStatement.java
│       │   │               │   │   │   │       ├── PrestoAlterSchemaStatement.java
│       │   │               │   │   │   │       ├── PrestoCreateTableStatement.java
│       │   │               │   │   │   │       ├── PrestoDeallocatePrepareStatement.java
│       │   │               │   │   │   │       ├── PrestoExecuteStatement.java
│       │   │               │   │   │   │       ├── PrestoPrepareStatement.java
│       │   │               │   │   │   │       ├── PrestoSQLStatement.java
│       │   │               │   │   │   │       └── PrestoSelectStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── PrestoCreateTableParser.java
│       │   │               │   │   │   │   ├── PrestoExprParser.java
│       │   │               │   │   │   │   ├── PrestoLexer.java
│       │   │               │   │   │   │   ├── PrestoSelectParser.java
│       │   │               │   │   │   │   └── PrestoStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── PrestoASTVisitor.java
│       │   │               │   │   │       └── PrestoOutputVisitor.java
│       │   │               │   │   ├── redshift/
│       │   │               │   │   │   ├── Redshift.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── RedshiftCreateTableParser.java
│       │   │               │   │   │   │   ├── RedshiftExprParser.java
│       │   │               │   │   │   │   ├── RedshiftLexer.java
│       │   │               │   │   │   │   ├── RedshiftSelectParser.java
│       │   │               │   │   │   │   └── RedshiftStatementParser.java
│       │   │               │   │   │   ├── stmt/
│       │   │               │   │   │   │   ├── RedshiftColumnConstraint.java
│       │   │               │   │   │   │   ├── RedshiftColumnEncode.java
│       │   │               │   │   │   │   ├── RedshiftColumnKey.java
│       │   │               │   │   │   │   ├── RedshiftCreateTableStatement.java
│       │   │               │   │   │   │   ├── RedshiftObject.java
│       │   │               │   │   │   │   ├── RedshiftObjectImpl.java
│       │   │               │   │   │   │   ├── RedshiftSelectQueryBlock.java
│       │   │               │   │   │   │   └── RedshiftSortKey.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── RedshiftASTVisitor.java
│       │   │               │   │   │       └── RedshiftOutputVisitor.java
│       │   │               │   │   ├── snowflake/
│       │   │               │   │   │   ├── SnowflakeCreateTableParser.java
│       │   │               │   │   │   ├── SnowflakeExprParser.java
│       │   │               │   │   │   ├── SnowflakeLexer.java
│       │   │               │   │   │   ├── SnowflakeSelectParser.java
│       │   │               │   │   │   └── SnowflakeStatementParser.java
│       │   │               │   │   ├── spark/
│       │   │               │   │   │   ├── Spark.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── SparkCreateTableStatement.java
│       │   │               │   │   │   │   └── stmt/
│       │   │               │   │   │   │       ├── SparkCacheTableStatement.java
│       │   │               │   │   │   │       └── SparkCreateScanStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── SparkCreateTableParser.java
│       │   │               │   │   │   │   ├── SparkExprParser.java
│       │   │               │   │   │   │   ├── SparkLexer.java
│       │   │               │   │   │   │   ├── SparkSelectParser.java
│       │   │               │   │   │   │   └── SparkStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── SparkASTVisitor.java
│       │   │               │   │   │       ├── SparkOutputASTVisitor.java
│       │   │               │   │   │       └── SparkSchemaStatASTVisitor.java
│       │   │               │   │   ├── sqlite/
│       │   │               │   │   │   ├── SQLite.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── SQLiteAttachStatement.java
│       │   │               │   │   │   │   ├── SQLiteDetachStatement.java
│       │   │               │   │   │   │   ├── SQLitePragmaStatement.java
│       │   │               │   │   │   │   ├── SQLiteReindexStatement.java
│       │   │               │   │   │   │   └── SQLiteVacuumStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── SQLiteExprParser.java
│       │   │               │   │   │   │   ├── SQLiteLexer.java
│       │   │               │   │   │   │   ├── SQLiteSelectParser.java
│       │   │               │   │   │   │   └── SQLiteStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── SQLiteASTVisitor.java
│       │   │               │   │   │       ├── SQLiteASTVisitorAdapter.java
│       │   │               │   │   │       ├── SQLiteEvalVisitor.java
│       │   │               │   │   │       ├── SQLiteOutputVisitor.java
│       │   │               │   │   │       └── SQLiteSchemaStatVisitor.java
│       │   │               │   │   ├── sqlserver/
│       │   │               │   │   │   ├── SqlServer.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── SQLServerObject.java
│       │   │               │   │   │   │   ├── SQLServerObjectImpl.java
│       │   │               │   │   │   │   ├── SQLServerOutput.java
│       │   │               │   │   │   │   ├── SQLServerSelectQueryBlock.java
│       │   │               │   │   │   │   ├── SQLServerStatement.java
│       │   │               │   │   │   │   ├── SQLServerStatementImpl.java
│       │   │               │   │   │   │   ├── expr/
│       │   │               │   │   │   │   │   ├── SQLServerExpr.java
│       │   │               │   │   │   │   │   └── SQLServerObjectReferenceExpr.java
│       │   │               │   │   │   │   └── stmt/
│       │   │               │   │   │   │       ├── SQLServerExecStatement.java
│       │   │               │   │   │   │       ├── SQLServerInsertStatement.java
│       │   │               │   │   │   │       ├── SQLServerRollbackStatement.java
│       │   │               │   │   │   │       ├── SQLServerSetTransactionIsolationLevelStatement.java
│       │   │               │   │   │   │       ├── SQLServerThrowStatement.java
│       │   │               │   │   │   │       ├── SQLServerTryCatchStatement.java
│       │   │               │   │   │   │       ├── SQLServerUpdateStatement.java
│       │   │               │   │   │   │       └── SQLServerWaitForStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── SQLServerExprParser.java
│       │   │               │   │   │   │   ├── SQLServerLexer.java
│       │   │               │   │   │   │   ├── SQLServerSelectParser.java
│       │   │               │   │   │   │   └── SQLServerStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── MSSQLServerExportParameterVisitor.java
│       │   │               │   │   │       ├── SQLServerASTVisitor.java
│       │   │               │   │   │       ├── SQLServerASTVisitorAdapter.java
│       │   │               │   │   │       ├── SQLServerEvalVisitor.java
│       │   │               │   │   │       ├── SQLServerOutputVisitor.java
│       │   │               │   │   │       └── SQLServerSchemaStatVisitor.java
│       │   │               │   │   ├── starrocks/
│       │   │               │   │   │   ├── StarRocks.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── StarRocksAggregateKey.java
│       │   │               │   │   │   │   ├── StarRocksDuplicateKey.java
│       │   │               │   │   │   │   ├── StarRocksIndexDefinition.java
│       │   │               │   │   │   │   ├── StarRocksObject.java
│       │   │               │   │   │   │   └── statement/
│       │   │               │   │   │   │       ├── StarRocksCreateResourceStatement.java
│       │   │               │   │   │   │       └── StarRocksCreateTableStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── StarRocksCreateTableParser.java
│       │   │               │   │   │   │   ├── StarRocksExprParser.java
│       │   │               │   │   │   │   ├── StarRocksLexer.java
│       │   │               │   │   │   │   ├── StarRocksSelectParser.java
│       │   │               │   │   │   │   └── StarRocksStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── StarRocksASTVisitor.java
│       │   │               │   │   │       └── StarRocksOutputVisitor.java
│       │   │               │   │   ├── supersql/
│       │   │               │   │   │   ├── SuperSql.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   └── SuperSqlObject.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── SuperSqlCreateTableParser.java
│       │   │               │   │   │   │   ├── SuperSqlExprParser.java
│       │   │               │   │   │   │   ├── SuperSqlLexer.java
│       │   │               │   │   │   │   ├── SuperSqlSelectParser.java
│       │   │               │   │   │   │   └── SuperSqlStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── SuperSqlASTVisitor.java
│       │   │               │   │   │       └── SuperSqlOutputVisitor.java
│       │   │               │   │   ├── synapse/
│       │   │               │   │   │   ├── Synapse.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   └── stmt/
│       │   │               │   │   │   │       └── SynapseCreateTableStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── SynapseCreateTableParser.java
│       │   │               │   │   │   │   ├── SynapseExprParser.java
│       │   │               │   │   │   │   ├── SynapseLexer.java
│       │   │               │   │   │   │   ├── SynapseSelectParser.java
│       │   │               │   │   │   │   └── SynapseStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── SynapseASTVisitor.java
│       │   │               │   │   │       └── SynapseOutputVisitor.java
│       │   │               │   │   ├── teradata/
│       │   │               │   │   │   ├── TeraData.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── TDCreateTableStatement.java
│       │   │               │   │   │   │   ├── TDDateDataType.java
│       │   │               │   │   │   │   ├── TDNormalize.java
│       │   │               │   │   │   │   ├── TDObject.java
│       │   │               │   │   │   │   └── TDSelectQueryBlock.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── TDCreateTableParser.java
│       │   │               │   │   │   │   ├── TDExprParser.java
│       │   │               │   │   │   │   ├── TDLexer.java
│       │   │               │   │   │   │   ├── TDSelectParser.java
│       │   │               │   │   │   │   └── TDStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── TDASTVisitor.java
│       │   │               │   │   │       └── TDOutputVisitor.java
│       │   │               │   │   └── transact/
│       │   │               │   │       └── ast/
│       │   │               │   │           └── TransactSQLObject.java
│       │   │               │   ├── parser/
│       │   │               │   │   ├── CharTypes.java
│       │   │               │   │   ├── DialectFeature.java
│       │   │               │   │   ├── EOFParserException.java
│       │   │               │   │   ├── InsertColumnsCache.java
│       │   │               │   │   ├── Keywords.java
│       │   │               │   │   ├── LayoutCharacters.java
│       │   │               │   │   ├── Lexer.java
│       │   │               │   │   ├── NotAllowCommentException.java
│       │   │               │   │   ├── ParserException.java
│       │   │               │   │   ├── SQLCreateTableParser.java
│       │   │               │   │   ├── SQLDDLParser.java
│       │   │               │   │   ├── SQLExprParser.java
│       │   │               │   │   ├── SQLInsertValueHandler.java
│       │   │               │   │   ├── SQLParseException.java
│       │   │               │   │   ├── SQLParser.java
│       │   │               │   │   ├── SQLParserFeature.java
│       │   │               │   │   ├── SQLParserUtils.java
│       │   │               │   │   ├── SQLSelectListCache.java
│       │   │               │   │   ├── SQLSelectParser.java
│       │   │               │   │   ├── SQLStatementParser.java
│       │   │               │   │   ├── SQLType.java
│       │   │               │   │   ├── SymbolTable.java
│       │   │               │   │   └── Token.java
│       │   │               │   ├── repository/
│       │   │               │   │   ├── Schema.java
│       │   │               │   │   ├── SchemaObject.java
│       │   │               │   │   ├── SchemaObjectType.java
│       │   │               │   │   ├── SchemaRepository.java
│       │   │               │   │   ├── SchemaResolveVisitor.java
│       │   │               │   │   ├── SchemaResolveVisitorFactory.java
│       │   │               │   │   └── function/
│       │   │               │   │       ├── Function.java
│       │   │               │   │       ├── FunctionHandler.java
│       │   │               │   │       ├── FunctionType.java
│       │   │               │   │       ├── SignatureUtils.java
│       │   │               │   │       └── Signatures.java
│       │   │               │   ├── template/
│       │   │               │   │   └── SQLSelectQueryTemplate.java
│       │   │               │   └── visitor/
│       │   │               │       ├── ExportParameterVisitor.java
│       │   │               │       ├── ExportParameterVisitorUtils.java
│       │   │               │       ├── ExportParameterizedOutputVisitor.java
│       │   │               │       ├── ParameterizedOutputVisitorUtils.java
│       │   │               │       ├── ParameterizedVisitor.java
│       │   │               │       ├── PrintableVisitor.java
│       │   │               │       ├── SQLASTOutputVisitor.java
│       │   │               │       ├── SQLASTOutputVisitorBinaryOpSupport.java
│       │   │               │       ├── SQLASTParameterizedVisitor.java
│       │   │               │       ├── SQLASTVisitor.java
│       │   │               │       ├── SQLASTVisitorAdapter.java
│       │   │               │       ├── SQLDataTypeValidator.java
│       │   │               │       ├── SQLEvalVisitor.java
│       │   │               │       ├── SQLEvalVisitorImpl.java
│       │   │               │       ├── SQLEvalVisitorUtils.java
│       │   │               │       ├── SQLSubQueryGroupVisitor.java
│       │   │               │       ├── SQLTableAliasCollectVisitor.java
│       │   │               │       ├── SQLTransformVisitor.java
│       │   │               │       ├── SchemaStatVisitor.java
│       │   │               │       ├── VisitorFeature.java
│       │   │               │       └── functions/
│       │   │               │           ├── Ascii.java
│       │   │               │           ├── Bin.java
│       │   │               │           ├── BitLength.java
│       │   │               │           ├── Char.java
│       │   │               │           ├── Concat.java
│       │   │               │           ├── DateAdd.java
│       │   │               │           ├── Elt.java
│       │   │               │           ├── Function.java
│       │   │               │           ├── Greatest.java
│       │   │               │           ├── Hex.java
│       │   │               │           ├── If.java
│       │   │               │           ├── IfNull.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
│       │   │               │           ├── Replace.java
│       │   │               │           ├── Reverse.java
│       │   │               │           ├── Right.java
│       │   │               │           ├── Rpad.java
│       │   │               │           ├── Substring.java
│       │   │               │           ├── ToChar.java
│       │   │               │           ├── ToDate.java
│       │   │               │           ├── Trim.java
│       │   │               │           ├── Ucase.java
│       │   │               │           └── Unhex.java
│       │   │               ├── stat/
│       │   │               │   ├── DataSourceMonitorable.java
│       │   │               │   ├── DruidDataSourceStatManager.java
│       │   │               │   ├── DruidDataSourceStatManagerMBean.java
│       │   │               │   ├── DruidStatManagerFacade.java
│       │   │               │   ├── DruidStatService.java
│       │   │               │   ├── DruidStatServiceMBean.java
│       │   │               │   ├── JdbcConnectionStat.java
│       │   │               │   ├── JdbcConnectionStatMBean.java
│       │   │               │   ├── JdbcDataSourceStat.java
│       │   │               │   ├── JdbcDataSourceStatMBean.java
│       │   │               │   ├── JdbcResultSetStat.java
│       │   │               │   ├── JdbcResultSetStatMBean.java
│       │   │               │   ├── JdbcSqlStat.java
│       │   │               │   ├── JdbcSqlStatMBean.java
│       │   │               │   ├── JdbcSqlStatValue.java
│       │   │               │   ├── JdbcStatContext.java
│       │   │               │   ├── JdbcStatManager.java
│       │   │               │   ├── JdbcStatManagerFactoryBean.java
│       │   │               │   ├── JdbcStatManagerMBean.java
│       │   │               │   ├── JdbcStatementStat.java
│       │   │               │   ├── JdbcStatementStatMBean.java
│       │   │               │   ├── JdbcTraceManager.java
│       │   │               │   ├── JdbcTraceManagerMBean.java
│       │   │               │   └── TableStat.java
│       │   │               ├── support/
│       │   │               │   ├── calcite/
│       │   │               │   │   ├── CalciteMySqlNodeVisitor.java
│       │   │               │   │   ├── CalciteSqlBasicCall.java
│       │   │               │   │   └── TDDLSqlSelect.java
│       │   │               │   ├── clickhouse/
│       │   │               │   │   ├── BalancedClickhouseDriver.java
│       │   │               │   │   └── BalancedClickhouseDriverNative.java
│       │   │               │   ├── hibernate/
│       │   │               │   │   └── DruidConnectionProvider.java
│       │   │               │   ├── http/
│       │   │               │   │   ├── AbstractWebStatImpl.java
│       │   │               │   │   ├── DruidWebSecurityProvider.java
│       │   │               │   │   ├── MonitorClientContextListener.java
│       │   │               │   │   ├── ResourceServlet.java
│       │   │               │   │   ├── StatViewFilter.java
│       │   │               │   │   ├── StatViewServlet.java
│       │   │               │   │   ├── WebStatFilter.java
│       │   │               │   │   ├── stat/
│       │   │               │   │   │   ├── WebAppStat.java
│       │   │               │   │   │   ├── WebAppStatManager.java
│       │   │               │   │   │   ├── WebAppStatUtils.java
│       │   │               │   │   │   ├── WebAppStatValue.java
│       │   │               │   │   │   ├── WebRequestStat.java
│       │   │               │   │   │   ├── WebSessionStat.java
│       │   │               │   │   │   ├── WebSessionStatValue.java
│       │   │               │   │   │   ├── WebURIStat.java
│       │   │               │   │   │   └── WebURIStatValue.java
│       │   │               │   │   └── util/
│       │   │               │   │       ├── IPAddress.java
│       │   │               │   │       └── IPRange.java
│       │   │               │   ├── ibatis/
│       │   │               │   │   ├── DruidDataSourceFactory.java
│       │   │               │   │   ├── IbatisUtils.java
│       │   │               │   │   ├── SpringIbatisBeanNameAutoProxyCreator.java
│       │   │               │   │   ├── SpringIbatisBeanNameAutoProxyCreatorMBean.java
│       │   │               │   │   ├── SpringIbatisBeanTypeAutoProxyCreator.java
│       │   │               │   │   ├── SpringIbatisBeanTypeAutoProxyCreatorMBean.java
│       │   │               │   │   ├── SqlMapClientImplWrapper.java
│       │   │               │   │   ├── SqlMapClientWrapper.java
│       │   │               │   │   ├── SqlMapExecutorWrapper.java
│       │   │               │   │   └── SqlMapSessionWrapper.java
│       │   │               │   ├── jakarta/
│       │   │               │   │   ├── AbstractWebStatImpl.java
│       │   │               │   │   ├── MonitorClientContextListener.java
│       │   │               │   │   ├── ResourceServlet.java
│       │   │               │   │   ├── StatViewFilter.java
│       │   │               │   │   ├── StatViewServlet.java
│       │   │               │   │   └── WebStatFilter.java
│       │   │               │   ├── 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
│       │   │               │   ├── metrics/
│       │   │               │   │   └── MetricCollector.java
│       │   │               │   ├── monitor/
│       │   │               │   │   ├── MonitorClient.java
│       │   │               │   │   ├── MonitorContext.java
│       │   │               │   │   ├── MonitorServlet.java
│       │   │               │   │   ├── annotation/
│       │   │               │   │   │   ├── AggregateType.java
│       │   │               │   │   │   ├── MField.java
│       │   │               │   │   │   └── MTable.java
│       │   │               │   │   ├── dao/
│       │   │               │   │   │   ├── MonitorDao.java
│       │   │               │   │   │   └── MonitorDaoJdbcImpl.java
│       │   │               │   │   └── entity/
│       │   │               │   │       ├── MonitorApp.java
│       │   │               │   │       ├── MonitorCluster.java
│       │   │               │   │       └── MonitorInstance.java
│       │   │               │   ├── opds/
│       │   │               │   │   └── udf/
│       │   │               │   │       ├── ExportColumns.java
│       │   │               │   │       ├── ExportConditionColumns.java
│       │   │               │   │       ├── ExportConditions.java
│       │   │               │   │       ├── ExportSelectListColumns.java
│       │   │               │   │       ├── ExportTables.java
│       │   │               │   │       ├── MetaSqlExtract.java
│       │   │               │   │       ├── SqlCodeStat.java
│       │   │               │   │       ├── SqlFormat.java
│       │   │               │   │       ├── SqlParams.java
│       │   │               │   │       ├── SqlParamsFill.java
│       │   │               │   │       ├── SqlPattern.java
│       │   │               │   │       ├── SqlPatternHash.java
│       │   │               │   │       ├── SqlSyntaxCheck.java
│       │   │               │   │       └── SqlTypeUDF.java
│       │   │               │   ├── profile/
│       │   │               │   │   ├── ProfileEntry.java
│       │   │               │   │   ├── ProfileEntryKey.java
│       │   │               │   │   ├── ProfileEntryReqStat.java
│       │   │               │   │   ├── ProfileEntryStat.java
│       │   │               │   │   ├── ProfileEntryStatValue.java
│       │   │               │   │   ├── ProfileStat.java
│       │   │               │   │   └── Profiler.java
│       │   │               │   ├── quartz/
│       │   │               │   │   └── DruidQuartzConnectionProvider.java
│       │   │               │   ├── simplejndi/
│       │   │               │   │   └── DruidDataSourceConverter.java
│       │   │               │   └── spring/
│       │   │               │       ├── DruidLobCreator.java
│       │   │               │       ├── DruidLobHandler.java
│       │   │               │       ├── DruidNativeJdbcExtractor.java
│       │   │               │       ├── MBeanServerFactoryBean.java
│       │   │               │       ├── mvc/
│       │   │               │       │   └── StatHandlerInterceptor.java
│       │   │               │       └── stat/
│       │   │               │           ├── BeanTypeAutoProxyCreator.java
│       │   │               │           ├── DruidStatInterceptor.java
│       │   │               │           ├── SpringMethodInfo.java
│       │   │               │           ├── SpringMethodStat.java
│       │   │               │           ├── SpringMethodStatValue.java
│       │   │               │           ├── SpringStat.java
│       │   │               │           ├── SpringStatManager.java
│       │   │               │           ├── SpringStatUtils.java
│       │   │               │           ├── annotation/
│       │   │               │           │   ├── Stat.java
│       │   │               │           │   ├── StatAnnotationAdvisor.java
│       │   │               │           │   └── StatAnnotationBeanPostProcessor.java
│       │   │               │           └── config/
│       │   │               │               ├── DruidStatBeanDefinitionParser.java
│       │   │               │               └── DruidStatNamespaceHandler.java
│       │   │               ├── util/
│       │   │               │   ├── Base64.java
│       │   │               │   ├── ConcurrentLruCache.java
│       │   │               │   ├── DaemonThreadFactory.java
│       │   │               │   ├── DruidDataSourceUtils.java
│       │   │               │   ├── DruidPasswordCallback.java
│       │   │               │   ├── DruidWebUtils.java
│       │   │               │   ├── FnvHash.java
│       │   │               │   ├── H2Utils.java
│       │   │               │   ├── HexBin.java
│       │   │               │   ├── Histogram.java
│       │   │               │   ├── HiveUtils.java
│       │   │               │   ├── JMXUtils.java
│       │   │               │   ├── JdbcConstants.java
│       │   │               │   ├── JdbcSqlStatUtils.java
│       │   │               │   ├── JdbcUtils.java
│       │   │               │   ├── LRUCache.java
│       │   │               │   ├── ListDG.java
│       │   │               │   ├── MapComparator.java
│       │   │               │   ├── MySqlUtils.java
│       │   │               │   ├── OdpsUtils.java
│       │   │               │   ├── OracleUtils.java
│       │   │               │   ├── PGUtils.java
│       │   │               │   ├── PatternMatcher.java
│       │   │               │   ├── ResultSetConsumer.java
│       │   │               │   ├── ServletPathMatcher.java
│       │   │               │   ├── StringUtils.java
│       │   │               │   ├── TransactionInfo.java
│       │   │               │   ├── Utils.java
│       │   │               │   ├── jdbc/
│       │   │               │   │   ├── ConnectionBase.java
│       │   │               │   │   ├── LocalResultSet.java
│       │   │               │   │   ├── PreparedStatementBase.java
│       │   │               │   │   ├── ResultSetBase.java
│       │   │               │   │   ├── ResultSetMetaDataBase.java
│       │   │               │   │   └── StatementBase.java
│       │   │               │   └── lang/
│       │   │               │       └── Consumer.java
│       │   │               └── wall/
│       │   │                   ├── Violation.java
│       │   │                   ├── WallCheckResult.java
│       │   │                   ├── WallConfig.java
│       │   │                   ├── WallConfigMBean.java
│       │   │                   ├── WallContext.java
│       │   │                   ├── WallDenyStat.java
│       │   │                   ├── WallFilter.java
│       │   │                   ├── WallFilterMBean.java
│       │   │                   ├── WallFunctionStat.java
│       │   │                   ├── WallFunctionStatValue.java
│       │   │                   ├── WallProvider.java
│       │   │                   ├── WallProviderCreator.java
│       │   │                   ├── WallProviderStatLogger.java
│       │   │                   ├── WallProviderStatLoggerAdapter.java
│       │   │                   ├── WallProviderStatLoggerImpl.java
│       │   │                   ├── WallProviderStatValue.java
│       │   │                   ├── WallSQLException.java
│       │   │                   ├── WallSqlFunctionStat.java
│       │   │                   ├── WallSqlStat.java
│       │   │                   ├── WallSqlStatValue.java
│       │   │                   ├── WallSqlTableStat.java
│       │   │                   ├── WallTableStat.java
│       │   │                   ├── WallTableStatValue.java
│       │   │                   ├── WallUpdateCheckHandler.java
│       │   │                   ├── WallUpdateCheckItem.java
│       │   │                   ├── WallUtils.java
│       │   │                   ├── WallVisitor.java
│       │   │                   ├── spi/
│       │   │                   │   ├── CKWallProvider.java
│       │   │                   │   ├── ClickhouseWallVisitor.java
│       │   │                   │   ├── DB2WallProvider.java
│       │   │                   │   ├── DB2WallVisitor.java
│       │   │                   │   ├── MySqlWallProvider.java
│       │   │                   │   ├── MySqlWallVisitor.java
│       │   │                   │   ├── OracleWallProvider.java
│       │   │                   │   ├── OracleWallVisitor.java
│       │   │                   │   ├── PGWallProvider.java
│       │   │                   │   ├── PGWallVisitor.java
│       │   │                   │   ├── SQLServerWallProvider.java
│       │   │                   │   ├── SQLServerWallVisitor.java
│       │   │                   │   ├── SQLiteWallProvider.java
│       │   │                   │   ├── SQLiteWallVisitor.java
│       │   │                   │   ├── WallVisitorBase.java
│       │   │                   │   └── WallVisitorUtils.java
│       │   │                   └── violation/
│       │   │                       ├── ErrorCode.java
│       │   │                       ├── IllegalSQLObjectViolation.java
│       │   │                       └── SyntaxErrorViolation.java
│       │   ├── resources/
│       │   │   ├── META-INF/
│       │   │   │   ├── druid/
│       │   │   │   │   ├── parser/
│       │   │   │   │   │   ├── athena/
│       │   │   │   │   │   │   └── dialect.properties
│       │   │   │   │   │   ├── bigquery/
│       │   │   │   │   │   │   ├── builtin_datatypes
│       │   │   │   │   │   │   └── dialect.properties
│       │   │   │   │   │   ├── clickhouse/
│       │   │   │   │   │   │   └── dialect.properties
│       │   │   │   │   │   ├── doris/
│       │   │   │   │   │   │   ├── dialect.properties
│       │   │   │   │   │   │   └── keywords
│       │   │   │   │   │   ├── h2/
│       │   │   │   │   │   │   └── dialect.properties
│       │   │   │   │   │   ├── hive/
│       │   │   │   │   │   │   ├── alias_keywords
│       │   │   │   │   │   │   ├── builtin_datatypes
│       │   │   │   │   │   │   ├── dialect.properties
│       │   │   │   │   │   │   └── keywords
│       │   │   │   │   │   ├── hologres/
│       │   │   │   │   │   │   ├── alias_keywords
│       │   │   │   │   │   │   ├── dialect.properties
│       │   │   │   │   │   │   └── keywords
│       │   │   │   │   │   ├── impala/
│       │   │   │   │   │   │   ├── alias_keywords
│       │   │   │   │   │   │   ├── builtin_datatypes
│       │   │   │   │   │   │   ├── dialect.properties
│       │   │   │   │   │   │   └── keywords
│       │   │   │   │   │   ├── mysql/
│       │   │   │   │   │   │   ├── builtin_datatypes
│       │   │   │   │   │   │   ├── dialect.properties
│       │   │   │   │   │   │   └── keywords
│       │   │   │   │   │   ├── odps/
│       │   │   │   │   │   │   ├── alias_keywords
│       │   │   │   │   │   │   ├── dialect.properties
│       │   │   │   │   │   │   └── keywords
│       │   │   │   │   │   ├── oracle/
│       │   │   │   │   │   │   ├── builtin_aggreagte_functions
│       │   │   │   │   │   │   ├── builtin_functions
│       │   │   │   │   │   │   ├── builtin_tables
│       │   │   │   │   │   │   ├── dialect.properties
│       │   │   │   │   │   │   └── keywords
│       │   │   │   │   │   ├── postgresql/
│       │   │   │   │   │   │   └── keywords
│       │   │   │   │   │   ├── spark/
│       │   │   │   │   │   │   ├── alias_keywords
│       │   │   │   │   │   │   ├── builtin_datatypes
│       │   │   │   │   │   │   ├── dialect.properties
│       │   │   │   │   │   │   └── keywords
│       │   │   │   │   │   ├── sqlite/
│       │   │   │   │   │   │   ├── builtin_datatypes
│       │   │   │   │   │   │   └── dialect.properties
│       │   │   │   │   │   ├── sqlserver/
│       │   │   │   │   │   │   └── dialect.properties
│       │   │   │   │   │   ├── starrocks/
│       │   │   │   │   │   │   ├── dialect.properties
│       │   │   │   │   │   │   └── keywords
│       │   │   │   │   │   └── synapse/
│       │   │   │   │   │       └── dialect.properties
│       │   │   │   │   └── wall/
│       │   │   │   │       ├── clickhouse/
│       │   │   │   │       │   ├── deny-function.txt
│       │   │   │   │       │   └── deny-schema.txt
│       │   │   │   │       ├── mysql/
│       │   │   │   │       │   ├── deny-function.txt
│       │   │   │   │       │   ├── deny-schema.txt
│       │   │   │   │       │   ├── deny-variant.txt
│       │   │   │   │       │   ├── permit-function.txt
│       │   │   │   │       │   └── permit-variant.txt
│       │   │   │   │       ├── oracle/
│       │   │   │   │       │   ├── deny-function.txt
│       │   │   │   │       │   ├── deny-object.txt
│       │   │   │   │       │   ├── deny-schema.txt
│       │   │   │   │       │   ├── deny-table.txt
│       │   │   │   │       │   ├── deny-variant.txt
│       │   │   │   │       │   └── permit-function.txt
│       │   │   │   │       ├── postgres/
│       │   │   │   │       │   ├── deny-function.txt
│       │   │   │   │       │   └── deny-table.txt
│       │   │   │   │       └── sqlserver/
│       │   │   │   │           ├── deny-function.txt
│       │   │   │   │           ├── deny-object.txt
│       │   │   │   │           ├── deny-schema.txt
│       │   │   │   │           ├── deny-table.txt
│       │   │   │   │           └── deny-variant.txt
│       │   │   │   ├── druid-driver.properties
│       │   │   │   ├── druid-filter.properties
│       │   │   │   ├── services/
│       │   │   │   │   └── java.sql.Driver
│       │   │   │   ├── spring.handlers
│       │   │   │   ├── spring.schemas
│       │   │   │   └── stat.xsd
│       │   │   ├── support/
│       │   │   │   ├── http/
│       │   │   │   │   └── resources/
│       │   │   │   │       ├── activeConnectionStackTrace.html
│       │   │   │   │       ├── api.html
│       │   │   │   │       ├── connectionInfo.html
│       │   │   │   │       ├── css/
│       │   │   │   │       │   └── style.css
│       │   │   │   │       ├── datasource.html
│       │   │   │   │       ├── header.html
│       │   │   │   │       ├── index.html
│       │   │   │   │       ├── js/
│       │   │   │   │       │   ├── common.js
│       │   │   │   │       │   ├── doT.js
│       │   │   │   │       │   └── lang.js
│       │   │   │   │       ├── login.html
│       │   │   │   │       ├── nopermit.html
│       │   │   │   │       ├── spring-detail.html
│       │   │   │   │       ├── spring.html
│       │   │   │   │       ├── sql-detail.html
│       │   │   │   │       ├── sql.html
│       │   │   │   │       ├── wall.html
│       │   │   │   │       ├── webapp.html
│       │   │   │   │       ├── websession-detail.html
│       │   │   │   │       ├── websession.html
│       │   │   │   │       ├── weburi-detail.html
│       │   │   │   │       └── weburi.html
│       │   │   │   └── monitor/
│       │   │   │       ├── mysql/
│       │   │   │       │   ├── basic.sql
│       │   │   │       │   ├── const.sql
│       │   │   │       │   ├── datasource.sql
│       │   │   │       │   ├── springmethod.sql
│       │   │   │       │   ├── sql.sql
│       │   │   │       │   ├── wall.sql
│       │   │   │       │   ├── webapp.sql
│       │   │   │       │   └── weburi.sql
│       │   │   │       └── resources/
│       │   │   │           └── index.html
│       │   │   ├── tpcds/
│       │   │   │   ├── create_tables.sql
│       │   │   │   ├── query01.sql
│       │   │   │   ├── query02.sql
│       │   │   │   ├── query03.sql
│       │   │   │   ├── query04.sql
│       │   │   │   ├── query05.sql
│       │   │   │   ├── query06.sql
│       │   │   │   ├── query07.sql
│       │   │   │   ├── query08.sql
│       │   │   │   ├── query09.sql
│       │   │   │   ├── query10.sql
│       │   │   │   ├── query11.sql
│       │   │   │   ├── query12.sql
│       │   │   │   ├── query13.sql
│       │   │   │   ├── query14.sql
│       │   │   │   ├── query15.sql
│       │   │   │   ├── query16.sql
│       │   │   │   ├── query17.sql
│       │   │   │   ├── query18.sql
│       │   │   │   ├── query19.sql
│       │   │   │   ├── query20.sql
│       │   │   │   ├── query21.sql
│       │   │   │   ├── query22.sql
│       │   │   │   ├── query23.sql
│       │   │   │   ├── query24.sql
│       │   │   │   ├── query25.sql
│       │   │   │   ├── query26.sql
│       │   │   │   ├── query27.sql
│       │   │   │   ├── query28.sql
│       │   │   │   ├── query29.sql
│       │   │   │   ├── query30.sql
│       │   │   │   ├── query31.sql
│       │   │   │   ├── query32.sql
│       │   │   │   ├── query33.sql
│       │   │   │   ├── query34.sql
│       │   │   │   ├── query35.sql
│       │   │   │   ├── query36.sql
│       │   │   │   ├── query37.sql
│       │   │   │   ├── query38.sql
│       │   │   │   ├── query39.sql
│       │   │   │   ├── query40.sql
│       │   │   │   ├── query41.sql
│       │   │   │   ├── query42.sql
│       │   │   │   ├── query43.sql
│       │   │   │   ├── query44.sql
│       │   │   │   ├── query45.sql
│       │   │   │   ├── query46.sql
│       │   │   │   ├── query47.sql
│       │   │   │   ├── query48.sql
│       │   │   │   ├── query49.sql
│       │   │   │   ├── query50.sql
│       │   │   │   ├── query51.sql
│       │   │   │   ├── query52.sql
│       │   │   │   ├── query53.sql
│       │   │   │   ├── query54.sql
│       │   │   │   ├── query55.sql
│       │   │   │   ├── query56.sql
│       │   │   │   ├── query57.sql
│       │   │   │   ├── query58.sql
│       │   │   │   ├── query59.sql
│       │   │   │   ├── query60.sql
│       │   │   │   ├── query61.sql
│       │   │   │   ├── query62.sql
│       │   │   │   ├── query63.sql
│       │   │   │   ├── query64.sql
│       │   │   │   ├── query65.sql
│       │   │   │   ├── query66.sql
│       │   │   │   ├── query67.sql
│       │   │   │   ├── query68.sql
│       │   │   │   ├── query69.sql
│       │   │   │   ├── query70.sql
│       │   │   │   ├── query71.sql
│       │   │   │   ├── query72.sql
│       │   │   │   ├── query73.sql
│       │   │   │   ├── query74.sql
│       │   │   │   ├── query75.sql
│       │   │   │   ├── query76.sql
│       │   │   │   ├── query77.sql
│       │   │   │   ├── query78.sql
│       │   │   │   ├── query79.sql
│       │   │   │   ├── query80.sql
│       │   │   │   ├── query81.sql
│       │   │   │   ├── query82.sql
│       │   │   │   ├── query83.sql
│       │   │   │   ├── query84.sql
│       │   │   │   ├── query85.sql
│       │   │   │   ├── query86.sql
│       │   │   │   ├── query87.sql
│       │   │   │   ├── query88.sql
│       │   │   │   ├── query89.sql
│       │   │   │   ├── query90.sql
│       │   │   │   ├── query91.sql
│       │   │   │   ├── query92.sql
│       │   │   │   ├── query93.sql
│       │   │   │   ├── query94.sql
│       │   │   │   ├── query95.sql
│       │   │   │   ├── query96.sql
│       │   │   │   ├── query97.sql
│       │   │   │   ├── query98.sql
│       │   │   │   └── query99.sql
│       │   │   └── tpch/
│       │   │       ├── create_tables.sql
│       │   │       ├── insert_lineitem_200.sql
│       │   │       ├── q1.sql
│       │   │       ├── q10.sql
│       │   │       ├── q11.sql
│       │   │       ├── q12.sql
│       │   │       ├── q13.sql
│       │   │       ├── q14.sql
│       │   │       ├── q15.sql
│       │   │       ├── q16.sql
│       │   │       ├── q17.sql
│       │   │       ├── q18.sql
│       │   │       ├── q19.sql
│       │   │       ├── q2.sql
│       │   │       ├── q20.sql
│       │   │       ├── q21.sql
│       │   │       ├── q22.sql
│       │   │       ├── q3.sql
│       │   │       ├── q4.sql
│       │   │       ├── q5.sql
│       │   │       ├── q6.sql
│       │   │       ├── q7.sql
│       │   │       ├── q8.sql
│       │   │       └── q9.sql
│       │   └── scripts/
│       │       ├── druidStat.bat
│       │       └── druidStat.sh
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── alibaba/
│           │           └── druid/
│           │               ├── Bug_for_alibank.java
│           │               ├── DBCPTest.java
│           │               ├── DbTestCase.java
│           │               ├── DragoonMetaInfTest.java
│           │               ├── LockTest.java
│           │               ├── PoolTestCase.java
│           │               ├── TestForZY.java
│           │               ├── TestHibernateCRUDWithTransactional.java
│           │               ├── TestHistogram.java
│           │               ├── TestIdel3.java
│           │               ├── TestLRU.java
│           │               ├── TestLockCount.java
│           │               ├── TestOracle.java
│           │               ├── TestOraclePing.java
│           │               ├── TestReplaceLicense.java
│           │               ├── TestRollBack.java
│           │               ├── TestSqlServer.java
│           │               ├── TestTraceFilter.java
│           │               ├── TestUtil.java
│           │               ├── benckmark/
│           │               │   ├── FnvHashTest.java
│           │               │   ├── TPCDS.java
│           │               │   ├── TPCH.java
│           │               │   ├── pool/
│           │               │   │   ├── AsyncClose.java
│           │               │   │   ├── Case0.java
│           │               │   │   ├── Case1.java
│           │               │   │   ├── Case2.java
│           │               │   │   ├── Case3.java
│           │               │   │   ├── CaseKylin_Oracle.java
│           │               │   │   ├── CaseKylin_mysql.java
│           │               │   │   ├── CaseKylin_mysql_idle_1.java
│           │               │   │   ├── CaseKylin_mysql_idle_2.java
│           │               │   │   ├── Case_Concurrent_50.java
│           │               │   │   ├── Oracle_Case0.java
│           │               │   │   ├── Oracle_Case3.java
│           │               │   │   ├── Oracle_Case4.java
│           │               │   │   ├── druid/
│           │               │   │   │   └── DruidCase0.java
│           │               │   │   └── model/
│           │               │   │       └── TableOperator.java
│           │               │   ├── proxy/
│           │               │   │   ├── BenchmarkCase.java
│           │               │   │   ├── BenchmarkExecutor.java
│           │               │   │   ├── DirectSQLExecutor.java
│           │               │   │   ├── DruidBenchmarkTest.java
│           │               │   │   ├── SQLExecutor.java
│           │               │   │   ├── TestAtomicPerformance.java
│           │               │   │   └── sqlcase/
│           │               │   │       ├── Select1.java
│           │               │   │       ├── SelectEmptyTable.java
│           │               │   │       ├── SelectNow.java
│           │               │   │       └── SelectSysUser.java
│           │               │   ├── sql/
│           │               │   │   ├── MySqlInsertBenchmark.java
│           │               │   │   ├── MySqlInsertBenchmark_2.java
│           │               │   │   ├── MySqlPerfMain.java
│           │               │   │   ├── MySqlPerfMain_schemaStat.java
│           │               │   │   ├── MySqlPerfMain_select.java
│           │               │   │   ├── MySqlPerfMain_visitor.java
│           │               │   │   ├── MySqlPerfTest.java
│           │               │   │   ├── SqlHolder.java
│           │               │   │   ├── StatementConverter.java
│           │               │   │   └── Templates.java
│           │               │   └── wall/
│           │               │       ├── WallBenchmarkTest.java
│           │               │       ├── WallBenchmarkTest1.java
│           │               │       ├── WallBenchmarkTest_mysql.java
│           │               │       └── WallBenchmarkTest_mysql_concurrent.java
│           │               ├── bvt/
│           │               │   ├── AlipayUseCaseTest.java
│           │               │   ├── OrTest.java
│           │               │   ├── bug/
│           │               │   │   ├── BugSqlParserIllegalWhere.java
│           │               │   │   ├── Bug_for_happyday517.java
│           │               │   │   ├── Bug_for_happyday517_2.java
│           │               │   │   ├── Bug_for_happyday517_3.java
│           │               │   │   ├── Bug_for_order.java
│           │               │   │   ├── Bug_for_qianbi.java
│           │               │   │   ├── Bug_for_ruiyi.java
│           │               │   │   ├── Bug_for_wdw1206.java
│           │               │   │   ├── Bug_for_weizhi.java
│           │               │   │   ├── Bug_for_xuershan.java
│           │               │   │   ├── Issue1576.java
│           │               │   │   ├── Issue1645.java
│           │               │   │   ├── Issue1654.java
│           │               │   │   ├── Issue1695.java
│           │               │   │   ├── Issue1737.java
│           │               │   │   ├── Issue1759.java
│           │               │   │   ├── Issue1762.java
│           │               │   │   ├── Issue1769.java
│           │               │   │   ├── Issue1865.java
│           │               │   │   ├── Issue1898.java
│           │               │   │   ├── Issue1912.java
│           │               │   │   ├── Issue1935.java
│           │               │   │   ├── Issue1994.java
│           │               │   │   ├── Issue2002.java
│           │               │   │   ├── Issue2015.java
│           │               │   │   ├── Issue2049.java
│           │               │   │   ├── Issue2876.java
│           │               │   │   ├── Issue3929.java
│           │               │   │   ├── Issue3952.java
│           │               │   │   ├── Issue4067.java
│           │               │   │   ├── Issue4071.java
│           │               │   │   ├── Issue4253.java
│           │               │   │   ├── Issue5763.java
│           │               │   │   ├── Issue5845.java
│           │               │   │   ├── Issue5847.java
│           │               │   │   ├── Issue_4094.java
│           │               │   │   ├── Issue_4190.java
│           │               │   │   ├── Issue_685.java
│           │               │   │   ├── Issue_697.java
│           │               │   │   └── Issue_728.java
│           │               │   ├── filter/
│           │               │   │   ├── ClearFilterTest.java
│           │               │   │   ├── EncodingConvertFilterTest.java
│           │               │   │   ├── EncodingConvertFilterTest2.java
│           │               │   │   ├── FilterChainImplTest.java
│           │               │   │   ├── FilterChainImplTest2.java
│           │               │   │   ├── FilterChainImplTest3.java
│           │               │   │   ├── FilterChainTest_Clob.java
│           │               │   │   ├── FilterChainTest_Clob_2.java
│           │               │   │   ├── FilterChainTest_NClob.java
│           │               │   │   ├── FilterChainTest_NClob_2.java
│           │               │   │   ├── FilterChainTest_ResultSet.java
│           │               │   │   ├── FilterChainTest_ResultSet_2.java
│           │               │   │   ├── FilterDatasourceConnectAndRecycleFilterTest.java
│           │               │   │   ├── FilterManagerTest.java
│           │               │   │   ├── MySQL8DateTimeSqlTypeFilterTest.java
│           │               │   │   ├── ReuseStatFilterTest.java
│           │               │   │   ├── Slf4jFilterTest.java
│           │               │   │   ├── StatFilterAfterResetTest.java
│           │               │   │   ├── StatFilterBuildSlowParameterTest.java
│           │               │   │   ├── StatFilterClobTest.java
│           │               │   │   ├── StatFilterExecErrorTest.java
│           │               │   │   ├── StatFilterExecuteFirstResultSetTest.java
│           │               │   │   ├── StatFilterExecuteTest.java
│           │               │   │   ├── StatFilterOpenBlobCountTest.java
│           │               │   │   ├── StatFilterOpenBlobCountTest2.java
│           │               │   │   ├── StatFilterOpenClobCountTest.java
│           │               │   │   ├── StatFilterOpenClobCountTest2.java
│           │               │   │   ├── StatFilterOpenInputStreamCountTest.java
│           │               │   │   ├── StatFilterOpenInputStreamCountTest2.java
│           │               │   │   ├── StatFilterOpenReaderCountTest.java
│           │               │   │   ├── StatFilterReadBytesLengthTest.java
│           │               │   │   ├── StatFilterReadStringLengthTest.java
│           │               │   │   ├── StatFilterResultSetMultiCloseTest.java
│           │               │   │   ├── config/
│           │               │   │   │   ├── ConfigFilterTest.java
│           │               │   │   │   ├── ConfigFilterTest1.java
│           │               │   │   │   ├── ConfigFilterTest2.java
│           │               │   │   │   ├── ConfigFilterTest3.java
│           │               │   │   │   ├── ConfigFilterTest4.java
│           │               │   │   │   ├── ConfigFilterTest5.java
│           │               │   │   │   ├── ConfigFilterTest6.java
│           │               │   │   │   └── ConfigToolsTest.java
│           │               │   │   ├── log/
│           │               │   │   │   ├── LogFilterTest.java
│           │               │   │   │   ├── LogFilterTest2.java
│           │               │   │   │   ├── LogFilterTest3.java
│           │               │   │   │   ├── LogFilterTest4.java
│           │               │   │   │   ├── LogFilterTest5.java
│           │               │   │   │   └── Slf4jLogFilterTest.java
│           │               │   │   └── wall/
│           │               │   │       ├── BigSqlTest.java
│           │               │   │       ├── BitwiseAndTest.java
│           │               │   │       ├── BitwiseInvertTest.java
│           │               │   │       ├── BitwiseOrTest.java
│           │               │   │       ├── BitwiseXorTest.java
│           │               │   │       ├── BooleanXorTest.java
│           │               │   │       ├── ConstantArithmeticCheckTest.java
│           │               │   │       ├── CountTest.java
│           │               │   │       ├── DoPrivilegedTest.java
│           │               │   │       ├── IdentEqualsTest.java
│           │               │   │       ├── IdentEqualsTest1.java
│           │               │   │       ├── IntersectTest.java
│           │               │   │       ├── LikeTest.java
│           │               │   │       ├── MinusTest.java
│           │               │   │       ├── MustParameterizedTest.java
│           │               │   │       ├── MustParameterizedTest1.java
│           │               │   │       ├── MustParameterizedTest2.java
│           │               │   │       ├── MustParameterizedTest3.java
│           │               │   │       ├── MustParameterizedTest4.java
│           │               │   │       ├── NoMatchDbWallProvider.java
│           │               │   │       ├── NullWallProvider.java
│           │               │   │       ├── PGDenyFunctionTest.java
│           │               │   │       ├── PGWallTest.java
│           │               │   │       ├── StrictSyntaxCheckTest.java
│           │               │   │       ├── TAEWallTest.java
│           │               │   │       ├── TenantDeleteTest.java
│           │               │   │       ├── TenantInsertTest.java
│           │               │   │       ├── TenantSelectTest.java
│           │               │   │       ├── TenantSelectTest2.java
│           │               │   │       ├── TenantSelectTest3.java
│           │               │   │       ├── TenantSelectTest4.java
│           │               │   │       ├── TenantTestCallBack.java
│           │               │   │       ├── TenantUpdateTest.java
│           │               │   │       ├── Test01WallProviderCreator.java
│           │               │   │       ├── Test02WallProviderCreator.java
│           │               │   │       ├── WallAllowSelectAllColumnDefaultTest.java
│           │               │   │       ├── WallAllowSelectAllColumnTest.java
│           │               │   │       ├── WallAllowSelectAllColumnTest1.java
│           │               │   │       ├── WallAllowSelectAllColumnTest2.java
│           │               │   │       ├── WallAlterTest_0.java
│           │               │   │       ├── WallCallTest.java
│           │               │   │       ├── WallCommentTest.java
│           │               │   │       ├── WallConfigTest.java
│           │               │   │       ├── WallDeleteTest.java
│           │               │   │       ├── WallDeleteWhereTest.java
│           │               │   │       ├── WallDeleteWhereTest1.java
│           │               │   │       ├── WallDeleteWhereTest2.java
│           │               │   │       ├── WallDenySchemaTest.java
│           │               │   │       ├── WallDenyTableTest.java
│           │               │   │       ├── WallDropTest.java
│           │               │   │       ├── WallDropTest1.java
│           │               │   │       ├── WallDropTest2.java
│           │               │   │       ├── WallFilterConfigSpiForNoMatchDbTypeTest.java
│           │               │   │       ├── WallFilterConfigSpiForNullDbTypeTest.java
│           │               │   │       ├── WallFilterTest.java
│           │               │   │       ├── WallFilterTest2.java
│           │               │   │       ├── WallFilterTest3.java
│           │               │   │       ├── WallHavingTest.java
│           │               │   │       ├── WallHavingTest6.java
│           │               │   │       ├── WallInsertTest.java
│           │               │   │       ├── WallInsertTest2.java
│           │               │   │       ├── WallLineCommentTest.java
│           │               │   │       ├── WallMultiLineCommentTest.java
│           │               │   │       ├── WallMultiStatementTest.java
│           │               │   │       ├── WallProviderTest.java
│           │               │   │       ├── WallReadOnlyTest.java
│           │               │   │       ├── WallReadOnlyTest2.java
│           │               │   │       ├── WallSQLExceptionTest.java
│           │               │   │       ├── WallSelectIntoTest.java
│           │               │   │       ├── WallSelectIntoTest1.java
│           │               │   │       ├── WallSelectLimitTest.java
│           │               │   │       ├── WallSelectLimitTest_2.java
│           │               │   │       ├── WallSelectWhereTest.java
│           │               │   │       ├── WallSelectWhereTest0.java
│           │               │   │       ├── WallSelectWhereTest1.java
│           │               │   │       ├── WallSelectWhereTest2.java
│           │               │   │       ├── WallSelectWhereTest3.java
│           │               │   │       ├── WallSelectWhereTest4.java
│           │               │   │       ├── WallSelectWhereTest5.java
│           │               │   │       ├── WallSelectWhereTest6.java
│           │               │   │       ├── WallStatTestWhereAlwaysTrue.java
│           │               │   │       ├── WallStatTest_WhiteList.java
│           │               │   │       ├── WallStatTest_WhiteList_disable.java
│           │               │   │       ├── WallStatTest_alter_table.java
│           │               │   │       ├── WallStatTest_blackList_1.java
│           │               │   │       ├── WallStatTest_blackList_syntaxError.java
│           │               │   │       ├── WallStatTest_blacklist.java
│           │               │   │       ├── WallStatTest_create_table.java
│           │               │   │       ├── WallStatTest_delete.java
│           │               │   │       ├── WallStatTest_drop_table.java
│           │               │   │       ├── WallStatTest_function_stats.java
│           │               │   │       ├── WallStatTest_insert.java
│           │               │   │       ├── WallStatTest_select.java
│           │               │   │       ├── WallStatTest_select_1.java
│           │               │   │       ├── WallStatTest_select_2.java
│           │               │   │       ├── WallStatTest_select_into.java
│           │               │   │       ├── WallStatTest_statMap.java
│           │               │   │       ├── WallStatTest_update.java
│           │               │   │       ├── WallStatTest_whiteList_syntaxError.java
│           │               │   │       ├── WallTruncateTest.java
│           │               │   │       ├── WallTruncateTest1.java
│           │               │   │       ├── WallUnionTest.java
│           │               │   │       ├── WallUnionTest2.java
│           │               │   │       ├── WallUnionTest3.java
│           │               │   │       ├── WallUnionTest4.java
│           │               │   │       ├── WallUpdateCheckTest.java
│           │               │   │       ├── WallUpdateTest.java
│           │               │   │       ├── WallUpdateTest1.java
│           │               │   │       ├── WallUpdateTest2.java
│           │               │   │       ├── WallUpdateTest3.java
│           │               │   │       ├── WallUpdateTest4.java
│           │               │   │       ├── WallUpdateWhereTest.java
│           │               │   │       ├── WallUpdateWhereTest1.java
│           │               │   │       ├── WallVisitorUtilsLargeOrTest.java
│           │               │   │       ├── WallVisitorUtilsTest.java
│           │               │   │       ├── mysql/
│           │               │   │       │   ├── MySqlWallDescribteTest.java
│           │               │   │       │   ├── MySqlWallLimitTest.java
│           │               │   │       │   ├── MySqlWallLoadDataInfileTest.java
│           │               │   │       │   ├── MySqlWallPermitFunctionTest.java
│           │               │   │       │   ├── MySqlWallPermitTableTest.java
│           │               │   │       │   ├── MySqlWallPermitVariantTest.java
│           │               │   │       │   ├── MySqlWallTest.java
│           │               │   │       │   ├── MySqlWallTest1.java
│           │               │   │       │   ├── MySqlWallTest10.java
│           │               │   │       │   ├── MySqlWallTest100.java
│           │               │   │       │   ├── MySqlWallTest101.java
│           │               │   │       │   ├── MySqlWallTest102.java
│           │               │   │       │   ├── MySqlWallTest103.java
│           │               │   │       │   ├── MySqlWallTest104.java
│           │               │   │       │   ├── MySqlWallTest105.java
│           │               │   │       │   ├── MySqlWallTest106.java
│           │               │   │       │   ├── MySqlWallTest107.java
│           │               │   │       │   ├── MySqlWallTest108.java
│           │               │   │       │   ├── MySqlWallTest109.java
│           │               │   │       │   ├── MySqlWallTest11.java
│           │               │   │       │   ├── MySqlWallTest110.java
│           │               │   │       │   ├── MySqlWallTest111.java
│           │               │   │       │   ├── MySqlWallTest112.java
│           │               │   │       │   ├── MySqlWallTest113.java
│           │               │   │       │   ├── MySqlWallTest114.java
│           │               │   │       │   ├── MySqlWallTest115.java
│           │               │   │       │   ├── MySqlWallTest116.java
│           │               │   │       │   ├── MySqlWallTest117.java
│           │               │   │       │   ├── MySqlWallTest118.java
│           │               │   │       │   ├── MySqlWallTest119.java
│           │               │   │       │   ├── MySqlWallTest12.java
│           │               │   │       │   ├── MySqlWallTest120.java
│           │               │   │       │   ├── MySqlWallTest121.java
│           │               │   │       │   ├── MySqlWallTest122.java
│           │               │   │       │   ├── MySqlWallTest123.java
│           │               │   │       │   ├── MySqlWallTest124.java
│           │               │   │       │   ├── MySqlWallTest125.java
│           │               │   │       │   ├── MySqlWallTest126.java
│           │               │   │       │   ├── MySqlWallTest127.java
│           │               │   │       │   ├── MySqlWallTest128.java
│           │               │   │       │   ├── MySqlWallTest129.java
│           │               │   │       │   ├── MySqlWallTest13.java
│           │               │   │       │   ├── MySqlWallTest130.java
│           │               │   │       │   ├── MySqlWallTest131.java
│           │               │   │       │   ├── MySqlWallTest132.java
│           │               │   │       │   ├── MySqlWallTest133.java
│           │               │   │       │   ├── MySqlWallTest134.java
│           │               │   │       │   ├── MySqlWallTest135.java
│           │               │   │       │   ├── MySqlWallTest136.java
│           │               │   │       │   ├── MySqlWallTest137.java
│           │               │   │       │   ├── MySqlWallTest138.java
│           │               │   │       │   ├── MySqlWallTest139.java
│           │               │   │       │   ├── MySqlWallTest14.java
│           │               │   │       │   ├── MySqlWallTest140.java
│           │               │   │       │   ├── MySqlWallTest141.java
│           │               │   │       │   ├── MySqlWallTest142.java
│           │               │   │       │   ├── MySqlWallTest143.java
│           │               │   │       │   ├── MySqlWallTest144.java
│           │               │   │       │   ├── MySqlWallTest145.java
│           │               │   │       │   ├── MySqlWallTest146.java
│           │               │   │       │   ├── MySqlWallTest147_optimize.java
│           │               │   │       │   ├── MySqlWallTest148.java
│           │               │   │       │   ├── MySqlWallTest149.java
│           │               │   │       │   ├── MySqlWallTest15.java
│           │               │   │       │   ├── MySqlWallTest150.java
│           │               │   │       │   ├── MySqlWallTest151_update.java
│           │               │   │       │   ├── MySqlWallTest152.java
│           │               │   │       │   ├── MySqlWallTest16.java
│           │               │   │       │   ├── MySqlWallTest17.java
│           │               │   │       │   ├── MySqlWallTest18.java
│           │               │   │       │   ├── MySqlWallTest19.java
│           │               │   │       │   ├── MySqlWallTest2.java
│           │               │   │       │   ├── MySqlWallTest20.java
│           │               │   │       │   ├── MySqlWallTest21.java
│           │               │   │       │   ├── MySqlWallTest22.java
│           │               │   │       │   ├── MySqlWallTest23.java
│           │               │   │       │   ├── MySqlWallTest24.java
│           │               │   │       │   ├── MySqlWallTest25.java
│           │               │   │       │   ├── MySqlWallTest26.java
│           │               │   │       │   ├── MySqlWallTest27.java
│           │               │   │       │   ├── MySqlWallTest28.java
│           │               │   │       │   ├── MySqlWallTest29.java
│           │               │   │       │   ├── MySqlWallTest3.java
│           │               │   │       │   ├── MySqlWallTest30.java
│           │               │   │       │   ├── MySqlWallTest31.java
│           │               │   │       │   ├── MySqlWallTest32.java
│           │               │   │       │   ├── MySqlWallTest33.java
│           │               │   │       │   ├── MySqlWallTest34.java
│           │               │   │       │   ├── MySqlWallTest35.java
│           │               │   │       │   ├── MySqlWallTest36.java
│           │               │   │       │   ├── MySqlWallTest37.java
│           │               │   │       │   ├── MySqlWallTest38.java
│           │               │   │       │   ├── MySqlWallTest39.java
│           │               │   │       │   ├── MySqlWallTest4.java
│           │               │   │       │   ├── MySqlWallTest40.java
│           │               │   │       │   ├── MySqlWallTest41.java
│           │               │   │       │   ├── MySqlWallTest42.java
│           │               │   │       │   ├── MySqlWallTest43.java
│           │               │   │       │   ├── MySqlWallTest44.java
│           │               │   │       │   ├── MySqlWallTest45.java
│           │               │   │       │   ├── MySqlWallTest46.java
│           │               │   │       │   ├── MySqlWallTest47.java
│           │               │   │       │   ├── MySqlWallTest48.java
│           │               │   │       │   ├── MySqlWallTest49.java
│           │               │   │       │   ├── MySqlWallTest5.java
│           │               │   │       │   ├── MySqlWallTest50.java
│           │               │   │       │   ├── MySqlWallTest51.java
│           │               │   │       │   ├── MySqlWallTest52.java
│           │               │   │       │   ├── MySqlWallTest53.java
│           │               │   │       │   ├── MySqlWallTest54.java
│           │               │   │       │   ├── MySqlWallTest55.java
│           │               │   │       │   ├── MySqlWallTest56.java
│           │               │   │       │   ├── MySqlWallTest57.java
│           │               │   │       │   ├── MySqlWallTest58.java
│           │               │   │       │   ├── MySqlWallTest59.java
│           │               │   │       │   ├── MySqlWallTest6.java
│           │               │   │       │   ├── MySqlWallTest60.java
│           │               │   │       │   ├── MySqlWallTest61.java
│           │               │   │       │   ├── MySqlWallTest62.java
│           │               │   │       │   ├── MySqlWallTest63.java
│           │               │   │       │   ├── MySqlWallTest64.java
│           │               │   │       │   ├── MySqlWallTest65.java
│           │               │   │       │   ├── MySqlWallTest66.java
│           │               │   │       │   ├── MySqlWallTest67.java
│           │               │   │       │   ├── MySqlWallTest68.java
│           │               │   │       │   ├── MySqlWallTest69.java
│           │               │   │       │   ├── MySqlWallTest7.java
│           │               │   │       │   ├── MySqlWallTest70.java
│           │               │   │       │   ├── MySqlWallTest71.java
│           │               │   │       │   ├── MySqlWallTest72.java
│           │               │   │       │   ├── MySqlWallTest73.java
│           │               │   │       │   ├── MySqlWallTest74.java
│           │               │   │       │   ├── MySqlWallTest75.java
│           │               │   │       │   ├── MySqlWallTest76.java
│           │               │   │       │   ├── MySqlWallTest77.java
│           │               │   │       │   ├── MySqlWallTest78.java
│           │               │   │       │   ├── MySqlWallTest79.java
│           │               │   │       │   ├── MySqlWallTest8.java
│           │               │   │       │   ├── MySqlWallTest80.java
│           │               │   │       │   ├── MySqlWallTest81.java
│           │               │   │       │   ├── MySqlWallTest82.java
│           │               │   │       │   ├── MySqlWallTest83.java
│           │               │   │       │   ├── MySqlWallTest84.java
│           │               │   │       │   ├── MySqlWallTest85.java
│           │               │   │       │   ├── MySqlWallTest86.java
│           │               │   │       │   ├── MySqlWallTest87.java
│           │               │   │       │   ├── MySqlWallTest88.java
│           │               │   │       │   ├── MySqlWallTest89.java
│           │               │   │       │   ├── MySqlWallTest9.java
│           │               │   │       │   ├── MySqlWallTest90.java
│           │               │   │       │   ├── MySqlWallTest91.java
│           │               │   │       │   ├── MySqlWallTest92.java
│           │               │   │       │   ├── MySqlWallTest93.java
│           │               │   │       │   ├── MySqlWallTest94.java
│           │               │   │       │   ├── MySqlWallTest95.java
│           │               │   │       │   ├── MySqlWallTest96.java
│           │               │   │       │   ├── MySqlWallTest97.java
│           │               │   │       │   ├── MySqlWallTest98.java
│           │               │   │       │   ├── MySqlWallTest99.java
│           │               │   │       │   ├── MySqlWallTest_comment.java
│           │               │   │       │   ├── MySqlWallTest_concat.java
│           │               │   │       │   ├── MySqlWallTest_having.java
│           │               │   │       │   ├── MySqlWallTest_hint.java
│           │               │   │       │   ├── MySqlWallTest_if.java
│           │               │   │       │   ├── MySqlWallTest_ifnull_1.java
│           │               │   │       │   ├── MySqlWallTest_ifnull_2.java
│           │               │   │       │   ├── MySqlWallTest_like_1.java
│           │               │   │       │   ├── MySqlWallTest_sqlmap.java
│           │               │   │       │   ├── MySqlWallTest_union.java
│           │               │   │       │   ├── MySqlWallTest_var.java
│           │               │   │       │   ├── MySqlWallTest_var_autoincrement.java
│           │               │   │       │   └── MysqlWallTest_rename_table.java
│           │               │   │       ├── oracle/
│           │               │   │       │   ├── OracleWallPermitFunctionTest.java
│           │               │   │       │   ├── OracleWallPermitObjectTest.java
│           │               │   │       │   ├── OracleWallPermitSchemaTest.java
│           │               │   │       │   ├── OracleWallPermitTableTest.java
│           │               │   │       │   ├── OracleWallPermitVariantTest.java
│           │               │   │       │   ├── OracleWallPermitVariantTest2.java
│           │               │   │       │   ├── OracleWallResourceTest.java
│           │               │   │       │   ├── OracleWallTest.java
│           │               │   │       │   ├── OracleWallTest1.java
│           │               │   │       │   ├── OracleWallTest10.java
│           │               │   │       │   ├── OracleWallTest2.java
│           │               │   │       │   ├── OracleWallTest3.java
│           │               │   │       │   ├── OracleWallTest4.java
│           │               │   │       │   ├── OracleWallTest5.java
│           │               │   │       │   ├── OracleWallTest6.java
│           │               │   │       │   ├── OracleWallTest7.java
│           │               │   │       │   ├── OracleWallTest8_alter_rebuild.java
│           │               │   │       │   └── OracleWallTest9_exists.java
│           │               │   │       ├── pg/
│           │               │   │       │   ├── PGWallTest1.java
│           │               │   │       │   └── PGWallTest2.java
│           │               │   │       └── sqlserver/
│           │               │   │           ├── SQLServerWallPermitFunctionTest.java
│           │               │   │           ├── SQLServerWallPermitObjectTest.java
│           │               │   │           ├── SQLServerWallPermitSchemaTest.java
│           │               │   │           ├── SQLServerWallPermitTableTest.java
│           │               │   │           ├── SQLServerWallTest.java
│           │               │   │           ├── SQLServerWallTest_0.java
│           │               │   │           ├── SQLServerWallTest_1.java
│           │               │   │           ├── SQLServerWallTest_10.java
│           │               │   │           ├── SQLServerWallTest_11.java
│           │               │   │           ├── SQLServerWallTest_12.java
│           │               │   │           ├── SQLServerWallTest_2.java
│           │               │   │           ├── SQLServerWallTest_3.java
│           │               │   │           ├── SQLServerWallTest_4.java
│           │               │   │           ├── SQLServerWallTest_5.java
│           │               │   │           ├── SQLServerWallTest_6.java
│           │               │   │           ├── SQLServerWallTest_7.java
│           │               │   │           ├── SQLServerWallTest_8.java
│           │               │   │           └── SQLServerWallTest_9.java
│           │               │   ├── hibernate/
│           │               │   │   ├── HibernateCRUDTest.java
│           │               │   │   └── entity/
│           │               │   │       └── Sample.java
│           │               │   ├── jmx/
│           │               │   │   ├── DupRegisterTest.java
│           │               │   │   └── JMXExporterTest.java
│           │               │   ├── log/
│           │               │   │   └── LoggerTest.java
│           │               │   ├── mock/
│           │               │   │   ├── MockExecuteTest.java
│           │               │   │   └── MockResultSetMetaDataTest.java
│           │               │   ├── pool/
│           │               │   │   ├── AsyncInitTest.java
│           │               │   │   ├── AsyncInitTest_1_scheduler.java
│           │               │   │   ├── Bug_for_dupCloseStmtError.java
│           │               │   │   ├── CallableStatmentTest.java
│           │               │   │   ├── Case0.java
│           │               │   │   ├── Case1.java
│           │               │   │   ├── Case2.java
│           │               │   │   ├── Case3.java
│           │               │   │   ├── ClosedTest.java
│           │               │   │   ├── ConfigErrorTest.java
│           │               │   │   ├── ConfigErrorTest2.java
│           │               │   │   ├── ConfigErrorTest3.java
│           │               │   │   ├── ConfigErrorTestMysql.java
│           │               │   │   ├── CreateSchedulerTest.java
│           │               │   │   ├── CreateSchedulerTest_directCreate.java
│           │               │   │   ├── DataSourceDisableExceptionTest.java
│           │               │   │   ├── DestorySchedulerTest.java
│           │               │   │   ├── DruidConnectionHolderTest.java
│           │               │   │   ├── DruidConnectionHolderTest2.java
│           │               │   │   ├── DruidConnectionHolderTest3.java
│           │               │   │   ├── DruidConnectionHolderTest4.java
│           │               │   │   ├── DruidDataSourceAsyncCloseTest.java
│           │               │   │   ├── DruidDataSourceC3P0AdapterTest.java
│           │               │   │   ├── DruidDataSourceConverterTest.java
│           │               │   │   ├── DruidDataSourceDecryptTest.java
│           │               │   │   ├── DruidDataSourceFactoryTest.java
│           │               │   │   ├── DruidDataSourceFactoryTest0.java
│           │               │   │   ├── DruidDataSourceFactoryTest1.java
│           │               │   │   ├── DruidDataSourceFactoryTest2.java
│           │               │   │   ├── DruidDataSourceFilterTest.java
│           │               │   │   ├── DruidDataSourceShrinkTest.java
│           │               │   │   ├── DruidDataSourceTest.java
│           │               │   │   ├── DruidDataSourceTest1.java
│           │               │   │   ├── DruidDataSourceTest10.java
│           │               │   │   ├── DruidDataSourceTest2.java
│           │               │   │   ├── DruidDataSourceTest3.java
│           │               │   │   ├── DruidDataSourceTest4.java
│           │               │   │   ├── DruidDataSourceTest5.java
│           │               │   │   ├── DruidDataSourceTest6.java
│           │               │   │   ├── DruidDataSourceTest7.java
│           │               │   │   ├── DruidDataSourceTest8.java
│           │               │   │   ├── DruidDataSourceTest9_phyMaxUseCount.java
│           │               │   │   ├── DruidDataSourceTestValidConnectionChecker.java
│           │               │   │   ├── DruidDataSourceTest_autocommit.java
│           │               │   │   ├── DruidDataSourceTest_autocommit2.java
│           │               │   │   ├── DruidDataSourceTest_autocommit3.java
│           │               │   │   ├── DruidDataSourceTest_autocommit4.java
│           │               │   │   ├── DruidDataSourceTest_clearCache.java
│           │               │   │   ├── DruidDataSourceTest_closeError.java
│           │               │   │   ├── DruidDataSourceTest_createError.java
│           │               │   │   ├── DruidDataSourceTest_enable.java
│           │               │   │   ├── DruidDataSourceTest_exceptionSorter.java
│           │               │   │   ├── DruidDataSourceTest_exceptionSorter_extend.java
│           │               │   │   ├── DruidDataSourceTest_fill.java
│           │               │   │   ├── DruidDataSourceTest_fill2.java
│           │               │   │   ├── DruidDataSourceTest_getConnection.java
│           │               │   │   ├── DruidDataSourceTest_getConnection_2.java
│           │               │   │   ├── DruidDataSourceTest_getPooledConnection.java
│           │               │   │   ├── DruidDataSourceTest_getPoolingPeakTime.java
│           │               │   │   ├── DruidDataSourceTest_getProperties.java
│           │               │   │   ├── DruidDataSourceTest_initSql.java
│           │               │   │   ├── DruidDataSourceTest_initSql_factory.java
│           │               │   │   ├── DruidDataSourceTest_initSqls.java
│           │               │   │   ├── DruidDataSourceTest_interrupt.java
│           │               │   │   ├── DruidDataSourceTest_interrupt2.java
│           │               │   │   ├── DruidDataSourceTest_interrupt3.java
│           │               │   │   ├── DruidDataSourceTest_lastCreateError.java
│           │               │   │   ├── DruidDataSourceTest_lastError.java
│           │               │   │   ├── DruidDataSourceTest_loadSysPropertyFilter.java
│           │               │   │   ├── DruidDataSourceTest_maxActive1.java
│           │               │   │   ├── DruidDataSourceTest_maxActive2.java
│           │               │   │   ├── DruidDataSourceTest_maxActive3.java
│           │               │   │   ├── DruidDataSourceTest_maxActive4.java
│           │               │   │   ├── DruidDataSourceTest_maxWait.java
│           │               │   │   ├── DruidDataSourceTest_notEmptyWait.java
│           │               │   │   ├── DruidDataSourceTest_notEmptyWait2.java
│           │               │   │   ├── DruidDataSourceTest_oracle.java
│           │               │   │   ├── DruidDataSourceTest_oracle2.java
│           │               │   │   ├── DruidDataSourceTest_oracle3.java
│           │               │   │   ├── DruidDataSourceTest_oracle_error.java
│           │               │   │   ├── DruidDataSourceTest_recycle.java
│           │               │   │   ├── DruidDataSourceTest_recycle2.java
│           │               │   │   ├── DruidDataSourceTest_testOnBorrowFailed.java
│           │               │   │   ├── DruidDataSourceTest_testOnWhileIdleFailed.java
│           │               │   │   ├── DruidDataSourceTest_tryGet.java
│           │               │   │   ├── DruidDataSourceTest_wrapDriverFilters.java
│           │               │   │   ├── DruidPooledCallableStatementTest.java
│           │               │   │   ├── DruidPooledConnectionTest.java
│           │               │   │   ├── DruidPooledConnectionTest1.java
│           │               │   │   ├── DruidPooledConnectionTest2.java
│           │               │   │   ├── DruidPooledConnectionTest_prepareError.java
│           │               │   │   ├── DruidPooledPreparedStatementTest.java
│           │               │   │   ├── DruidPooledPreparedStatementTest1.java
│           │               │   │   ├── DruidPooledResultSetTest.java
│           │               │   │   ├── DruidPooledResultSetTest2.java
│           │               │   │   ├── DruidPooledStatementTest.java
│           │               │   │   ├── DumpTest.java
│           │               │   │   ├── ExceptionSorterTest.java
│           │               │   │   ├── FullTest.java
│           │               │   │   ├── HoldableUnsupportTest.java
│           │               │   │   ├── InitExceptionThrowTest.java
│           │               │   │   ├── Issue4316.java
│           │               │   │   ├── JdbcDataSourceStatTest.java
│           │               │   │   ├── KeepAliveTest.java
│           │               │   │   ├── KeepAliveTest_scheduler.java
│           │               │   │   ├── LastActiveTest_0.java
│           │               │   │   ├── LockFairTest.java
│           │               │   │   ├── ManagedDataSourceTest.java
│           │               │   │   ├── MaxWaitTest.java
│           │               │   │   ├── OnFatalErrorMaxActiveTest.java
│           │               │   │   ├── OnFatalErrorMaxActiveTest_1.java
│           │               │   │   ├── PSCacheTest.java
│           │               │   │   ├── PSCacheTest1.java
│           │               │   │   ├── PSCacheTest2.java
│           │               │   │   ├── PSCacheTest3.java
│           │               │   │   ├── PSCacheTest4.java
│           │               │   │   ├── ParamTest.java
│           │               │   │   ├── PasswordCallbackTest.java
│           │               │   │   ├── PreparedStatementKeyTest.java
│           │               │   │   ├── PreparedStatementProxyImplTest.java
│           │               │   │   ├── RegisterTest.java
│           │               │   │   ├── SavepointTest.java
│           │               │   │   ├── SlowSqlMillisTest.java
│           │               │   │   ├── SlowSqlMillisTest2.java
│           │               │   │   ├── SpringIbatisFilterTest.java
│           │               │   │   ├── SpringMybatisFilterTest.java
│           │               │   │   ├── TestActiveTrace.java
│           │               │   │   ├── TestClone.java
│           │               │   │   ├── TestClose_0.java
│           │               │   │   ├── TestClose_1.java
│           │               │   │   ├── TestClose_2.java
│           │               │   │   ├── TestConnectError.java
│           │               │   │   ├── TestConnectTimeout.java
│           │               │   │   ├── TestDefault.java
│           │               │   │   ├── TestDisable.java
│           │               │   │   ├── TestDruidDataSource.java
│           │               │   │   ├── TestGetUpdateCount.java
│           │               │   │   ├── TestGraceShutdown.java
│           │               │   │   ├── TestH2.java
│           │               │   │   ├── TestIdle.java
│           │               │   │   ├── TestIdle2.java
│           │               │   │   ├── TestIdle3.java
│           │               │   │   ├── TestLogLongTimeTransaction.java
│           │               │   │   ├── TestOnBorrowFileAndNameTest.java
│           │               │   │   ├── TestOraclePrefetch.java
│           │               │   │   ├── TestOracleWall.java
│           │               │   │   ├── TestOracleWall2.java
│           │               │   │   ├── TestOracleWall3.java
│           │               │   │   ├── TestOracleWallJdbc3.java
│           │               │   │   ├── TestOracleWrap.java
│           │               │   │   ├── TestOracleWrap2.java
│           │               │   │   ├── TestPoolPreparedStatement.java
│           │               │   │   ├── TestPoolPreparedStatement2.java
│           │               │   │   ├── TestRemoveAbandoned.java
│           │               │   │   ├── TestRemoveAbandoned2.java
│           │               │   │   ├── TestSharePreparedStatements.java
│           │               │   │   ├── TestStat.java
│           │               │   │   ├── TimeBetweenLogStatsMillisTest.java
│           │               │   │   ├── TimeBetweenLogStatsMillisTest2.java
│           │               │   │   ├── TimeBetweenLogStatsMillisTest3.java
│           │               │   │   ├── TransactionTest.java
│           │               │   │   ├── UnwrapTest.java
│           │               │   │   ├── UnwrapTest2.java
│           │               │   │   ├── UnwrapTest_filter.java
│           │               │   │   ├── UrlNotSetTest.java
│           │               │   │   ├── UserPasswordVersionTest.java
│           │               │   │   ├── UsingDefaultLockModeBenchmarkTest.java
│           │               │   │   ├── UsingFairLockBenchmarkTest.java
│           │               │   │   ├── UsingUnfairLockBenchmarkTest.java
│           │               │   │   ├── ValidationQueryLogDB2Test.java
│           │               │   │   ├── ValidationQueryLogTest.java
│           │               │   │   ├── adapter/
│           │               │   │   │   ├── DruidDataSourceC3P0AdapterTest.java
│           │               │   │   │   └── DruidDataSourceC3P0AdapterTest2.java
│           │               │   │   ├── basic/
│           │               │   │   │   ├── ConnectionTest.java
│           │               │   │   │   ├── ConnectionTest2.java
│           │               │   │   │   ├── ConnectionTest3.java
│           │               │   │   │   ├── ConnectionTest4.java
│           │               │   │   │   ├── ConnectionTest5.java
│           │               │   │   │   ├── DataSourceTest3.java
│           │               │   │   │   ├── DruidDataSourceFactoryTest.java
│           │               │   │   │   ├── MaxEvictableIdleTimeMillisTest.java
│           │               │   │   │   ├── MaxEvictableIdleTimeMillisTest2.java
│           │               │   │   │   ├── MaxPhyTimeMillisTest.java
│           │               │   │   │   ├── PoolableCallableStatementTest.java
│           │               │   │   │   ├── PoolablePreparedStatementTest.java
│           │               │   │   │   ├── PoolableStatementTest.java
│           │               │   │   │   ├── PoolableStatementTest2.java
│           │               │   │   │   ├── PoolableStatementTest3.java
│           │               │   │   │   ├── PoolableWrapperTest.java
│           │               │   │   │   ├── PreparedStatementKeyTest.java
│           │               │   │   │   ├── ResultSetTest.java
│           │               │   │   │   ├── ResultSetTest2.java
│           │               │   │   │   ├── TestCommit.java
│           │               │   │   │   ├── TestDataSourceBasic.java
│           │               │   │   │   └── TestDataSourceBasic2.java
│           │               │   │   ├── dynamic/
│           │               │   │   │   ├── ConnectPropertiesChangeTest.java
│           │               │   │   │   ├── ConnectPropertiesChangeTest1.java
│           │               │   │   │   ├── DruidDataSourceStatLoggerImplTest.java
│           │               │   │   │   ├── MaxActiveChangeTest.java
│           │               │   │   │   ├── PoolPreparedStatementsChangeTest.java
│           │               │   │   │   └── SqlSkipCountTest.java
│           │               │   │   ├── exception/
│           │               │   │   │   ├── OceanBaseOracleExceptionSorterTest.java
│           │               │   │   │   ├── OracleExceptionSorterTest.java
│           │               │   │   │   ├── OracleExceptionSorterTest_closeConn.java
│           │               │   │   │   ├── OracleExceptionSorterTest_closeConn_1.java
│           │               │   │   │   ├── OracleExceptionSorterTest_closeConn_2.java
│           │               │   │   │   ├── OracleExceptionSorterTest_closeConn_3.java
│           │               │   │   │   ├── OracleExceptionSorterTest_closeConnectFailedDatasource.java
│           │               │   │   │   ├── OracleExceptionSorterTest_closeStmt.java
│           │               │   │   │   ├── OracleExceptionSorterTest_commit.java
│           │               │   │   │   ├── OracleExceptionSorterTest_concurrent.java
│           │               │   │   │   ├── OracleExceptionSorterTest_rollback.java
│           │               │   │   │   ├── OracleExceptionSorterTest_setCatalog.java
│           │               │   │   │   ├── OracleExceptionSorterTest_setIsolationLevel.java
│           │               │   │   │   ├── OracleExceptionSorterTest_setReadOnly.java
│           │               │   │   │   ├── OracleExceptionSorterTest_setSavepoint.java
│           │               │   │   │   ├── OracleExceptionSorterTest_setSavepointWithName.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_addBatch.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_cancel.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_clearBatch.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_clearWarrnings.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_execute.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_executeBatch.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_executeQuery.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_executeUpdate.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_executeUpdate_1.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_executeUpdate_2.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_executeUpdate_3.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_execute_1.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_execute_2.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_execute_3.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getFetchDirection.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getFetchSize.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getGeneratedKeys.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getMaxField.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getMaxRows.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getMoreResults.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getMoreResults_1.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getQueryTimeout.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getResultSet.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getResultSetConcurrency.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getResultSetHoldability.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getResultSetType.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getUpdateCount.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getWarrnings.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_setCursorName.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_setEscapeProcessing.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_setFetchDirection.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_setFetchSize.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_setMaxField.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_setMaxRows.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_setQueryTimeout.java
│           │               │   │   │   ├── OracleExceptionSorter_userDefined.java
│           │               │   │   │   └── OracleExceptionSorter_userDefined_1.java
│           │               │   │   ├── profile/
│           │               │   │   │   ├── FailFastTest.java
│           │               │   │   │   └── ProfileEnableTest.java
│           │               │   │   ├── property/
│           │               │   │   │   ├── PropertyTest_filters.java
│           │               │   │   │   ├── PropertyTest_testOnBorrow.java
│           │               │   │   │   ├── PropertyTest_testWhileIdle.java
│           │               │   │   │   ├── PropertyTest_useGlobalDataSourceStat.java
│           │               │   │   │   └── PropertyTest_validationQuery.java
│           │               │   │   ├── vendor/
│           │               │   │   │   ├── InformixExceptionSorterTest.java
│           │               │   │   │   ├── MSSQLValidConnectionCheckerTest.java
│           │               │   │   │   ├── MySQLValidConnectionCheckerTest.java
│           │               │   │   │   ├── MySqlExceptionSorterTest.java
│           │               │   │   │   ├── MySqlExceptionSorterTest_1.java
│           │               │   │   │   ├── MySqlExceptionSorterTest_2.java
│           │               │   │   │   ├── MySqlExceptionSorterTest_oceanbase.java
│           │               │   │   │   ├── PGExceptionSorterTest.java
│           │               │   │   │   ├── SybaseExceptionSorterTest.java
│           │               │   │   │   └── ValidConnectionCheckerAdapterTest.java
│           │               │   │   └── xa/
│           │               │   │       ├── H2XATest.java
│           │               │   │       └── JtdsXAConnectionTest.java
│           │               │   ├── proxy/
│           │               │   │   ├── AllStatisticTest.java
│           │               │   │   ├── BasicTypeTest.java
│           │               │   │   ├── BatchReadTest.java
│           │               │   │   ├── BlobTest.java
│           │               │   │   ├── CallStatementTest.java
│           │               │   │   ├── CallableStatementProxyImplTest.java
│           │               │   │   ├── ClobTest.java
│           │               │   │   ├── CommonsLogFilterTest.java
│           │               │   │   ├── ConnectionProxyImplTest.java
│           │               │   │   ├── ConnectionStatisticTest.java
│           │               │   │   ├── ConnectionTest.java
│           │               │   │   ├── CounterFilterTest.java
│           │               │   │   ├── DriverTest.java
│           │               │   │   ├── DruidDriverTest.java
│           │               │   │   ├── InsertValues.java
│           │               │   │   ├── InsertValues_1.java
│           │               │   │   ├── InsertValues_2.java
│           │               │   │   ├── JdbcFilterEventAdapterTest.java
│           │               │   │   ├── JdbcUtilsTest.java
│           │               │   │   ├── Log4j2FilterTest.java
│           │               │   │   ├── Log4jFilterTest.java
│           │               │   │   ├── LogFilterTest.java
│           │               │   │   ├── PrecallTest.java
│           │               │   │   ├── PreparedStatementProxyImplGetParametersTest.java
│           │               │   │   ├── PreparedStatementTest.java
│           │               │   │   ├── ProxyDriverTest.java
│           │               │   │   ├── ResultSetProxyImplTest.java
│           │               │   │   ├── SchemaReadTest.java
│           │               │   │   ├── SqlStatisticTest.java
│           │               │   │   ├── StatementTest.java
│           │               │   │   ├── StatisticTest.java
│           │               │   │   ├── WrapImplTest.java
│           │               │   │   ├── fake/
│           │               │   │   │   ├── DruidDriverTest.java
│           │               │   │   │   └── FakeDriverTest.java
│           │               │   │   ├── filter/
│           │               │   │   │   ├── ClobTest.java
│           │               │   │   │   ├── GlobalStatTest0.java
│           │               │   │   │   ├── GlobalStatTest1.java
│           │               │   │   │   ├── MergeStatFilterTest.java
│           │               │   │   │   ├── MergeStatFilterTest2.java
│           │               │   │   │   ├── MergeStatFilterTest3.java
│           │               │   │   │   ├── MergeStatFilterTest_tddl.java
│           │               │   │   │   ├── MergeStatFilterTest_tddl_1.java
│           │               │   │   │   ├── MergeStatFilterTest_tddl_2.java
│           │               │   │   │   ├── MergeStatFilterTest_tddl_3.java
│           │               │   │   │   ├── MergeStatFilterTest_tddl_4.java
│           │               │   │   │   ├── StatFilterConcurrentTest.java
│           │               │   │   │   ├── StatFilterTest.java
│           │               │   │   │   ├── StatFilterTest2.java
│           │               │   │   │   ├── StatFilterTest3.java
│           │               │   │   │   └── encoding/
│           │               │   │   │       ├── CharsetConvertTest.java
│           │               │   │   │       └── CharsetParameterTest.java
│           │               │   │   └── utils/
│           │               │   │       └── DruidLoaderUtilsTest.java
│           │               │   ├── spring/
│           │               │   │   ├── DruidJdbcExtractorTest.java
│           │               │   │   ├── SpringMethodInfoTest.java
│           │               │   │   ├── SqlMapClientWrapperTest.java
│           │               │   │   ├── SqlMapExecutorWrapperTest.java
│           │               │   │   ├── SqlMapExecutorWrapperTest_2.java
│           │               │   │   └── SqlMapSessionWrapperTest.java
│           │               │   ├── sql/
│           │               │   │   ├── BigOrTest.java
│           │               │   │   ├── CompatibleTest.java
│           │               │   │   ├── Crea

================================================
FILE CONTENTS
================================================

================================================
FILE: .cursor/commands/opsx-apply.md
================================================
---
name: /opsx-apply
id: opsx-apply
category: Workflow
description: Implement tasks from an OpenSpec change (Experimental)
---

Implement tasks from an OpenSpec change.

**Input**: Optionally specify a change name (e.g., `/opsx:apply add-auth`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.

**Steps**

1. **Select the change**

   If a name is provided, use it. Otherwise:
   - Infer from conversation context if the user mentioned a change
   - Auto-select if only one active change exists
   - If ambiguous, run `openspec list --json` to get available changes and use the **AskUserQuestion tool** to let the user select

   Always announce: "Using change: <name>" and how to override (e.g., `/opsx:apply <other>`).

2. **Check status to understand the schema**
   ```bash
   openspec status --change "<name>" --json
   ```
   Parse the JSON to understand:
   - `schemaName`: The workflow being used (e.g., "spec-driven")
   - Which artifact contains the tasks (typically "tasks" for spec-driven, check status for others)

3. **Get apply instructions**

   ```bash
   openspec instructions apply --change "<name>" --json
   ```

   This returns:
   - Context file paths (varies by schema)
   - Progress (total, complete, remaining)
   - Task list with status
   - Dynamic instruction based on current state

   **Handle states:**
   - If `state: "blocked"` (missing artifacts): show message, suggest using `/opsx:continue`
   - If `state: "all_done"`: congratulate, suggest archive
   - Otherwise: proceed to implementation

4. **Read context files**

   Read the files listed in `contextFiles` from the apply instructions output.
   The files depend on the schema being used:
   - **spec-driven**: proposal, specs, design, tasks
   - Other schemas: follow the contextFiles from CLI output

5. **Show current progress**

   Display:
   - Schema being used
   - Progress: "N/M tasks complete"
   - Remaining tasks overview
   - Dynamic instruction from CLI

6. **Implement tasks (loop until done or blocked)**

   For each pending task:
   - Show which task is being worked on
   - Make the code changes required
   - Keep changes minimal and focused
   - Mark task complete in the tasks file: `- [ ]` → `- [x]`
   - Continue to next task

   **Pause if:**
   - Task is unclear → ask for clarification
   - Implementation reveals a design issue → suggest updating artifacts
   - Error or blocker encountered → report and wait for guidance
   - User interrupts

7. **On completion or pause, show status**

   Display:
   - Tasks completed this session
   - Overall progress: "N/M tasks complete"
   - If all done: suggest archive
   - If paused: explain why and wait for guidance

**Output During Implementation**

```
## Implementing: <change-name> (schema: <schema-name>)

Working on task 3/7: <task description>
[...implementation happening...]
✓ Task complete

Working on task 4/7: <task description>
[...implementation happening...]
✓ Task complete
```

**Output On Completion**

```
## Implementation Complete

**Change:** <change-name>
**Schema:** <schema-name>
**Progress:** 7/7 tasks complete ✓

### Completed This Session
- [x] Task 1
- [x] Task 2
...

All tasks complete! You can archive this change with `/opsx:archive`.
```

**Output On Pause (Issue Encountered)**

```
## Implementation Paused

**Change:** <change-name>
**Schema:** <schema-name>
**Progress:** 4/7 tasks complete

### Issue Encountered
<description of the issue>

**Options:**
1. <option 1>
2. <option 2>
3. Other approach

What would you like to do?
```

**Guardrails**
- Keep going through tasks until done or blocked
- Always read context files before starting (from the apply instructions output)
- If task is ambiguous, pause and ask before implementing
- If implementation reveals issues, pause and suggest artifact updates
- Keep code changes minimal and scoped to each task
- Update task checkbox immediately after completing each task
- Pause on errors, blockers, or unclear requirements - don't guess
- Use contextFiles from CLI output, don't assume specific file names

**Fluid Workflow Integration**

This skill supports the "actions on a change" model:

- **Can be invoked anytime**: Before all artifacts are done (if tasks exist), after partial implementation, interleaved with other actions
- **Allows artifact updates**: If implementation reveals design issues, suggest updating artifacts - not phase-locked, work fluidly


================================================
FILE: .cursor/commands/opsx-archive.md
================================================
---
name: /opsx-archive
id: opsx-archive
category: Workflow
description: Archive a completed change in the experimental workflow
---

Archive a completed change in the experimental workflow.

**Input**: Optionally specify a change name after `/opsx:archive` (e.g., `/opsx:archive add-auth`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.

**Steps**

1. **If no change name provided, prompt for selection**

   Run `openspec list --json` to get available changes. Use the **AskUserQuestion tool** to let the user select.

   Show only active changes (not already archived).
   Include the schema used for each change if available.

   **IMPORTANT**: Do NOT guess or auto-select a change. Always let the user choose.

2. **Check artifact completion status**

   Run `openspec status --change "<name>" --json` to check artifact completion.

   Parse the JSON to understand:
   - `schemaName`: The workflow being used
   - `artifacts`: List of artifacts with their status (`done` or other)

   **If any artifacts are not `done`:**
   - Display warning listing incomplete artifacts
   - Prompt user for confirmation to continue
   - Proceed if user confirms

3. **Check task completion status**

   Read the tasks file (typically `tasks.md`) to check for incomplete tasks.

   Count tasks marked with `- [ ]` (incomplete) vs `- [x]` (complete).

   **If incomplete tasks found:**
   - Display warning showing count of incomplete tasks
   - Prompt user for confirmation to continue
   - Proceed if user confirms

   **If no tasks file exists:** Proceed without task-related warning.

4. **Assess delta spec sync state**

   Check for delta specs at `openspec/changes/<name>/specs/`. If none exist, proceed without sync prompt.

   **If delta specs exist:**
   - Compare each delta spec with its corresponding main spec at `openspec/specs/<capability>/spec.md`
   - Determine what changes would be applied (adds, modifications, removals, renames)
   - Show a combined summary before prompting

   **Prompt options:**
   - If changes needed: "Sync now (recommended)", "Archive without syncing"
   - If already synced: "Archive now", "Sync anyway", "Cancel"

   If user chooses sync, execute `/opsx:sync` logic. Proceed to archive regardless of choice.

5. **Perform the archive**

   Create the archive directory if it doesn't exist:
   ```bash
   mkdir -p openspec/changes/archive
   ```

   Generate target name using current date: `YYYY-MM-DD-<change-name>`

   **Check if target already exists:**
   - If yes: Fail with error, suggest renaming existing archive or using different date
   - If no: Move the change directory to archive

   ```bash
   mv openspec/changes/<name> openspec/changes/archive/YYYY-MM-DD-<name>
   ```

6. **Display summary**

   Show archive completion summary including:
   - Change name
   - Schema that was used
   - Archive location
   - Spec sync status (synced / sync skipped / no delta specs)
   - Note about any warnings (incomplete artifacts/tasks)

**Output On Success**

```
## Archive Complete

**Change:** <change-name>
**Schema:** <schema-name>
**Archived to:** openspec/changes/archive/YYYY-MM-DD-<name>/
**Specs:** ✓ Synced to main specs

All artifacts complete. All tasks complete.
```

**Output On Success (No Delta Specs)**

```
## Archive Complete

**Change:** <change-name>
**Schema:** <schema-name>
**Archived to:** openspec/changes/archive/YYYY-MM-DD-<name>/
**Specs:** No delta specs

All artifacts complete. All tasks complete.
```

**Output On Success With Warnings**

```
## Archive Complete (with warnings)

**Change:** <change-name>
**Schema:** <schema-name>
**Archived to:** openspec/changes/archive/YYYY-MM-DD-<name>/
**Specs:** Sync skipped (user chose to skip)

**Warnings:**
- Archived with 2 incomplete artifacts
- Archived with 3 incomplete tasks
- Delta spec sync was skipped (user chose to skip)

Review the archive if this was not intentional.
```

**Output On Error (Archive Exists)**

```
## Archive Failed

**Change:** <change-name>
**Target:** openspec/changes/archive/YYYY-MM-DD-<name>/

Target archive directory already exists.

**Options:**
1. Rename the existing archive
2. Delete the existing archive if it's a duplicate
3. Wait until a different date to archive
```

**Guardrails**
- Always prompt for change selection if not provided
- Use artifact graph (openspec status --json) for completion checking
- Don't block archive on warnings - just inform and confirm
- Preserve .openspec.yaml when moving to archive (it moves with the directory)
- Show clear summary of what happened
- If sync is requested, use /opsx:sync approach (agent-driven)
- If delta specs exist, always run the sync assessment and show the combined summary before prompting


================================================
FILE: .cursor/commands/opsx-bulk-archive.md
================================================
---
name: /opsx-bulk-archive
id: opsx-bulk-archive
category: Workflow
description: Archive multiple completed changes at once
---

Archive multiple completed changes in a single operation.

This skill allows you to batch-archive changes, handling spec conflicts intelligently by checking the codebase to determine what's actually implemented.

**Input**: None required (prompts for selection)

**Steps**

1. **Get active changes**

   Run `openspec list --json` to get all active changes.

   If no active changes exist, inform user and stop.

2. **Prompt for change selection**

   Use **AskUserQuestion tool** with multi-select to let user choose changes:
   - Show each change with its schema
   - Include an option for "All changes"
   - Allow any number of selections (1+ works, 2+ is the typical use case)

   **IMPORTANT**: Do NOT auto-select. Always let the user choose.

3. **Batch validation - gather status for all selected changes**

   For each selected change, collect:

   a. **Artifact status** - Run `openspec status --change "<name>" --json`
      - Parse `schemaName` and `artifacts` list
      - Note which artifacts are `done` vs other states

   b. **Task completion** - Read `openspec/changes/<name>/tasks.md`
      - Count `- [ ]` (incomplete) vs `- [x]` (complete)
      - If no tasks file exists, note as "No tasks"

   c. **Delta specs** - Check `openspec/changes/<name>/specs/` directory
      - List which capability specs exist
      - For each, extract requirement names (lines matching `### Requirement: <name>`)

4. **Detect spec conflicts**

   Build a map of `capability -> [changes that touch it]`:

   ```
   auth -> [change-a, change-b]  <- CONFLICT (2+ changes)
   api  -> [change-c]            <- OK (only 1 change)
   ```

   A conflict exists when 2+ selected changes have delta specs for the same capability.

5. **Resolve conflicts agentically**

   **For each conflict**, investigate the codebase:

   a. **Read the delta specs** from each conflicting change to understand what each claims to add/modify

   b. **Search the codebase** for implementation evidence:
      - Look for code implementing requirements from each delta spec
      - Check for related files, functions, or tests

   c. **Determine resolution**:
      - If only one change is actually implemented -> sync that one's specs
      - If both implemented -> apply in chronological order (older first, newer overwrites)
      - If neither implemented -> skip spec sync, warn user

   d. **Record resolution** for each conflict:
      - Which change's specs to apply
      - In what order (if both)
      - Rationale (what was found in codebase)

6. **Show consolidated status table**

   Display a table summarizing all changes:

   ```
   | Change               | Artifacts | Tasks | Specs   | Conflicts | Status |
   |---------------------|-----------|-------|---------|-----------|--------|
   | schema-management   | Done      | 5/5   | 2 delta | None      | Ready  |
   | project-config      | Done      | 3/3   | 1 delta | None      | Ready  |
   | add-oauth           | Done      | 4/4   | 1 delta | auth (!)  | Ready* |
   | add-verify-skill    | 1 left    | 2/5   | None    | None      | Warn   |
   ```

   For conflicts, show the resolution:
   ```
   * Conflict resolution:
     - auth spec: Will apply add-oauth then add-jwt (both implemented, chronological order)
   ```

   For incomplete changes, show warnings:
   ```
   Warnings:
   - add-verify-skill: 1 incomplete artifact, 3 incomplete tasks
   ```

7. **Confirm batch operation**

   Use **AskUserQuestion tool** with a single confirmation:

   - "Archive N changes?" with options based on status
   - Options might include:
     - "Archive all N changes"
     - "Archive only N ready changes (skip incomplete)"
     - "Cancel"

   If there are incomplete changes, make clear they'll be archived with warnings.

8. **Execute archive for each confirmed change**

   Process changes in the determined order (respecting conflict resolution):

   a. **Sync specs** if delta specs exist:
      - Use the openspec-sync-specs approach (agent-driven intelligent merge)
      - For conflicts, apply in resolved order
      - Track if sync was done

   b. **Perform the archive**:
      ```bash
      mkdir -p openspec/changes/archive
      mv openspec/changes/<name> openspec/changes/archive/YYYY-MM-DD-<name>
      ```

   c. **Track outcome** for each change:
      - Success: archived successfully
      - Failed: error during archive (record error)
      - Skipped: user chose not to archive (if applicable)

9. **Display summary**

   Show final results:

   ```
   ## Bulk Archive Complete

   Archived 3 changes:
   - schema-management-cli -> archive/2026-01-19-schema-management-cli/
   - project-config -> archive/2026-01-19-project-config/
   - add-oauth -> archive/2026-01-19-add-oauth/

   Skipped 1 change:
   - add-verify-skill (user chose not to archive incomplete)

   Spec sync summary:
   - 4 delta specs synced to main specs
   - 1 conflict resolved (auth: applied both in chronological order)
   ```

   If any failures:
   ```
   Failed 1 change:
   - some-change: Archive directory already exists
   ```

**Conflict Resolution Examples**

Example 1: Only one implemented
```
Conflict: specs/auth/spec.md touched by [add-oauth, add-jwt]

Checking add-oauth:
- Delta adds "OAuth Provider Integration" requirement
- Searching codebase... found src/auth/oauth.ts implementing OAuth flow

Checking add-jwt:
- Delta adds "JWT Token Handling" requirement
- Searching codebase... no JWT implementation found

Resolution: Only add-oauth is implemented. Will sync add-oauth specs only.
```

Example 2: Both implemented
```
Conflict: specs/api/spec.md touched by [add-rest-api, add-graphql]

Checking add-rest-api (created 2026-01-10):
- Delta adds "REST Endpoints" requirement
- Searching codebase... found src/api/rest.ts

Checking add-graphql (created 2026-01-15):
- Delta adds "GraphQL Schema" requirement
- Searching codebase... found src/api/graphql.ts

Resolution: Both implemented. Will apply add-rest-api specs first,
then add-graphql specs (chronological order, newer takes precedence).
```

**Output On Success**

```
## Bulk Archive Complete

Archived N changes:
- <change-1> -> archive/YYYY-MM-DD-<change-1>/
- <change-2> -> archive/YYYY-MM-DD-<change-2>/

Spec sync summary:
- N delta specs synced to main specs
- No conflicts (or: M conflicts resolved)
```

**Output On Partial Success**

```
## Bulk Archive Complete (partial)

Archived N changes:
- <change-1> -> archive/YYYY-MM-DD-<change-1>/

Skipped M changes:
- <change-2> (user chose not to archive incomplete)

Failed K changes:
- <change-3>: Archive directory already exists
```

**Output When No Changes**

```
## No Changes to Archive

No active changes found. Use `/opsx:new` to create a new change.
```

**Guardrails**
- Allow any number of changes (1+ is fine, 2+ is the typical use case)
- Always prompt for selection, never auto-select
- Detect spec conflicts early and resolve by checking codebase
- When both changes are implemented, apply specs in chronological order
- Skip spec sync only when implementation is missing (warn user)
- Show clear per-change status before confirming
- Use single confirmation for entire batch
- Track and report all outcomes (success/skip/fail)
- Preserve .openspec.yaml when moving to archive
- Archive directory target uses current date: YYYY-MM-DD-<name>
- If archive target exists, fail that change but continue with others


================================================
FILE: .cursor/commands/opsx-continue.md
================================================
---
name: /opsx-continue
id: opsx-continue
category: Workflow
description: Continue working on a change - create the next artifact (Experimental)
---

Continue working on a change by creating the next artifact.

**Input**: Optionally specify a change name after `/opsx:continue` (e.g., `/opsx:continue add-auth`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.

**Steps**

1. **If no change name provided, prompt for selection**

   Run `openspec list --json` to get available changes sorted by most recently modified. Then use the **AskUserQuestion tool** to let the user select which change to work on.

   Present the top 3-4 most recently modified changes as options, showing:
   - Change name
   - Schema (from `schema` field if present, otherwise "spec-driven")
   - Status (e.g., "0/5 tasks", "complete", "no tasks")
   - How recently it was modified (from `lastModified` field)

   Mark the most recently modified change as "(Recommended)" since it's likely what the user wants to continue.

   **IMPORTANT**: Do NOT guess or auto-select a change. Always let the user choose.

2. **Check current status**
   ```bash
   openspec status --change "<name>" --json
   ```
   Parse the JSON to understand current state. The response includes:
   - `schemaName`: The workflow schema being used (e.g., "spec-driven")
   - `artifacts`: Array of artifacts with their status ("done", "ready", "blocked")
   - `isComplete`: Boolean indicating if all artifacts are complete

3. **Act based on status**:

   ---

   **If all artifacts are complete (`isComplete: true`)**:
   - Congratulate the user
   - Show final status including the schema used
   - Suggest: "All artifacts created! You can now implement this change with `/opsx:apply` or archive it with `/opsx:archive`."
   - STOP

   ---

   **If artifacts are ready to create** (status shows artifacts with `status: "ready"`):
   - Pick the FIRST artifact with `status: "ready"` from the status output
   - Get its instructions:
     ```bash
     openspec instructions <artifact-id> --change "<name>" --json
     ```
   - Parse the JSON. The key fields are:
     - `context`: Project background (constraints for you - do NOT include in output)
     - `rules`: Artifact-specific rules (constraints for you - do NOT include in output)
     - `template`: The structure to use for your output file
     - `instruction`: Schema-specific guidance
     - `outputPath`: Where to write the artifact
     - `dependencies`: Completed artifacts to read for context
   - **Create the artifact file**:
     - Read any completed dependency files for context
     - Use `template` as the structure - fill in its sections
     - Apply `context` and `rules` as constraints when writing - but do NOT copy them into the file
     - Write to the output path specified in instructions
   - Show what was created and what's now unlocked
   - STOP after creating ONE artifact

   ---

   **If no artifacts are ready (all blocked)**:
   - This shouldn't happen with a valid schema
   - Show status and suggest checking for issues

4. **After creating an artifact, show progress**
   ```bash
   openspec status --change "<name>"
   ```

**Output**

After each invocation, show:
- Which artifact was created
- Schema workflow being used
- Current progress (N/M complete)
- What artifacts are now unlocked
- Prompt: "Run `/opsx:continue` to create the next artifact"

**Artifact Creation Guidelines**

The artifact types and their purpose depend on the schema. Use the `instruction` field from the instructions output to understand what to create.

Common artifact patterns:

**spec-driven schema** (proposal → specs → design → tasks):
- **proposal.md**: Ask user about the change if not clear. Fill in Why, What Changes, Capabilities, Impact.
  - The Capabilities section is critical - each capability listed will need a spec file.
- **specs/<capability>/spec.md**: Create one spec per capability listed in the proposal's Capabilities section (use the capability name, not the change name).
- **design.md**: Document technical decisions, architecture, and implementation approach.
- **tasks.md**: Break down implementation into checkboxed tasks.

For other schemas, follow the `instruction` field from the CLI output.

**Guardrails**
- Create ONE artifact per invocation
- Always read dependency artifacts before creating a new one
- Never skip artifacts or create out of order
- If context is unclear, ask the user before creating
- Verify the artifact file exists after writing before marking progress
- Use the schema's artifact sequence, don't assume specific artifact names
- **IMPORTANT**: `context` and `rules` are constraints for YOU, not content for the file
  - Do NOT copy `<context>`, `<rules>`, `<project_context>` blocks into the artifact
  - These guide what you write, but should never appear in the output


================================================
FILE: .cursor/commands/opsx-explore.md
================================================
---
name: /opsx-explore
id: opsx-explore
category: Workflow
description: "Enter explore mode - think through ideas, investigate problems, clarify requirements"
---

Enter explore mode. Think deeply. Visualize freely. Follow the conversation wherever it goes.

**IMPORTANT: Explore mode is for thinking, not implementing.** You may read files, search code, and investigate the codebase, but you must NEVER write code or implement features. If the user asks you to implement something, remind them to exit explore mode first (e.g., start a change with `/opsx:new` or `/opsx:ff`). You MAY create OpenSpec artifacts (proposals, designs, specs) if the user asks—that's capturing thinking, not implementing.

**This is a stance, not a workflow.** There are no fixed steps, no required sequence, no mandatory outputs. You're a thinking partner helping the user explore.

**Input**: The argument after `/opsx:explore` is whatever the user wants to think about. Could be:
- A vague idea: "real-time collaboration"
- A specific problem: "the auth system is getting unwieldy"
- A change name: "add-dark-mode" (to explore in context of that change)
- A comparison: "postgres vs sqlite for this"
- Nothing (just enter explore mode)

---

## The Stance

- **Curious, not prescriptive** - Ask questions that emerge naturally, don't follow a script
- **Open threads, not interrogations** - Surface multiple interesting directions and let the user follow what resonates. Don't funnel them through a single path of questions.
- **Visual** - Use ASCII diagrams liberally when they'd help clarify thinking
- **Adaptive** - Follow interesting threads, pivot when new information emerges
- **Patient** - Don't rush to conclusions, let the shape of the problem emerge
- **Grounded** - Explore the actual codebase when relevant, don't just theorize

---

## What You Might Do

Depending on what the user brings, you might:

**Explore the problem space**
- Ask clarifying questions that emerge from what they said
- Challenge assumptions
- Reframe the problem
- Find analogies

**Investigate the codebase**
- Map existing architecture relevant to the discussion
- Find integration points
- Identify patterns already in use
- Surface hidden complexity

**Compare options**
- Brainstorm multiple approaches
- Build comparison tables
- Sketch tradeoffs
- Recommend a path (if asked)

**Visualize**
```
┌─────────────────────────────────────────┐
│     Use ASCII diagrams liberally        │
├─────────────────────────────────────────┤
│                                         │
│   ┌────────┐         ┌────────┐        │
│   │ State  │────────▶│ State  │        │
│   │   A    │         │   B    │        │
│   └────────┘         └────────┘        │
│                                         │
│   System diagrams, state machines,      │
│   data flows, architecture sketches,    │
│   dependency graphs, comparison tables  │
│                                         │
└─────────────────────────────────────────┘
```

**Surface risks and unknowns**
- Identify what could go wrong
- Find gaps in understanding
- Suggest spikes or investigations

---

## OpenSpec Awareness

You have full context of the OpenSpec system. Use it naturally, don't force it.

### Check for context

At the start, quickly check what exists:
```bash
openspec list --json
```

This tells you:
- If there are active changes
- Their names, schemas, and status
- What the user might be working on

If the user mentioned a specific change name, read its artifacts for context.

### When no change exists

Think freely. When insights crystallize, you might offer:

- "This feels solid enough to start a change. Want me to create one?"
  → Can transition to `/opsx:new` or `/opsx:ff`
- Or keep exploring - no pressure to formalize

### When a change exists

If the user mentions a change or you detect one is relevant:

1. **Read existing artifacts for context**
   - `openspec/changes/<name>/proposal.md`
   - `openspec/changes/<name>/design.md`
   - `openspec/changes/<name>/tasks.md`
   - etc.

2. **Reference them naturally in conversation**
   - "Your design mentions using Redis, but we just realized SQLite fits better..."
   - "The proposal scopes this to premium users, but we're now thinking everyone..."

3. **Offer to capture when decisions are made**

   | Insight Type | Where to Capture |
   |--------------|------------------|
   | New requirement discovered | `specs/<capability>/spec.md` |
   | Requirement changed | `specs/<capability>/spec.md` |
   | Design decision made | `design.md` |
   | Scope changed | `proposal.md` |
   | New work identified | `tasks.md` |
   | Assumption invalidated | Relevant artifact |

   Example offers:
   - "That's a design decision. Capture it in design.md?"
   - "This is a new requirement. Add it to specs?"
   - "This changes scope. Update the proposal?"

4. **The user decides** - Offer and move on. Don't pressure. Don't auto-capture.

---

## What You Don't Have To Do

- Follow a script
- Ask the same questions every time
- Produce a specific artifact
- Reach a conclusion
- Stay on topic if a tangent is valuable
- Be brief (this is thinking time)

---

## Ending Discovery

There's no required ending. Discovery might:

- **Flow into action**: "Ready to start? `/opsx:new` or `/opsx:ff`"
- **Result in artifact updates**: "Updated design.md with these decisions"
- **Just provide clarity**: User has what they need, moves on
- **Continue later**: "We can pick this up anytime"

When things crystallize, you might offer a summary - but it's optional. Sometimes the thinking IS the value.

---

## Guardrails

- **Don't implement** - Never write code or implement features. Creating OpenSpec artifacts is fine, writing application code is not.
- **Don't fake understanding** - If something is unclear, dig deeper
- **Don't rush** - Discovery is thinking time, not task time
- **Don't force structure** - Let patterns emerge naturally
- **Don't auto-capture** - Offer to save insights, don't just do it
- **Do visualize** - A good diagram is worth many paragraphs
- **Do explore the codebase** - Ground discussions in reality
- **Do question assumptions** - Including the user's and your own


================================================
FILE: .cursor/commands/opsx-ff.md
================================================
---
name: /opsx-ff
id: opsx-ff
category: Workflow
description: Create a change and generate all artifacts needed for implementation in one go
---

Fast-forward through artifact creation - generate everything needed to start implementation.

**Input**: The argument after `/opsx:ff` is the change name (kebab-case), OR a description of what the user wants to build.

**Steps**

1. **If no input provided, ask what they want to build**

   Use the **AskUserQuestion tool** (open-ended, no preset options) to ask:
   > "What change do you want to work on? Describe what you want to build or fix."

   From their description, derive a kebab-case name (e.g., "add user authentication" → `add-user-auth`).

   **IMPORTANT**: Do NOT proceed without understanding what the user wants to build.

2. **Create the change directory**
   ```bash
   openspec new change "<name>"
   ```
   This creates a scaffolded change at `openspec/changes/<name>/`.

3. **Get the artifact build order**
   ```bash
   openspec status --change "<name>" --json
   ```
   Parse the JSON to get:
   - `applyRequires`: array of artifact IDs needed before implementation (e.g., `["tasks"]`)
   - `artifacts`: list of all artifacts with their status and dependencies

4. **Create artifacts in sequence until apply-ready**

   Use the **TodoWrite tool** to track progress through the artifacts.

   Loop through artifacts in dependency order (artifacts with no pending dependencies first):

   a. **For each artifact that is `ready` (dependencies satisfied)**:
      - Get instructions:
        ```bash
        openspec instructions <artifact-id> --change "<name>" --json
        ```
      - The instructions JSON includes:
        - `context`: Project background (constraints for you - do NOT include in output)
        - `rules`: Artifact-specific rules (constraints for you - do NOT include in output)
        - `template`: The structure to use for your output file
        - `instruction`: Schema-specific guidance for this artifact type
        - `outputPath`: Where to write the artifact
        - `dependencies`: Completed artifacts to read for context
      - Read any completed dependency files for context
      - Create the artifact file using `template` as the structure
      - Apply `context` and `rules` as constraints - but do NOT copy them into the file
      - Show brief progress: "✓ Created <artifact-id>"

   b. **Continue until all `applyRequires` artifacts are complete**
      - After creating each artifact, re-run `openspec status --change "<name>" --json`
      - Check if every artifact ID in `applyRequires` has `status: "done"` in the artifacts array
      - Stop when all `applyRequires` artifacts are done

   c. **If an artifact requires user input** (unclear context):
      - Use **AskUserQuestion tool** to clarify
      - Then continue with creation

5. **Show final status**
   ```bash
   openspec status --change "<name>"
   ```

**Output**

After completing all artifacts, summarize:
- Change name and location
- List of artifacts created with brief descriptions
- What's ready: "All artifacts created! Ready for implementation."
- Prompt: "Run `/opsx:apply` to start implementing."

**Artifact Creation Guidelines**

- Follow the `instruction` field from `openspec instructions` for each artifact type
- The schema defines what each artifact should contain - follow it
- Read dependency artifacts for context before creating new ones
- Use the `template` as a starting point, filling in based on context

**Guardrails**
- Create ALL artifacts needed for implementation (as defined by schema's `apply.requires`)
- Always read dependency artifacts before creating a new one
- If context is critically unclear, ask the user - but prefer making reasonable decisions to keep momentum
- If a change with that name already exists, ask if user wants to continue it or create a new one
- Verify each artifact file exists after writing before proceeding to next


================================================
FILE: .cursor/commands/opsx-new.md
================================================
---
name: /opsx-new
id: opsx-new
category: Workflow
description: Start a new change using the experimental artifact workflow (OPSX)
---

Start a new change using the experimental artifact-driven approach.

**Input**: The argument after `/opsx:new` is the change name (kebab-case), OR a description of what the user wants to build.

**Steps**

1. **If no input provided, ask what they want to build**

   Use the **AskUserQuestion tool** (open-ended, no preset options) to ask:
   > "What change do you want to work on? Describe what you want to build or fix."

   From their description, derive a kebab-case name (e.g., "add user authentication" → `add-user-auth`).

   **IMPORTANT**: Do NOT proceed without understanding what the user wants to build.

2. **Determine the workflow schema**

   Use the default schema (omit `--schema`) unless the user explicitly requests a different workflow.

   **Use a different schema only if the user mentions:**
   - A specific schema name → use `--schema <name>`
   - "show workflows" or "what workflows" → run `openspec schemas --json` and let them choose

   **Otherwise**: Omit `--schema` to use the default.

3. **Create the change directory**
   ```bash
   openspec new change "<name>"
   ```
   Add `--schema <name>` only if the user requested a specific workflow.
   This creates a scaffolded change at `openspec/changes/<name>/` with the selected schema.

4. **Show the artifact status**
   ```bash
   openspec status --change "<name>"
   ```
   This shows which artifacts need to be created and which are ready (dependencies satisfied).

5. **Get instructions for the first artifact**
   The first artifact depends on the schema. Check the status output to find the first artifact with status "ready".
   ```bash
   openspec instructions <first-artifact-id> --change "<name>"
   ```
   This outputs the template and context for creating the first artifact.

6. **STOP and wait for user direction**

**Output**

After completing the steps, summarize:
- Change name and location
- Schema/workflow being used and its artifact sequence
- Current status (0/N artifacts complete)
- The template for the first artifact
- Prompt: "Ready to create the first artifact? Run `/opsx:continue` or just describe what this change is about and I'll draft it."

**Guardrails**
- Do NOT create any artifacts yet - just show the instructions
- Do NOT advance beyond showing the first artifact template
- If the name is invalid (not kebab-case), ask for a valid name
- If a change with that name already exists, suggest using `/opsx:continue` instead
- Pass --schema if using a non-default workflow


================================================
FILE: .cursor/commands/opsx-onboard.md
================================================
---
name: /opsx-onboard
id: opsx-onboard
category: Workflow
description: Guided onboarding - walk through a complete OpenSpec workflow cycle with narration
---

Guide the user through their first complete OpenSpec workflow cycle. This is a teaching experience—you'll do real work in their codebase while explaining each step.

---

## Preflight

Before starting, check if OpenSpec is initialized:

```bash
openspec status --json 2>&1 || echo "NOT_INITIALIZED"
```

**If not initialized:**
> OpenSpec isn't set up in this project yet. Run `openspec init` first, then come back to `/opsx:onboard`.

Stop here if not initialized.

---

## Phase 1: Welcome

Display:

```
## Welcome to OpenSpec!

I'll walk you through a complete change cycle—from idea to implementation—using a real task in your codebase. Along the way, you'll learn the workflow by doing it.

**What we'll do:**
1. Pick a small, real task in your codebase
2. Explore the problem briefly
3. Create a change (the container for our work)
4. Build the artifacts: proposal → specs → design → tasks
5. Implement the tasks
6. Archive the completed change

**Time:** ~15-20 minutes

Let's start by finding something to work on.
```

---

## Phase 2: Task Selection

### Codebase Analysis

Scan the codebase for small improvement opportunities. Look for:

1. **TODO/FIXME comments** - Search for `TODO`, `FIXME`, `HACK`, `XXX` in code files
2. **Missing error handling** - `catch` blocks that swallow errors, risky operations without try-catch
3. **Functions without tests** - Cross-reference `src/` with test directories
4. **Type issues** - `any` types in TypeScript files (`: any`, `as any`)
5. **Debug artifacts** - `console.log`, `console.debug`, `debugger` statements in non-debug code
6. **Missing validation** - User input handlers without validation

Also check recent git activity:
```bash
git log --oneline -10 2>/dev/null || echo "No git history"
```

### Present Suggestions

From your analysis, present 3-4 specific suggestions:

```
## Task Suggestions

Based on scanning your codebase, here are some good starter tasks:

**1. [Most promising task]**
   Location: `src/path/to/file.ts:42`
   Scope: ~1-2 files, ~20-30 lines
   Why it's good: [brief reason]

**2. [Second task]**
   Location: `src/another/file.ts`
   Scope: ~1 file, ~15 lines
   Why it's good: [brief reason]

**3. [Third task]**
   Location: [location]
   Scope: [estimate]
   Why it's good: [brief reason]

**4. Something else?**
   Tell me what you'd like to work on.

Which task interests you? (Pick a number or describe your own)
```

**If nothing found:** Fall back to asking what the user wants to build:
> I didn't find obvious quick wins in your codebase. What's something small you've been meaning to add or fix?

### Scope Guardrail

If the user picks or describes something too large (major feature, multi-day work):

```
That's a valuable task, but it's probably larger than ideal for your first OpenSpec run-through.

For learning the workflow, smaller is better—it lets you see the full cycle without getting stuck in implementation details.

**Options:**
1. **Slice it smaller** - What's the smallest useful piece of [their task]? Maybe just [specific slice]?
2. **Pick something else** - One of the other suggestions, or a different small task?
3. **Do it anyway** - If you really want to tackle this, we can. Just know it'll take longer.

What would you prefer?
```

Let the user override if they insist—this is a soft guardrail.

---

## Phase 3: Explore Demo

Once a task is selected, briefly demonstrate explore mode:

```
Before we create a change, let me quickly show you **explore mode**—it's how you think through problems before committing to a direction.
```

Spend 1-2 minutes investigating the relevant code:
- Read the file(s) involved
- Draw a quick ASCII diagram if it helps
- Note any considerations

```
## Quick Exploration

[Your brief analysis—what you found, any considerations]

┌─────────────────────────────────────────┐
│   [Optional: ASCII diagram if helpful]  │
└─────────────────────────────────────────┘

Explore mode (`/opsx:explore`) is for this kind of thinking—investigating before implementing. You can use it anytime you need to think through a problem.

Now let's create a change to hold our work.
```

**PAUSE** - Wait for user acknowledgment before proceeding.

---

## Phase 4: Create the Change

**EXPLAIN:**
```
## Creating a Change

A "change" in OpenSpec is a container for all the thinking and planning around a piece of work. It lives in `openspec/changes/<name>/` and holds your artifacts—proposal, specs, design, tasks.

Let me create one for our task.
```

**DO:** Create the change with a derived kebab-case name:
```bash
openspec new change "<derived-name>"
```

**SHOW:**
```
Created: `openspec/changes/<name>/`

The folder structure:
```
openspec/changes/<name>/
├── proposal.md    ← Why we're doing this (empty, we'll fill it)
├── design.md      ← How we'll build it (empty)
├── specs/         ← Detailed requirements (empty)
└── tasks.md       ← Implementation checklist (empty)
```

Now let's fill in the first artifact—the proposal.
```

---

## Phase 5: Proposal

**EXPLAIN:**
```
## The Proposal

The proposal captures **why** we're making this change and **what** it involves at a high level. It's the "elevator pitch" for the work.

I'll draft one based on our task.
```

**DO:** Draft the proposal content (don't save yet):

```
Here's a draft proposal:

---

## Why

[1-2 sentences explaining the problem/opportunity]

## What Changes

[Bullet points of what will be different]

## Capabilities

### New Capabilities
- `<capability-name>`: [brief description]

### Modified Capabilities
<!-- If modifying existing behavior -->

## Impact

- `src/path/to/file.ts`: [what changes]
- [other files if applicable]

---

Does this capture the intent? I can adjust before we save it.
```

**PAUSE** - Wait for user approval/feedback.

After approval, save the proposal:
```bash
openspec instructions proposal --change "<name>" --json
```
Then write the content to `openspec/changes/<name>/proposal.md`.

```
Proposal saved. This is your "why" document—you can always come back and refine it as understanding evolves.

Next up: specs.
```

---

## Phase 6: Specs

**EXPLAIN:**
```
## Specs

Specs define **what** we're building in precise, testable terms. They use a requirement/scenario format that makes expected behavior crystal clear.

For a small task like this, we might only need one spec file.
```

**DO:** Create the spec file:
```bash
mkdir -p openspec/changes/<name>/specs/<capability-name>
```

Draft the spec content:

```
Here's the spec:

---

## ADDED Requirements

### Requirement: <Name>

<Description of what the system should do>

#### Scenario: <Scenario name>

- **WHEN** <trigger condition>
- **THEN** <expected outcome>
- **AND** <additional outcome if needed>

---

This format—WHEN/THEN/AND—makes requirements testable. You can literally read them as test cases.
```

Save to `openspec/changes/<name>/specs/<capability>/spec.md`.

---

## Phase 7: Design

**EXPLAIN:**
```
## Design

The design captures **how** we'll build it—technical decisions, tradeoffs, approach.

For small changes, this might be brief. That's fine—not every change needs deep design discussion.
```

**DO:** Draft design.md:

```
Here's the design:

---

## Context

[Brief context about the current state]

## Goals / Non-Goals

**Goals:**
- [What we're trying to achieve]

**Non-Goals:**
- [What's explicitly out of scope]

## Decisions

### Decision 1: [Key decision]

[Explanation of approach and rationale]

---

For a small task, this captures the key decisions without over-engineering.
```

Save to `openspec/changes/<name>/design.md`.

---

## Phase 8: Tasks

**EXPLAIN:**
```
## Tasks

Finally, we break the work into implementation tasks—checkboxes that drive the apply phase.

These should be small, clear, and in logical order.
```

**DO:** Generate tasks based on specs and design:

```
Here are the implementation tasks:

---

## 1. [Category or file]

- [ ] 1.1 [Specific task]
- [ ] 1.2 [Specific task]

## 2. Verify

- [ ] 2.1 [Verification step]

---

Each checkbox becomes a unit of work in the apply phase. Ready to implement?
```

**PAUSE** - Wait for user to confirm they're ready to implement.

Save to `openspec/changes/<name>/tasks.md`.

---

## Phase 9: Apply (Implementation)

**EXPLAIN:**
```
## Implementation

Now we implement each task, checking them off as we go. I'll announce each one and occasionally note how the specs/design informed the approach.
```

**DO:** For each task:

1. Announce: "Working on task N: [description]"
2. Implement the change in the codebase
3. Reference specs/design naturally: "The spec says X, so I'm doing Y"
4. Mark complete in tasks.md: `- [ ]` → `- [x]`
5. Brief status: "✓ Task N complete"

Keep narration light—don't over-explain every line of code.

After all tasks:

```
## Implementation Complete

All tasks done:
- [x] Task 1
- [x] Task 2
- [x] ...

The change is implemented! One more step—let's archive it.
```

---

## Phase 10: Archive

**EXPLAIN:**
```
## Archiving

When a change is complete, we archive it. This moves it from `openspec/changes/` to `openspec/changes/archive/YYYY-MM-DD-<name>/`.

Archived changes become your project's decision history—you can always find them later to understand why something was built a certain way.
```

**DO:**
```bash
openspec archive "<name>"
```

**SHOW:**
```
Archived to: `openspec/changes/archive/YYYY-MM-DD-<name>/`

The change is now part of your project's history. The code is in your codebase, the decision record is preserved.
```

---

## Phase 11: Recap & Next Steps

```
## Congratulations!

You just completed a full OpenSpec cycle:

1. **Explore** - Thought through the problem
2. **New** - Created a change container
3. **Proposal** - Captured WHY
4. **Specs** - Defined WHAT in detail
5. **Design** - Decided HOW
6. **Tasks** - Broke it into steps
7. **Apply** - Implemented the work
8. **Archive** - Preserved the record

This same rhythm works for any size change—a small fix or a major feature.

---

## Command Reference

| Command | What it does |
|---------|--------------|
| `/opsx:explore` | Think through problems before/during work |
| `/opsx:new` | Start a new change, step through artifacts |
| `/opsx:ff` | Fast-forward: create all artifacts at once |
| `/opsx:continue` | Continue working on an existing change |
| `/opsx:apply` | Implement tasks from a change |
| `/opsx:verify` | Verify implementation matches artifacts |
| `/opsx:archive` | Archive a completed change |

---

## What's Next?

Try `/opsx:new` or `/opsx:ff` on something you actually want to build. You've got the rhythm now!
```

---

## Graceful Exit Handling

### User wants to stop mid-way

If the user says they need to stop, want to pause, or seem disengaged:

```
No problem! Your change is saved at `openspec/changes/<name>/`.

To pick up where we left off later:
- `/opsx:continue <name>` - Resume artifact creation
- `/opsx:apply <name>` - Jump to implementation (if tasks exist)

The work won't be lost. Come back whenever you're ready.
```

Exit gracefully without pressure.

### User just wants command reference

If the user says they just want to see the commands or skip the tutorial:

```
## OpenSpec Quick Reference

| Command | What it does |
|---------|--------------|
| `/opsx:explore` | Think through problems (no code changes) |
| `/opsx:new <name>` | Start a new change, step by step |
| `/opsx:ff <name>` | Fast-forward: all artifacts at once |
| `/opsx:continue <name>` | Continue an existing change |
| `/opsx:apply <name>` | Implement tasks |
| `/opsx:verify <name>` | Verify implementation |
| `/opsx:archive <name>` | Archive when done |

Try `/opsx:new` to start your first change, or `/opsx:ff` if you want to move fast.
```

Exit gracefully.

---

## Guardrails

- **Follow the EXPLAIN → DO → SHOW → PAUSE pattern** at key transitions (after explore, after proposal draft, after tasks, after archive)
- **Keep narration light** during implementation—teach without lecturing
- **Don't skip phases** even if the change is small—the goal is teaching the workflow
- **Pause for acknowledgment** at marked points, but don't over-pause
- **Handle exits gracefully**—never pressure the user to continue
- **Use real codebase tasks**—don't simulate or use fake examples
- **Adjust scope gently**—guide toward smaller tasks but respect user choice


================================================
FILE: .cursor/commands/opsx-sync.md
================================================
---
name: /opsx-sync
id: opsx-sync
category: Workflow
description: Sync delta specs from a change to main specs
---

Sync delta specs from a change to main specs.

This is an **agent-driven** operation - you will read delta specs and directly edit main specs to apply the changes. This allows intelligent merging (e.g., adding a scenario without copying the entire requirement).

**Input**: Optionally specify a change name after `/opsx:sync` (e.g., `/opsx:sync add-auth`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.

**Steps**

1. **If no change name provided, prompt for selection**

   Run `openspec list --json` to get available changes. Use the **AskUserQuestion tool** to let the user select.

   Show changes that have delta specs (under `specs/` directory).

   **IMPORTANT**: Do NOT guess or auto-select a change. Always let the user choose.

2. **Find delta specs**

   Look for delta spec files in `openspec/changes/<name>/specs/*/spec.md`.

   Each delta spec file contains sections like:
   - `## ADDED Requirements` - New requirements to add
   - `## MODIFIED Requirements` - Changes to existing requirements
   - `## REMOVED Requirements` - Requirements to remove
   - `## RENAMED Requirements` - Requirements to rename (FROM:/TO: format)

   If no delta specs found, inform user and stop.

3. **For each delta spec, apply changes to main specs**

   For each capability with a delta spec at `openspec/changes/<name>/specs/<capability>/spec.md`:

   a. **Read the delta spec** to understand the intended changes

   b. **Read the main spec** at `openspec/specs/<capability>/spec.md` (may not exist yet)

   c. **Apply changes intelligently**:

      **ADDED Requirements:**
      - If requirement doesn't exist in main spec → add it
      - If requirement already exists → update it to match (treat as implicit MODIFIED)

      **MODIFIED Requirements:**
      - Find the requirement in main spec
      - Apply the changes - this can be:
        - Adding new scenarios (don't need to copy existing ones)
        - Modifying existing scenarios
        - Changing the requirement description
      - Preserve scenarios/content not mentioned in the delta

      **REMOVED Requirements:**
      - Remove the entire requirement block from main spec

      **RENAMED Requirements:**
      - Find the FROM requirement, rename to TO

   d. **Create new main spec** if capability doesn't exist yet:
      - Create `openspec/specs/<capability>/spec.md`
      - Add Purpose section (can be brief, mark as TBD)
      - Add Requirements section with the ADDED requirements

4. **Show summary**

   After applying all changes, summarize:
   - Which capabilities were updated
   - What changes were made (requirements added/modified/removed/renamed)

**Delta Spec Format Reference**

```markdown
## ADDED Requirements

### Requirement: New Feature
The system SHALL do something new.

#### Scenario: Basic case
- **WHEN** user does X
- **THEN** system does Y

## MODIFIED Requirements

### Requirement: Existing Feature
#### Scenario: New scenario to add
- **WHEN** user does A
- **THEN** system does B

## REMOVED Requirements

### Requirement: Deprecated Feature

## RENAMED Requirements

- FROM: `### Requirement: Old Name`
- TO: `### Requirement: New Name`
```

**Key Principle: Intelligent Merging**

Unlike programmatic merging, you can apply **partial updates**:
- To add a scenario, just include that scenario under MODIFIED - don't copy existing scenarios
- The delta represents *intent*, not a wholesale replacement
- Use your judgment to merge changes sensibly

**Output On Success**

```
## Specs Synced: <change-name>

Updated main specs:

**<capability-1>**:
- Added requirement: "New Feature"
- Modified requirement: "Existing Feature" (added 1 scenario)

**<capability-2>**:
- Created new spec file
- Added requirement: "Another Feature"

Main specs are now updated. The change remains active - archive when implementation is complete.
```

**Guardrails**
- Read both delta and main specs before making changes
- Preserve existing content not mentioned in delta
- If something is unclear, ask for clarification
- Show what you're changing as you go
- The operation should be idempotent - running twice should give same result


================================================
FILE: .cursor/commands/opsx-verify.md
================================================
---
name: /opsx-verify
id: opsx-verify
category: Workflow
description: Verify implementation matches change artifacts before archiving
---

Verify that an implementation matches the change artifacts (specs, tasks, design).

**Input**: Optionally specify a change name after `/opsx:verify` (e.g., `/opsx:verify add-auth`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.

**Steps**

1. **If no change name provided, prompt for selection**

   Run `openspec list --json` to get available changes. Use the **AskUserQuestion tool** to let the user select.

   Show changes that have implementation tasks (tasks artifact exists).
   Include the schema used for each change if available.
   Mark changes with incomplete tasks as "(In Progress)".

   **IMPORTANT**: Do NOT guess or auto-select a change. Always let the user choose.

2. **Check status to understand the schema**
   ```bash
   openspec status --change "<name>" --json
   ```
   Parse the JSON to understand:
   - `schemaName`: The workflow being used (e.g., "spec-driven")
   - Which artifacts exist for this change

3. **Get the change directory and load artifacts**

   ```bash
   openspec instructions apply --change "<name>" --json
   ```

   This returns the change directory and context files. Read all available artifacts from `contextFiles`.

4. **Initialize verification report structure**

   Create a report structure with three dimensions:
   - **Completeness**: Track tasks and spec coverage
   - **Correctness**: Track requirement implementation and scenario coverage
   - **Coherence**: Track design adherence and pattern consistency

   Each dimension can have CRITICAL, WARNING, or SUGGESTION issues.

5. **Verify Completeness**

   **Task Completion**:
   - If tasks.md exists in contextFiles, read it
   - Parse checkboxes: `- [ ]` (incomplete) vs `- [x]` (complete)
   - Count complete vs total tasks
   - If incomplete tasks exist:
     - Add CRITICAL issue for each incomplete task
     - Recommendation: "Complete task: <description>" or "Mark as done if already implemented"

   **Spec Coverage**:
   - If delta specs exist in `openspec/changes/<name>/specs/`:
     - Extract all requirements (marked with "### Requirement:")
     - For each requirement:
       - Search codebase for keywords related to the requirement
       - Assess if implementation likely exists
     - If requirements appear unimplemented:
       - Add CRITICAL issue: "Requirement not found: <requirement name>"
       - Recommendation: "Implement requirement X: <description>"

6. **Verify Correctness**

   **Requirement Implementation Mapping**:
   - For each requirement from delta specs:
     - Search codebase for implementation evidence
     - If found, note file paths and line ranges
     - Assess if implementation matches requirement intent
     - If divergence detected:
       - Add WARNING: "Implementation may diverge from spec: <details>"
       - Recommendation: "Review <file>:<lines> against requirement X"

   **Scenario Coverage**:
   - For each scenario in delta specs (marked with "#### Scenario:"):
     - Check if conditions are handled in code
     - Check if tests exist covering the scenario
     - If scenario appears uncovered:
       - Add WARNING: "Scenario not covered: <scenario name>"
       - Recommendation: "Add test or implementation for scenario: <description>"

7. **Verify Coherence**

   **Design Adherence**:
   - If design.md exists in contextFiles:
     - Extract key decisions (look for sections like "Decision:", "Approach:", "Architecture:")
     - Verify implementation follows those decisions
     - If contradiction detected:
       - Add WARNING: "Design decision not followed: <decision>"
       - Recommendation: "Update implementation or revise design.md to match reality"
   - If no design.md: Skip design adherence check, note "No design.md to verify against"

   **Code Pattern Consistency**:
   - Review new code for consistency with project patterns
   - Check file naming, directory structure, coding style
   - If significant deviations found:
     - Add SUGGESTION: "Code pattern deviation: <details>"
     - Recommendation: "Consider following project pattern: <example>"

8. **Generate Verification Report**

   **Summary Scorecard**:
   ```
   ## Verification Report: <change-name>

   ### Summary
   | Dimension    | Status           |
   |--------------|------------------|
   | Completeness | X/Y tasks, N reqs|
   | Correctness  | M/N reqs covered |
   | Coherence    | Followed/Issues  |
   ```

   **Issues by Priority**:

   1. **CRITICAL** (Must fix before archive):
      - Incomplete tasks
      - Missing requirement implementations
      - Each with specific, actionable recommendation

   2. **WARNING** (Should fix):
      - Spec/design divergences
      - Missing scenario coverage
      - Each with specific recommendation

   3. **SUGGESTION** (Nice to fix):
      - Pattern inconsistencies
      - Minor improvements
      - Each with specific recommendation

   **Final Assessment**:
   - If CRITICAL issues: "X critical issue(s) found. Fix before archiving."
   - If only warnings: "No critical issues. Y warning(s) to consider. Ready for archive (with noted improvements)."
   - If all clear: "All checks passed. Ready for archive."

**Verification Heuristics**

- **Completeness**: Focus on objective checklist items (checkboxes, requirements list)
- **Correctness**: Use keyword search, file path analysis, reasonable inference - don't require perfect certainty
- **Coherence**: Look for glaring inconsistencies, don't nitpick style
- **False Positives**: When uncertain, prefer SUGGESTION over WARNING, WARNING over CRITICAL
- **Actionability**: Every issue must have a specific recommendation with file/line references where applicable

**Graceful Degradation**

- If only tasks.md exists: verify task completion only, skip spec/design checks
- If tasks + specs exist: verify completeness and correctness, skip design
- If full artifacts: verify all three dimensions
- Always note which checks were skipped and why

**Output Format**

Use clear markdown with:
- Table for summary scorecard
- Grouped lists for issues (CRITICAL/WARNING/SUGGESTION)
- Code references in format: `file.ts:123`
- Specific, actionable recommendations
- No vague suggestions like "consider reviewing"


================================================
FILE: .cursor/skills/openspec-apply-change/SKILL.md
================================================
zh---
name: openspec-apply-change
description: Implement tasks from an OpenSpec change. Use when the user wants to start implementing, continue implementation, or work through tasks.
license: MIT
compatibility: Requires openspec CLI.
metadata:
  author: openspec
  version: "1.0"
  generatedBy: "1.1.1"
---

Implement tasks from an OpenSpec change.

**Input**: Optionally specify a change name. If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.

**Steps**

1. **Select the change**

   If a name is provided, use it. Otherwise:
   - Infer from conversation context if the user mentioned a change
   - Auto-select if only one active change exists
   - If ambiguous, run `openspec list --json` to get available changes and use the **AskUserQuestion tool** to let the user select

   Always announce: "Using change: <name>" and how to override (e.g., `/opsx:apply <other>`).

2. **Check status to understand the schema**
   ```bash
   openspec status --change "<name>" --json
   ```
   Parse the JSON to understand:
   - `schemaName`: The workflow being used (e.g., "spec-driven")
   - Which artifact contains the tasks (typically "tasks" for spec-driven, check status for others)

3. **Get apply instructions**

   ```bash
   openspec instructions apply --change "<name>" --json
   ```

   This returns:
   - Context file paths (varies by schema - could be proposal/specs/design/tasks or spec/tests/implementation/docs)
   - Progress (total, complete, remaining)
   - Task list with status
   - Dynamic instruction based on current state

   **Handle states:**
   - If `state: "blocked"` (missing artifacts): show message, suggest using openspec-continue-change
   - If `state: "all_done"`: congratulate, suggest archive
   - Otherwise: proceed to implementation

4. **Read context files**

   Read the files listed in `contextFiles` from the apply instructions output.
   The files depend on the schema being used:
   - **spec-driven**: proposal, specs, design, tasks
   - Other schemas: follow the contextFiles from CLI output

5. **Show current progress**

   Display:
   - Schema being used
   - Progress: "N/M tasks complete"
   - Remaining tasks overview
   - Dynamic instruction from CLI

6. **Implement tasks (loop until done or blocked)**

   For each pending task:
   - Show which task is being worked on
   - Make the code changes required
   - Keep changes minimal and focused
   - Mark task complete in the tasks file: `- [ ]` → `- [x]`
   - Continue to next task

   **Pause if:**
   - Task is unclear → ask for clarification
   - Implementation reveals a design issue → suggest updating artifacts
   - Error or blocker encountered → report and wait for guidance
   - User interrupts

7. **On completion or pause, show status**

   Display:
   - Tasks completed this session
   - Overall progress: "N/M tasks complete"
   - If all done: suggest archive
   - If paused: explain why and wait for guidance

**Output During Implementation**

```
## Implementing: <change-name> (schema: <schema-name>)

Working on task 3/7: <task description>
[...implementation happening...]
✓ Task complete

Working on task 4/7: <task description>
[...implementation happening...]
✓ Task complete
```

**Output On Completion**

```
## Implementation Complete

**Change:** <change-name>
**Schema:** <schema-name>
**Progress:** 7/7 tasks complete ✓

### Completed This Session
- [x] Task 1
- [x] Task 2
...

All tasks complete! Ready to archive this change.
```

**Output On Pause (Issue Encountered)**

```
## Implementation Paused

**Change:** <change-name>
**Schema:** <schema-name>
**Progress:** 4/7 tasks complete

### Issue Encountered
<description of the issue>

**Options:**
1. <option 1>
2. <option 2>
3. Other approach

What would you like to do?
```

**Guardrails**
- Keep going through tasks until done or blocked
- Always read context files before starting (from the apply instructions output)
- If task is ambiguous, pause and ask before implementing
- If implementation reveals issues, pause and suggest artifact updates
- Keep code changes minimal and scoped to each task
- Update task checkbox immediately after completing each task
- Pause on errors, blockers, or unclear requirements - don't guess
- Use contextFiles from CLI output, don't assume specific file names

**Fluid Workflow Integration**

This skill supports the "actions on a change" model:

- **Can be invoked anytime**: Before all artifacts are done (if tasks exist), after partial implementation, interleaved with other actions
- **Allows artifact updates**: If implementation reveals design issues, suggest updating artifacts - not phase-locked, work fluidly


================================================
FILE: .cursor/skills/openspec-archive-change/SKILL.md
================================================
---
name: openspec-archive-change
description: Archive a completed change in the experimental workflow. Use when the user wants to finalize and archive a change after implementation is complete.
license: MIT
compatibility: Requires openspec CLI.
metadata:
  author: openspec
  version: "1.0"
  generatedBy: "1.1.1"
---

Archive a completed change in the experimental workflow.

**Input**: Optionally specify a change name. If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.

**Steps**

1. **If no change name provided, prompt for selection**

   Run `openspec list --json` to get available changes. Use the **AskUserQuestion tool** to let the user select.

   Show only active changes (not already archived).
   Include the schema used for each change if available.

   **IMPORTANT**: Do NOT guess or auto-select a change. Always let the user choose.

2. **Check artifact completion status**

   Run `openspec status --change "<name>" --json` to check artifact completion.

   Parse the JSON to understand:
   - `schemaName`: The workflow being used
   - `artifacts`: List of artifacts with their status (`done` or other)

   **If any artifacts are not `done`:**
   - Display warning listing incomplete artifacts
   - Use **AskUserQuestion tool** to confirm user wants to proceed
   - Proceed if user confirms

3. **Check task completion status**

   Read the tasks file (typically `tasks.md`) to check for incomplete tasks.

   Count tasks marked with `- [ ]` (incomplete) vs `- [x]` (complete).

   **If incomplete tasks found:**
   - Display warning showing count of incomplete tasks
   - Use **AskUserQuestion tool** to confirm user wants to proceed
   - Proceed if user confirms

   **If no tasks file exists:** Proceed without task-related warning.

4. **Assess delta spec sync state**

   Check for delta specs at `openspec/changes/<name>/specs/`. If none exist, proceed without sync prompt.

   **If delta specs exist:**
   - Compare each delta spec with its corresponding main spec at `openspec/specs/<capability>/spec.md`
   - Determine what changes would be applied (adds, modifications, removals, renames)
   - Show a combined summary before prompting

   **Prompt options:**
   - If changes needed: "Sync now (recommended)", "Archive without syncing"
   - If already synced: "Archive now", "Sync anyway", "Cancel"

   If user chooses sync, execute /opsx:sync logic (use the openspec-sync-specs skill). Proceed to archive regardless of choice.

5. **Perform the archive**

   Create the archive directory if it doesn't exist:
   ```bash
   mkdir -p openspec/changes/archive
   ```

   Generate target name using current date: `YYYY-MM-DD-<change-name>`

   **Check if target already exists:**
   - If yes: Fail with error, suggest renaming existing archive or using different date
   - If no: Move the change directory to archive

   ```bash
   mv openspec/changes/<name> openspec/changes/archive/YYYY-MM-DD-<name>
   ```

6. **Display summary**

   Show archive completion summary including:
   - Change name
   - Schema that was used
   - Archive location
   - Whether specs were synced (if applicable)
   - Note about any warnings (incomplete artifacts/tasks)

**Output On Success**

```
## Archive Complete

**Change:** <change-name>
**Schema:** <schema-name>
**Archived to:** openspec/changes/archive/YYYY-MM-DD-<name>/
**Specs:** ✓ Synced to main specs (or "No delta specs" or "Sync skipped")

All artifacts complete. All tasks complete.
```

**Guardrails**
- Always prompt for change selection if not provided
- Use artifact graph (openspec status --json) for completion checking
- Don't block archive on warnings - just inform and confirm
- Preserve .openspec.yaml when moving to archive (it moves with the directory)
- Show clear summary of what happened
- If sync is requested, use openspec-sync-specs approach (agent-driven)
- If delta specs exist, always run the sync assessment and show the combined summary before prompting


================================================
FILE: .cursor/skills/openspec-bulk-archive-change/SKILL.md
================================================
---
name: openspec-bulk-archive-change
description: Archive multiple completed changes at once. Use when archiving several parallel changes.
license: MIT
compatibility: Requires openspec CLI.
metadata:
  author: openspec
  version: "1.0"
  generatedBy: "1.1.1"
---

Archive multiple completed changes in a single operation.

This skill allows you to batch-archive changes, handling spec conflicts intelligently by checking the codebase to determine what's actually implemented.

**Input**: None required (prompts for selection)

**Steps**

1. **Get active changes**

   Run `openspec list --json` to get all active changes.

   If no active changes exist, inform user and stop.

2. **Prompt for change selection**

   Use **AskUserQuestion tool** with multi-select to let user choose changes:
   - Show each change with its schema
   - Include an option for "All changes"
   - Allow any number of selections (1+ works, 2+ is the typical use case)

   **IMPORTANT**: Do NOT auto-select. Always let the user choose.

3. **Batch validation - gather status for all selected changes**

   For each selected change, collect:

   a. **Artifact status** - Run `openspec status --change "<name>" --json`
      - Parse `schemaName` and `artifacts` list
      - Note which artifacts are `done` vs other states

   b. **Task completion** - Read `openspec/changes/<name>/tasks.md`
      - Count `- [ ]` (incomplete) vs `- [x]` (complete)
      - If no tasks file exists, note as "No tasks"

   c. **Delta specs** - Check `openspec/changes/<name>/specs/` directory
      - List which capability specs exist
      - For each, extract requirement names (lines matching `### Requirement: <name>`)

4. **Detect spec conflicts**

   Build a map of `capability -> [changes that touch it]`:

   ```
   auth -> [change-a, change-b]  <- CONFLICT (2+ changes)
   api  -> [change-c]            <- OK (only 1 change)
   ```

   A conflict exists when 2+ selected changes have delta specs for the same capability.

5. **Resolve conflicts agentically**

   **For each conflict**, investigate the codebase:

   a. **Read the delta specs** from each conflicting change to understand what each claims to add/modify

   b. **Search the codebase** for implementation evidence:
      - Look for code implementing requirements from each delta spec
      - Check for related files, functions, or tests

   c. **Determine resolution**:
      - If only one change is actually implemented -> sync that one's specs
      - If both implemented -> apply in chronological order (older first, newer overwrites)
      - If neither implemented -> skip spec sync, warn user

   d. **Record resolution** for each conflict:
      - Which change's specs to apply
      - In what order (if both)
      - Rationale (what was found in codebase)

6. **Show consolidated status table**

   Display a table summarizing all changes:

   ```
   | Change               | Artifacts | Tasks | Specs   | Conflicts | Status |
   |---------------------|-----------|-------|---------|-----------|--------|
   | schema-management   | Done      | 5/5   | 2 delta | None      | Ready  |
   | project-config      | Done      | 3/3   | 1 delta | None      | Ready  |
   | add-oauth           | Done      | 4/4   | 1 delta | auth (!)  | Ready* |
   | add-verify-skill    | 1 left    | 2/5   | None    | None      | Warn   |
   ```

   For conflicts, show the resolution:
   ```
   * Conflict resolution:
     - auth spec: Will apply add-oauth then add-jwt (both implemented, chronological order)
   ```

   For incomplete changes, show warnings:
   ```
   Warnings:
   - add-verify-skill: 1 incomplete artifact, 3 incomplete tasks
   ```

7. **Confirm batch operation**

   Use **AskUserQuestion tool** with a single confirmation:

   - "Archive N changes?" with options based on status
   - Options might include:
     - "Archive all N changes"
     - "Archive only N ready changes (skip incomplete)"
     - "Cancel"

   If there are incomplete changes, make clear they'll be archived with warnings.

8. **Execute archive for each confirmed change**

   Process changes in the determined order (respecting conflict resolution):

   a. **Sync specs** if delta specs exist:
      - Use the openspec-sync-specs approach (agent-driven intelligent merge)
      - For conflicts, apply in resolved order
      - Track if sync was done

   b. **Perform the archive**:
      ```bash
      mkdir -p openspec/changes/archive
      mv openspec/changes/<name> openspec/changes/archive/YYYY-MM-DD-<name>
      ```

   c. **Track outcome** for each change:
      - Success: archived successfully
      - Failed: error during archive (record error)
      - Skipped: user chose not to archive (if applicable)

9. **Display summary**

   Show final results:

   ```
   ## Bulk Archive Complete

   Archived 3 changes:
   - schema-management-cli -> archive/2026-01-19-schema-management-cli/
   - project-config -> archive/2026-01-19-project-config/
   - add-oauth -> archive/2026-01-19-add-oauth/

   Skipped 1 change:
   - add-verify-skill (user chose not to archive incomplete)

   Spec sync summary:
   - 4 delta specs synced to main specs
   - 1 conflict resolved (auth: applied both in chronological order)
   ```

   If any failures:
   ```
   Failed 1 change:
   - some-change: Archive directory already exists
   ```

**Conflict Resolution Examples**

Example 1: Only one implemented
```
Conflict: specs/auth/spec.md touched by [add-oauth, add-jwt]

Checking add-oauth:
- Delta adds "OAuth Provider Integration" requirement
- Searching codebase... found src/auth/oauth.ts implementing OAuth flow

Checking add-jwt:
- Delta adds "JWT Token Handling" requirement
- Searching codebase... no JWT implementation found

Resolution: Only add-oauth is implemented. Will sync add-oauth specs only.
```

Example 2: Both implemented
```
Conflict: specs/api/spec.md touched by [add-rest-api, add-graphql]

Checking add-rest-api (created 2026-01-10):
- Delta adds "REST Endpoints" requirement
- Searching codebase... found src/api/rest.ts

Checking add-graphql (created 2026-01-15):
- Delta adds "GraphQL Schema" requirement
- Searching codebase... found src/api/graphql.ts

Resolution: Both implemented. Will apply add-rest-api specs first,
then add-graphql specs (chronological order, newer takes precedence).
```

**Output On Success**

```
## Bulk Archive Complete

Archived N changes:
- <change-1> -> archive/YYYY-MM-DD-<change-1>/
- <change-2> -> archive/YYYY-MM-DD-<change-2>/

Spec sync summary:
- N delta specs synced to main specs
- No conflicts (or: M conflicts resolved)
```

**Output On Partial Success**

```
## Bulk Archive Complete (partial)

Archived N changes:
- <change-1> -> archive/YYYY-MM-DD-<change-1>/

Skipped M changes:
- <change-2> (user chose not to archive incomplete)

Failed K changes:
- <change-3>: Archive directory already exists
```

**Output When No Changes**

```
## No Changes to Archive

No active changes found. Use `/opsx:new` to create a new change.
```

**Guardrails**
- Allow any number of changes (1+ is fine, 2+ is the typical use case)
- Always prompt for selection, never auto-select
- Detect spec conflicts early and resolve by checking codebase
- When both changes are implemented, apply specs in chronological order
- Skip spec sync only when implementation is missing (warn user)
- Show clear per-change status before confirming
- Use single confirmation for entire batch
- Track and report all outcomes (success/skip/fail)
- Preserve .openspec.yaml when moving to archive
- Archive directory target uses current date: YYYY-MM-DD-<name>
- If archive target exists, fail that change but continue with others


================================================
FILE: .cursor/skills/openspec-continue-change/SKILL.md
================================================
---
name: openspec-continue-change
description: Continue working on an OpenSpec change by creating the next artifact. Use when the user wants to progress their change, create the next artifact, or continue their workflow.
license: MIT
compatibility: Requires openspec CLI.
metadata:
  author: openspec
  version: "1.0"
  generatedBy: "1.1.1"
---

Continue working on a change by creating the next artifact.

**Input**: Optionally specify a change name. If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.

**Steps**

1. **If no change name provided, prompt for selection**

   Run `openspec list --json` to get available changes sorted by most recently modified. Then use the **AskUserQuestion tool** to let the user select which change to work on.

   Present the top 3-4 most recently modified changes as options, showing:
   - Change name
   - Schema (from `schema` field if present, otherwise "spec-driven")
   - Status (e.g., "0/5 tasks", "complete", "no tasks")
   - How recently it was modified (from `lastModified` field)

   Mark the most recently modified change as "(Recommended)" since it's likely what the user wants to continue.

   **IMPORTANT**: Do NOT guess or auto-select a change. Always let the user choose.

2. **Check current status**
   ```bash
   openspec status --change "<name>" --json
   ```
   Parse the JSON to understand current state. The response includes:
   - `schemaName`: The workflow schema being used (e.g., "spec-driven")
   - `artifacts`: Array of artifacts with their status ("done", "ready", "blocked")
   - `isComplete`: Boolean indicating if all artifacts are complete

3. **Act based on status**:

   ---

   **If all artifacts are complete (`isComplete: true`)**:
   - Congratulate the user
   - Show final status including the schema used
   - Suggest: "All artifacts created! You can now implement this change or archive it."
   - STOP

   ---

   **If artifacts are ready to create** (status shows artifacts with `status: "ready"`):
   - Pick the FIRST artifact with `status: "ready"` from the status output
   - Get its instructions:
     ```bash
     openspec instructions <artifact-id> --change "<name>" --json
     ```
   - Parse the JSON. The key fields are:
     - `context`: Project background (constraints for you - do NOT include in output)
     - `rules`: Artifact-specific rules (constraints for you - do NOT include in output)
     - `template`: The structure to use for your output file
     - `instruction`: Schema-specific guidance
     - `outputPath`: Where to write the artifact
     - `dependencies`: Completed artifacts to read for context
   - **Create the artifact file**:
     - Read any completed dependency files for context
     - Use `template` as the structure - fill in its sections
     - Apply `context` and `rules` as constraints when writing - but do NOT copy them into the file
     - Write to the output path specified in instructions
   - Show what was created and what's now unlocked
   - STOP after creating ONE artifact

   ---

   **If no artifacts are ready (all blocked)**:
   - This shouldn't happen with a valid schema
   - Show status and suggest checking for issues

4. **After creating an artifact, show progress**
   ```bash
   openspec status --change "<name>"
   ```

**Output**

After each invocation, show:
- Which artifact was created
- Schema workflow being used
- Current progress (N/M complete)
- What artifacts are now unlocked
- Prompt: "Want to continue? Just ask me to continue or tell me what to do next."

**Artifact Creation Guidelines**

The artifact types and their purpose depend on the schema. Use the `instruction` field from the instructions output to understand what to create.

Common artifact patterns:

**spec-driven schema** (proposal → specs → design → tasks):
- **proposal.md**: Ask user about the change if not clear. Fill in Why, What Changes, Capabilities, Impact.
  - The Capabilities section is critical - each capability listed will need a spec file.
- **specs/<capability>/spec.md**: Create one spec per capability listed in the proposal's Capabilities section (use the capability name, not the change name).
- **design.md**: Document technical decisions, architecture, and implementation approach.
- **tasks.md**: Break down implementation into checkboxed tasks.

For other schemas, follow the `instruction` field from the CLI output.

**Guardrails**
- Create ONE artifact per invocation
- Always read dependency artifacts before creating a new one
- Never skip artifacts or create out of order
- If context is unclear, ask the user before creating
- Verify the artifact file exists after writing before marking progress
- Use the schema's artifact sequence, don't assume specific artifact names
- **IMPORTANT**: `context` and `rules` are constraints for YOU, not content for the file
  - Do NOT copy `<context>`, `<rules>`, `<project_context>` blocks into the artifact
  - These guide what you write, but should never appear in the output


================================================
FILE: .cursor/skills/openspec-explore/SKILL.md
================================================
---
name: openspec-explore
description: Enter explore mode - a thinking partner for exploring ideas, investigating problems, and clarifying requirements. Use when the user wants to think through something before or during a change.
license: MIT
compatibility: Requires openspec CLI.
metadata:
  author: openspec
  version: "1.0"
  generatedBy: "1.1.1"
---

Enter explore mode. Think deeply. Visualize freely. Follow the conversation wherever it goes.

**IMPORTANT: Explore mode is for thinking, not implementing.** You may read files, search code, and investigate the codebase, but you must NEVER write code or implement features. If the user asks you to implement something, remind them to exit explore mode first (e.g., start a change with `/opsx:new` or `/opsx:ff`). You MAY create OpenSpec artifacts (proposals, designs, specs) if the user asks—that's capturing thinking, not implementing.

**This is a stance, not a workflow.** There are no fixed steps, no required sequence, no mandatory outputs. You're a thinking partner helping the user explore.

---

## The Stance

- **Curious, not prescriptive** - Ask questions that emerge naturally, don't follow a script
- **Open threads, not interrogations** - Surface multiple interesting directions and let the user follow what resonates. Don't funnel them through a single path of questions.
- **Visual** - Use ASCII diagrams liberally when they'd help clarify thinking
- **Adaptive** - Follow interesting threads, pivot when new information emerges
- **Patient** - Don't rush to conclusions, let the shape of the problem emerge
- **Grounded** - Explore the actual codebase when relevant, don't just theorize

---

## What You Might Do

Depending on what the user brings, you might:

**Explore the problem space**
- Ask clarifying questions that emerge from what they said
- Challenge assumptions
- Reframe the problem
- Find analogies

**Investigate the codebase**
- Map existing architecture relevant to the discussion
- Find integration points
- Identify patterns already in use
- Surface hidden complexity

**Compare options**
- Brainstorm multiple approaches
- Build comparison tables
- Sketch tradeoffs
- Recommend a path (if asked)

**Visualize**
```
┌─────────────────────────────────────────┐
│     Use ASCII diagrams liberally        │
├─────────────────────────────────────────┤
│                                         │
│   ┌────────┐         ┌────────┐        │
│   │ State  │────────▶│ State  │        │
│   │   A    │         │   B    │        │
│   └────────┘         └────────┘        │
│                                         │
│   System diagrams, state machines,      │
│   data flows, architecture sketches,    │
│   dependency graphs, comparison tables  │
│                                         │
└─────────────────────────────────────────┘
```

**Surface risks and unknowns**
- Identify what could go wrong
- Find gaps in understanding
- Suggest spikes or investigations

---

## OpenSpec Awareness

You have full context of the OpenSpec system. Use it naturally, don't force it.

### Check for context

At the start, quickly check what exists:
```bash
openspec list --json
```

This tells you:
- If there are active changes
- Their names, schemas, and status
- What the user might be working on

### When no change exists

Think freely. When insights crystallize, you might offer:

- "This feels solid enough to start a change. Want me to create one?"
  → Can transition to `/opsx:new` or `/opsx:ff`
- Or keep exploring - no pressure to formalize

### When a change exists

If the user mentions a change or you detect one is relevant:

1. **Read existing artifacts for context**
   - `openspec/changes/<name>/proposal.md`
   - `openspec/changes/<name>/design.md`
   - `openspec/changes/<name>/tasks.md`
   - etc.

2. **Reference them naturally in conversation**
   - "Your design mentions using Redis, but we just realized SQLite fits better..."
   - "The proposal scopes this to premium users, but we're now thinking everyone..."

3. **Offer to capture when decisions are made**

   | Insight Type | Where to Capture |
   |--------------|------------------|
   | New requirement discovered | `specs/<capability>/spec.md` |
   | Requirement changed | `specs/<capability>/spec.md` |
   | Design decision made | `design.md` |
   | Scope changed | `proposal.md` |
   | New work identified | `tasks.md` |
   | Assumption invalidated | Relevant artifact |

   Example offers:
   - "That's a design decision. Capture it in design.md?"
   - "This is a new requirement. Add it to specs?"
   - "This changes scope. Update the proposal?"

4. **The user decides** - Offer and move on. Don't pressure. Don't auto-capture.

---

## What You Don't Have To Do

- Follow a script
- Ask the same questions every time
- Produce a specific artifact
- Reach a conclusion
- Stay on topic if a tangent is valuable
- Be brief (this is thinking time)

---

## Handling Different Entry Points

**User brings a vague idea:**
```
User: I'm thinking about adding real-time collaboration

You: Real-time collab is a big space. Let me think about this...

      COLLABORATION SPECTRUM
      ════════════════════════════════════════════

      Awareness          Coordination         Sync
          │                   │                 │
          ▼                   ▼                 ▼
      ┌────────┐         ┌────────┐        ┌────────┐
      │Presence│         │Cursors │        │  CRDT  │
      │  "3    │         │ Multi  │        │Conflict│
      │online" │         │ select │        │  free  │
      └────────┘         └────────┘        └────────┘
          │                   │                 │
       trivial            moderate           complex

      Where's your head at?
```

**User brings a specific problem:**
```
User: The auth system is a mess

You: [reads codebase]

     ┌─────────────────────────────────────────────┐
     │              CURRENT AUTH FLOW              │
     └─────────────────────────────────────────────┘
                        │
          ┌─────────────┼─────────────┐
          ▼             ▼             ▼
     ┌─────────┐  ┌─────────┐  ┌─────────┐
     │ Google  │  │  GitHub │  │  Email  │
     │  OAuth  │  │  OAuth  │  │  Magic  │
     └────┬────┘  └────┬────┘  └────┬────┘
          │             │             │
          └─────────────┼─────────────┘
                        ▼
                  ┌───────────┐
                  │  Session  │
                  └─────┬─────┘
                        │
                        ▼
                  ┌───────────┐
                  │   Perms   │
                  └───────────┘

     I see three tangles. Which one's burning?
```

**User is stuck mid-implementation:**
```
User: /opsx:explore add-auth-system
      The OAuth integration is more complex than expected

You: [reads change artifacts]

     You're on task 4: "Implement OAuth flow"

     Let me trace what's involved...

     [draws diagram, explores options, suggests paths]

     Want to update the design to reflect this?
     Or add a spike task to investigate?
```

**User wants to compare options:**
```
User: Should we use Postgres or SQLite?

You: Generic answer is boring. What's the context?

User: A CLI tool that tracks local dev environments

You: That changes everything.

     ┌─────────────────────────────────────────────────┐
     │         CLI TOOL DATA STORAGE                  │
     └─────────────────────────────────────────────────┘

     Key constraints:
     • No daemon running
     • Must work offline
     • Single user

                  SQLite          Postgres
     Deployment   embedded ✓      needs server ✗
     Offline      yes ✓           no ✗
     Single file  yes ✓           no ✗

     SQLite. Not even close.

     Unless... is there a sync component?
```

---

## Ending Discovery

There's no required ending. Discovery might:

- **Flow into action**: "Ready to start? /opsx:new or /opsx:ff"
- **Result in artifact updates**: "Updated design.md with these decisions"
- **Just provide clarity**: User has what they need, moves on
- **Continue later**: "We can pick this up anytime"

When it feels like things are crystallizing, you might summarize:

```
## What We Figured Out

**The problem**: [crystallized understanding]

**The approach**: [if one emerged]

**Open questions**: [if any remain]

**Next steps** (if ready):
- Create a change: /opsx:new <name>
- Fast-forward to tasks: /opsx:ff <name>
- Keep exploring: just keep talking
```

But this summary is optional. Sometimes the thinking IS the value.

---

## Guardrails

- **Don't implement** - Never write code or implement features. Creating OpenSpec artifacts is fine, writing application code is not.
- **Don't fake understanding** - If something is unclear, dig deeper
- **Don't rush** - Discovery is thinking time, not task time
- **Don't force structure** - Let patterns emerge naturally
- **Don't auto-capture** - Offer to save insights, don't just do it
- **Do visualize** - A good diagram is worth many paragraphs
- **Do explore the codebase** - Ground discussions in reality
- **Do question assumptions** - Including the user's and your own


================================================
FILE: .cursor/skills/openspec-ff-change/SKILL.md
================================================
---
name: openspec-ff-change
description: Fast-forward through OpenSpec artifact creation. Use when the user wants to quickly create all artifacts needed for implementation without stepping through each one individually.
license: MIT
compatibility: Requires openspec CLI.
metadata:
  author: openspec
  version: "1.0"
  generatedBy: "1.1.1"
---

Fast-forward through artifact creation - generate everything needed to start implementation in one go.

**Input**: The user's request should include a change name (kebab-case) OR a description of what they want to build.

**Steps**

1. **If no clear input provided, ask what they want to build**

   Use the **AskUserQuestion tool** (open-ended, no preset options) to ask:
   > "What change do you want to work on? Describe what you want to build or fix."

   From their description, derive a kebab-case name (e.g., "add user authentication" → `add-user-auth`).

   **IMPORTANT**: Do NOT proceed without understanding what the user wants to build.

2. **Create the change directory**
   ```bash
   openspec new change "<name>"
   ```
   This creates a scaffolded change at `openspec/changes/<name>/`.

3. **Get the artifact build order**
   ```bash
   openspec status --change "<name>" --json
   ```
   Parse the JSON to get:
   - `applyRequires`: array of artifact IDs needed before implementation (e.g., `["tasks"]`)
   - `artifacts`: list of all artifacts with their status and dependencies

4. **Create artifacts in sequence until apply-ready**

   Use the **TodoWrite tool** to track progress through the artifacts.

   Loop through artifacts in dependency order (artifacts with no pending dependencies first):

   a. **For each artifact that is `ready` (dependencies satisfied)**:
      - Get instructions:
        ```bash
        openspec instructions <artifact-id> --change "<name>" --json
        ```
      - The instructions JSON includes:
        - `context`: Project background (constraints for you - do NOT include in output)
        - `rules`: Artifact-specific rules (constraints for you - do NOT include in output)
        - `template`: The structure to use for your output file
        - `instruction`: Schema-specific guidance for this artifact type
        - `outputPath`: Where to write the artifact
        - `dependencies`: Completed artifacts to read for context
      - Read any completed dependency files for context
      - Create the artifact file using `template` as the structure
      - Apply `context` and `rules` as constraints - but do NOT copy them into the file
      - Show brief progress: "✓ Created <artifact-id>"

   b. **Continue until all `applyRequires` artifacts are complete**
      - After creating each artifact, re-run `openspec status --change "<name>" --json`
      - Check if every artifact ID in `applyRequires` has `status: "done"` in the artifacts array
      - Stop when all `applyRequires` artifacts are done

   c. **If an artifact requires user input** (unclear context):
      - Use **AskUserQuestion tool** to clarify
      - Then continue with creation

5. **Show final status**
   ```bash
   openspec status --change "<name>"
   ```

**Output**

After completing all artifacts, summarize:
- Change name and location
- List of artifacts created with brief descriptions
- What's ready: "All artifacts created! Ready for implementation."
- Prompt: "Run `/opsx:apply` or ask me to implement to start working on the tasks."

**Artifact Creation Guidelines**

- Follow the `instruction` field from `openspec instructions` for each artifact type
- The schema defines what each artifact should contain - follow it
- Read dependency artifacts for context before creating new ones
- Use `template` as the structure for your output file - fill in its sections
- **IMPORTANT**: `context` and `rules` are constraints for YOU, not content for the file
  - Do NOT copy `<context>`, `<rules>`, `<project_context>` blocks into the artifact
  - These guide what you write, but should never appear in the output

**Guardrails**
- Create ALL artifacts needed for implementation (as defined by schema's `apply.requires`)
- Always read dependency artifacts before creating a new one
- If context is critically unclear, ask the user - but prefer making reasonable decisions to keep momentum
- If a change with that name already exists, suggest continuing that change instead
- Verify each artifact file exists after writing before proceeding to next


================================================
FILE: .cursor/skills/openspec-new-change/SKILL.md
================================================
---
name: openspec-new-change
description: Start a new OpenSpec change using the experimental artifact workflow. Use when the user wants to create a new feature, fix, or modification with a structured step-by-step approach.
license: MIT
compatibility: Requires openspec CLI.
metadata:
  author: openspec
  version: "1.0"
  generatedBy: "1.1.1"
---

Start a new change using the experimental artifact-driven approach.

**Input**: The user's request should include a change name (kebab-case) OR a description of what they want to build.

**Steps**

1. **If no clear input provided, ask what they want to build**

   Use the **AskUserQuestion tool** (open-ended, no preset options) to ask:
   > "What change do you want to work on? Describe what you want to build or fix."

   From their description, derive a kebab-case name (e.g., "add user authentication" → `add-user-auth`).

   **IMPORTANT**: Do NOT proceed without understanding what the user wants to build.

2. **Determine the workflow schema**

   Use the default schema (omit `--schema`) unless the user explicitly requests a different workflow.

   **Use a different schema only if the user mentions:**
   - A specific schema name → use `--schema <name>`
   - "show workflows" or "what workflows" → run `openspec schemas --json` and let them choose

   **Otherwise**: Omit `--schema` to use the default.

3. **Create the change directory**
   ```bash
   openspec new change "<name>"
   ```
   Add `--schema <name>` only if the user requested a specific workflow.
   This creates a scaffolded change at `openspec/changes/<name>/` with the selected schema.

4. **Show the artifact status**
   ```bash
   openspec status --change "<name>"
   ```
   This shows which artifacts need to be created and which are ready (dependencies satisfied).

5. **Get instructions for the first artifact**
   The first artifact depends on the schema (e.g., `proposal` for spec-driven).
   Check the status output to find the first artifact with status "ready".
   ```bash
   openspec instructions <first-artifact-id> --change "<name>"
   ```
   This outputs the template and context for creating the first artifact.

6. **STOP and wait for user direction**

**Output**

After completing the steps, summarize:
- Change name and location
- Schema/workflow being used and its artifact sequence
- Current status (0/N artifacts complete)
- The template for the first artifact
- Prompt: "Ready to create the first artifact? Just describe what this change is about and I'll draft it, or ask me to continue."

**Guardrails**
- Do NOT create any artifacts yet - just show the instructions
- Do NOT advance beyond showing the first artifact template
- If the name is invalid (not kebab-case), ask for a valid name
- If a change with that name already exists, suggest continuing that change instead
- Pass --schema if using a non-default workflow


================================================
FILE: .cursor/skills/openspec-onboard/SKILL.md
================================================
---
name: openspec-onboard
description: Guided onboarding for OpenSpec - walk through a complete workflow cycle with narration and real codebase work.
license: MIT
compatibility: Requires openspec CLI.
metadata:
  author: openspec
  version: "1.0"
  generatedBy: "1.1.1"
---

Guide the user through their first complete OpenSpec workflow cycle. This is a teaching experience—you'll do real work in their codebase while explaining each step.

---

## Preflight

Before starting, check if OpenSpec is initialized:

```bash
openspec status --json 2>&1 || echo "NOT_INITIALIZED"
```

**If not initialized:**
> OpenSpec isn't set up in this project yet. Run `openspec init` first, then come back to `/opsx:onboard`.

Stop here if not initialized.

---

## Phase 1: Welcome

Display:

```
## Welcome to OpenSpec!

I'll walk you through a complete change cycle—from idea to implementation—using a real task in your codebase. Along the way, you'll learn the workflow by doing it.

**What we'll do:**
1. Pick a small, real task in your codebase
2. Explore the problem briefly
3. Create a change (the container for our work)
4. Build the artifacts: proposal → specs → design → tasks
5. Implement the tasks
6. Archive the completed change

**Time:** ~15-20 minutes

Let's start by finding something to work on.
```

---

## Phase 2: Task Selection

### Codebase Analysis

Scan the codebase for small improvement opportunities. Look for:

1. **TODO/FIXME comments** - Search for `TODO`, `FIXME`, `HACK`, `XXX` in code files
2. **Missing error handling** - `catch` blocks that swallow errors, risky operations without try-catch
3. **Functions without tests** - Cross-reference `src/` with test directories
4. **Type issues** - `any` types in TypeScript files (`: any`, `as any`)
5. **Debug artifacts** - `console.log`, `console.debug`, `debugger` statements in non-debug code
6. **Missing validation** - User input handlers without validation

Also check recent git activity:
```bash
git log --oneline -10 2>/dev/null || echo "No git history"
```

### Present Suggestions

From your analysis, present 3-4 specific suggestions:

```
## Task Suggestions

Based on scanning your codebase, here are some good starter tasks:

**1. [Most promising task]**
   Location: `src/path/to/file.ts:42`
   Scope: ~1-2 files, ~20-30 lines
   Why it's good: [brief reason]

**2. [Second task]**
   Location: `src/another/file.ts`
   Scope: ~1 file, ~15 lines
   Why it's good: [brief reason]

**3. [Third task]**
   Location: [location]
   Scope: [estimate]
   Why it's good: [brief reason]

**4. Something else?**
   Tell me what you'd like to work on.

Which task interests you? (Pick a number or describe your own)
```

**If nothing found:** Fall back to asking what the user wants to build:
> I didn't find obvious quick wins in your codebase. What's something small you've been meaning to add or fix?

### Scope Guardrail

If the user picks or describes something too large (major feature, multi-day work):

```
That's a valuable task, but it's probably larger than ideal for your first OpenSpec run-through.

For learning the workflow, smaller is better—it lets you see the full cycle without getting stuck in implementation details.

**Options:**
1. **Slice it smaller** - What's the smallest useful piece of [their task]? Maybe just [specific slice]?
2. **Pick something else** - One of the other suggestions, or a different small task?
3. **Do it anyway** - If you really want to tackle this, we can. Just know it'll take longer.

What would you prefer?
```

Let the user override if they insist—this is a soft guardrail.

---

## Phase 3: Explore Demo

Once a task is selected, briefly demonstrate explore mode:

```
Before we create a change, let me quickly show you **explore mode**—it's how you think through problems before committing to a direction.
```

Spend 1-2 minutes investigating the relevant code:
- Read the file(s) involved
- Draw a quick ASCII diagram if it helps
- Note any considerations

```
## Quick Exploration

[Your brief analysis—what you found, any considerations]

┌─────────────────────────────────────────┐
│   [Optional: ASCII diagram if helpful]  │
└─────────────────────────────────────────┘

Explore mode (`/opsx:explore`) is for this kind of thinking—investigating before implementing. You can use it anytime you need to think through a problem.

Now let's create a change to hold our work.
```

**PAUSE** - Wait for user acknowledgment before proceeding.

---

## Phase 4: Create the Change

**EXPLAIN:**
```
## Creating a Change

A "change" in OpenSpec is a container for all the thinking and planning around a piece of work. It lives in `openspec/changes/<name>/` and holds your artifacts—proposal, specs, design, tasks.

Let me create one for our task.
```

**DO:** Create the change with a derived kebab-case name:
```bash
openspec new change "<derived-name>"
```

**SHOW:**
```
Created: `openspec/changes/<name>/`

The folder structure:
```
openspec/changes/<name>/
├── proposal.md    ← Why we're doing this (empty, we'll fill it)
├── design.md      ← How we'll build it (empty)
├── specs/         ← Detailed requirements (empty)
└── tasks.md       ← Implementation checklist (empty)
```

Now let's fill in the first artifact—the proposal.
```

---

## Phase 5: Proposal

**EXPLAIN:**
```
## The Proposal

The proposal captures **why** we're making this change and **what** it involves at a high level. It's the "elevator pitch" for the work.

I'll draft one based on our task.
```

**DO:** Draft the proposal content (don't save yet):

```
Here's a draft proposal:

---

## Why

[1-2 sentences explaining the problem/opportunity]

## What Changes

[Bullet points of what will be different]

## Capabilities

### New Capabilities
- `<capability-name>`: [brief description]

### Modified Capabilities
<!-- If modifying existing behavior -->

## Impact

- `src/path/to/file.ts`: [what changes]
- [other files if applicable]

---

Does this capture the intent? I can adjust before we save it.
```

**PAUSE** - Wait for user approval/feedback.

After approval, save the proposal:
```bash
openspec instructions proposal --change "<name>" --json
```
Then write the content to `openspec/changes/<name>/proposal.md`.

```
Proposal saved. This is your "why" document—you can always come back and refine it as understanding evolves.

Next up: specs.
```

---

## Phase 6: Specs

**EXPLAIN:**
```
## Specs

Specs define **what** we're building in precise, testable terms. They use a requirement/scenario format that makes expected behavior crystal clear.

For a small task like this, we might only need one spec file.
```

**DO:** Create the spec file:
```bash
mkdir -p openspec/changes/<name>/specs/<capability-name>
```

Draft the spec content:

```
Here's the spec:

---

## ADDED Requirements

### Requirement: <Name>

<Description of what the system should do>

#### Scenario: <Scenario name>

- **WHEN** <trigger condition>
- **THEN** <expected outcome>
- **AND** <additional outcome if needed>

---

This format—WHEN/THEN/AND—makes requirements testable. You can literally read them as test cases.
```

Save to `openspec/changes/<name>/specs/<capability>/spec.md`.

---

## Phase 7: Design

**EXPLAIN:**
```
## Design

The design captures **how** we'll build it—technical decisions, tradeoffs, approach.

For small changes, this might be brief. That's fine—not every change needs deep design discussion.
```

**DO:** Draft design.md:

```
Here's the design:

---

## Context

[Brief context about the current state]

## Goals / Non-Goals

**Goals:**
- [What we're trying to achieve]

**Non-Goals:**
- [What's explicitly out of scope]

## Decisions

### Decision 1: [Key decision]

[Explanation of approach and rationale]

---

For a small task, this captures the key decisions without over-engineering.
```

Save to `openspec/changes/<name>/design.md`.

---

## Phase 8: Tasks

**EXPLAIN:**
```
## Tasks

Finally, we break the work into implementation tasks—checkboxes that drive the apply phase.

These should be small, clear, and in logical order.
```

**DO:** Generate tasks based on specs and design:

```
Here are the implementation tasks:

---

## 1. [Category or file]

- [ ] 1.1 [Specific task]
- [ ] 1.2 [Specific task]

## 2. Verify

- [ ] 2.1 [Verification step]

---

Each checkbox becomes a unit of work in the apply phase. Ready to implement?
```

**PAUSE** - Wait for user to confirm they're ready to implement.

Save to `openspec/changes/<name>/tasks.md`.

---

## Phase 9: Apply (Implementation)

**EXPLAIN:**
```
## Implementation

Now we implement each task, checking them off as we go. I'll announce each one and occasionally note how the specs/design informed the approach.
```

**DO:** For each task:

1. Announce: "Working on task N: [description]"
2. Implement the change in the codebase
3. Reference specs/design naturally: "The spec says X, so I'm doing Y"
4. Mark complete in tasks.md: `- [ ]` → `- [x]`
5. Brief status: "✓ Task N complete"

Keep narration light—don't over-explain every line of code.

After all tasks:

```
## Implementation Complete

All tasks done:
- [x] Task 1
- [x] Task 2
- [x] ...

The change is implemented! One more step—let's archive it.
```

---

## Phase 10: Archive

**EXPLAIN:**
```
## Archiving

When a change is complete, we archive it. This moves it from `openspec/changes/` to `openspec/changes/archive/YYYY-MM-DD-<name>/`.

Archived changes become your project's decision history—you can always find them later to understand why something was built a certain way.
```

**DO:**
```bash
openspec archive "<name>"
```

**SHOW:**
```
Archived to: `openspec/changes/archive/YYYY-MM-DD-<name>/`

The change is now part of your project's history. The code is in your codebase, the decision record is preserved.
```

---

## Phase 11: Recap & Next Steps

```
## Congratulations!

You just completed a full OpenSpec cycle:

1. **Explore** - Thought through the problem
2. **New** - Created a change container
3. **Proposal** - Captured WHY
4. **Specs** - Defined WHAT in detail
5. **Design** - Decided HOW
6. **Tasks** - Broke it into steps
7. **Apply** - Implemented the work
8. **Archive** - Preserved the record

This same rhythm works for any size change—a small fix or a major feature.

---

## Command Reference

| Command | What it does |
|---------|--------------|
| `/opsx:explore` | Think through problems before/during work |
| `/opsx:new` | Start a new change, step through artifacts |
| `/opsx:ff` | Fast-forward: create all artifacts at once |
| `/opsx:continue` | Continue working on an existing change |
| `/opsx:apply` | Implement tasks from a change |
| `/opsx:verify` | Verify implementation matches artifacts |
| `/opsx:archive` | Archive a completed change |

---

## What's Next?

Try `/opsx:new` or `/opsx:ff` on something you actually want to build. You've got the rhythm now!
```

---

## Graceful Exit Handling

### User wants to stop mid-way

If the user says they need to stop, want to pause, or seem disengaged:

```
No problem! Your change is saved at `openspec/changes/<name>/`.

To pick up where we left off later:
- `/opsx:continue <name>` - Resume artifact creation
- `/opsx:apply <name>` - Jump to implementation (if tasks exist)

The work won't be lost. Come back whenever you're ready.
```

Exit gracefully without pressure.

### User just wants command reference

If the user says they just want to see the commands or skip the tutorial:

```
## OpenSpec Quick Reference

| Command | What it does |
|---------|--------------|
| `/opsx:explore` | Think through problems (no code changes) |
| `/opsx:new <name>` | Start a new change, step by step |
| `/opsx:ff <name>` | Fast-forward: all artifacts at once |
| `/opsx:continue <name>` | Continue an existing change |
| `/opsx:apply <name>` | Implement tasks |
| `/opsx:verify <name>` | Verify implementation |
| `/opsx:archive <name>` | Archive when done |

Try `/opsx:new` to start your first change, or `/opsx:ff` if you want to move fast.
```

Exit gracefully.

---

## Guardrails

- **Follow the EXPLAIN → DO → SHOW → PAUSE pattern** at key transitions (after explore, after proposal draft, after tasks, after archive)
- **Keep narration light** during implementation—teach without lecturing
- **Don't skip phases** even if the change is small—the goal is teaching the workflow
- **Pause for acknowledgment** at marked points, but don't over-pause
- **Handle exits gracefully**—never pressure the user to continue
- **Use real codebase tasks**—don't simulate or use fake examples
- **Adjust scope gently**—guide toward smaller tasks but respect user choice


================================================
FILE: .cursor/skills/openspec-sync-specs/SKILL.md
================================================
---
name: openspec-sync-specs
description: Sync delta specs from a change to main specs. Use when the user wants to update main specs with changes from a delta spec, without archiving the change.
license: MIT
compatibility: Requires openspec CLI.
metadata:
  author: openspec
  version: "1.0"
  generatedBy: "1.1.1"
---

Sync delta specs from a change to main specs.

This is an **agent-driven** operation - you will read delta specs and directly edit main specs to apply the changes. This allows intelligent merging (e.g., adding a scenario without copying the entire requirement).

**Input**: Optionally specify a change name. If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.

**Steps**

1. **If no change name provided, prompt for selection**

   Run `openspec list --json` to get available changes. Use the **AskUserQuestion tool** to let the user select.

   Show changes that have delta specs (under `specs/` directory).

   **IMPORTANT**: Do NOT guess or auto-select a change. Always let the user choose.

2. **Find delta specs**

   Look for delta spec files in `openspec/changes/<name>/specs/*/spec.md`.

   Each delta spec file contains sections like:
   - `## ADDED Requirements` - New requirements to add
   - `## MODIFIED Requirements` - Changes to existing requirements
   - `## REMOVED Requirements` - Requirements to remove
   - `## RENAMED Requirements` - Requirements to rename (FROM:/TO: format)

   If no delta specs found, inform user and stop.

3. **For each delta spec, apply changes to main specs**

   For each capability with a delta spec at `openspec/changes/<name>/specs/<capability>/spec.md`:

   a. **Read the delta spec** to understand the intended changes

   b. **Read the main spec** at `openspec/specs/<capability>/spec.md` (may not exist yet)

   c. **Apply changes intelligently**:

      **ADDED Requirements:**
      - If requirement doesn't exist in main spec → add it
      - If requirement already exists → update it to match (treat as implicit MODIFIED)

      **MODIFIED Requirements:**
      - Find the requirement in main spec
      - Apply the changes - this can be:
        - Adding new scenarios (don't need to copy existing ones)
        - Modifying existing scenarios
        - Changing the requirement description
      - Preserve scenarios/content not mentioned in the delta

      **REMOVED Requirements:**
      - Remove the entire requirement block from main spec

      **RENAMED Requirements:**
      - Find the FROM requirement, rename to TO

   d. **Create new main spec** if capability doesn't exist yet:
      - Create `openspec/specs/<capability>/spec.md`
      - Add Purpose section (can be brief, mark as TBD)
      - Add Requirements section with the ADDED requirements

4. **Show summary**

   After applying all changes, summarize:
   - Which capabilities were updated
   - What changes were made (requirements added/modified/removed/renamed)

**Delta Spec Format Reference**

```markdown
## ADDED Requirements

### Requirement: New Feature
The system SHALL do something new.

#### Scenario: Basic case
- **WHEN** user does X
- **THEN** system does Y

## MODIFIED Requirements

### Requirement: Existing Feature
#### Scenario: New scenario to add
- **WHEN** user does A
- **THEN** system does B

## REMOVED Requirements

### Requirement: Deprecated Feature

## RENAMED Requirements

- FROM: `### Requirement: Old Name`
- TO: `### Requirement: New Name`
```

**Key Principle: Intelligent Merging**

Unlike programmatic merging, you can apply **partial updates**:
- To add a scenario, just include that scenario under MODIFIED - don't copy existing scenarios
- The delta represents *intent*, not a wholesale replacement
- Use your judgment to merge changes sensibly

**Output On Success**

```
## Specs Synced: <change-name>

Updated main specs:

**<capability-1>**:
- Added requirement: "New Feature"
- Modified requirement: "Existing Feature" (added 1 scenario)

**<capability-2>**:
- Created new spec file
- Added requirement: "Another Feature"

Main specs are now updated. The change remains active - archive when implementation is complete.
```

**Guardrails**
- Read both delta and main specs before making changes
- Preserve existing content not mentioned in delta
- If something is unclear, ask for clarification
- Show what you're changing as you go
- The operation should be idempotent - running twice should give same result


================================================
FILE: .cursor/skills/openspec-verify-change/SKILL.md
================================================
---
name: openspec-verify-change
description: Verify implementation matches change artifacts. Use when the user wants to validate that implementation is complete, correct, and coherent before archiving.
license: MIT
compatibility: Requires openspec CLI.
metadata:
  author: openspec
  version: "1.0"
  generatedBy: "1.1.1"
---

Verify that an implementation matches the change artifacts (specs, tasks, design).

**Input**: Optionally specify a change name. If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.

**Steps**

1. **If no change name provided, prompt for selection**

   Run `openspec list --json` to get available changes. Use the **AskUserQuestion tool** to let the user select.

   Show changes that have implementation tasks (tasks artifact exists).
   Include the schema used for each change if available.
   Mark changes with incomplete tasks as "(In Progress)".

   **IMPORTANT**: Do NOT guess or auto-select a change. Always let the user choose.

2. **Check status to understand the schema**
   ```bash
   openspec status --change "<name>" --json
   ```
   Parse the JSON to understand:
   - `schemaName`: The workflow being used (e.g., "spec-driven")
   - Which artifacts exist for this change

3. **Get the change directory and load artifacts**

   ```bash
   openspec instructions apply --change "<name>" --json
   ```

   This returns the change directory and context files. Read all available artifacts from `contextFiles`.

4. **Initialize verification report structure**

   Create a report structure with three dimensions:
   - **Completeness**: Track tasks and spec coverage
   - **Correctness**: Track requirement implementation and scenario coverage
   - **Coherence**: Track design adherence and pattern consistency

   Each dimension can have CRITICAL, WARNING, or SUGGESTION issues.

5. **Verify Completeness**

   **Task Completion**:
   - If tasks.md exists in contextFiles, read it
   - Parse checkboxes: `- [ ]` (incomplete) vs `- [x]` (complete)
   - Count complete vs total tasks
   - If incomplete tasks exist:
     - Add CRITICAL issue for each incomplete task
     - Recommendation: "Complete task: <description>" or "Mark as done if already implemented"

   **Spec Coverage**:
   - If delta specs exist in `openspec/changes/<name>/specs/`:
     - Extract all requirements (marked with "### Requirement:")
     - For each requirement:
       - Search codebase for keywords related to the requirement
       - Assess if implementation likely exists
     - If requirements appear unimplemented:
       - Add CRITICAL issue: "Requirement not found: <requirement name>"
       - Recommendation: "Implement requirement X: <description>"

6. **Verify Correctness**

   **Requirement Implementation Mapping**:
   - For each requirement from delta specs:
     - Search codebase for implementation evidence
     - If found, note file paths and line ranges
     - Assess if implementation matches requirement intent
     - If divergence detected:
       - Add WARNING: "Implementation may diverge from spec: <details>"
       - Recommendation: "Review <file>:<lines> against requirement X"

   **Scenario Coverage**:
   - For each scenario in delta specs (marked with "#### Scenario:"):
     - Check if conditions are handled in code
     - Check if tests exist covering the scenario
     - If scenario appears uncovered:
       - Add WARNING: "Scenario not covered: <scenario name>"
       - Recommendation: "Add test or implementation for scenario: <description>"

7. **Verify Coherence**

   **Design Adherence**:
   - If design.md exists in contextFiles:
     - Extract key decisions (look for sections like "Decision:", "Approach:", "Architecture:")
     - Verify implementation follows those decisions
     - If contradiction detected:
       - Add WARNING: "Design decision not followed: <decision>"
       - Recommendation: "Update implementation or revise design.md to match reality"
   - If no design.md: Skip design adherence check, note "No design.md to verify against"

   **Code Pattern Consistency**:
   - Review new code for consistency with project patterns
   - Check file naming, directory structure, coding style
   - If significant deviations found:
     - Add SUGGESTION: "Code pattern deviation: <details>"
     - Recommendation: "Consider following project pattern: <example>"

8. **Generate Verification Report**

   **Summary Scorecard**:
   ```
   ## Verification Report: <change-name>

   ### Summary
   | Dimension    | Status           |
   |--------------|------------------|
   | Completeness | X/Y tasks, N reqs|
   | Correctness  | M/N reqs covered |
   | Coherence    | Followed/Issues  |
   ```

   **Issues by Priority**:

   1. **CRITICAL** (Must fix before archive):
      - Incomplete tasks
      - Missing requirement implementations
      - Each with specific, actionable recommendation

   2. **WARNING** (Should fix):
      - Spec/design divergences
      - Missing scenario coverage
      - Each with specific recommendation

   3. **SUGGESTION** (Nice to fix):
      - Pattern inconsistencies
      - Minor improvements
      - Each with specific recommendation

   **Final Assessment**:
   - If CRITICAL issues: "X critical issue(s) found. Fix before archiving."
   - If only warnings: "No critical issues. Y warning(s) to consider. Ready for archive (with noted improvements)."
   - If all clear: "All checks passed. Ready for archive."

**Verification Heuristics**

- **Completeness**: Focus on objective checklist items (checkboxes, requirements list)
- **Correctness**: Use keyword search, file path analysis, reasonable inference - don't require perfect certainty
- **Coherence**: Look for glaring inconsistencies, don't nitpick style
- **False Positives**: When uncertain, prefer SUGGESTION over WARNING, WARNING over CRITICAL
- **Actionability**: Every issue must have a specific recommendation with file/line references where applicable

**Graceful Degradation**

- If only tasks.md exists: verify task completion only, skip spec/design checks
- If tasks + specs exist: verify completeness and correctness, skip design
- If full artifacts: verify all three dimensions
- Always note which checks were skipped and why

**Output Format**

Use clear markdown with:
- Table for summary scorecard
- Grouped lists for issues (CRITICAL/WARNING/SUGGESTION)
- Code references in format: `file.ts:123`
- Specific, actionable recommendations
- No vague suggestions like "consider reviewing"


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: Bug report
description: Create a report to help us improve
title: "[BUG] "
labels: ["bug", "triage"]
assignees: []
body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to fill out this bug report!
  - type: input
    id: dbtype
    attributes:
      label: Database Type
      description: What database are you using?
      placeholder: e.g., MySQL, Oracle...
    validations:
      required: true
  - type: input
    id: dbversion
    attributes:
      label: Database Version
      description: What version of the database are you using?
      placeholder: e.g., MySQL 5.7, Oracle 12c...
    validations:
      required: true
  - type: input
    id: druid-version
    attributes:
      label: Druid Version
      description: What version of Druid are you using?
      placeholder: e.g., 1.2.22
    validations:
      required: true
  - type: input
    id: jdk-version
    attributes:
      label: JDK Version
      description: What version of JDK are you using?
      placeholder: e.g., OpenJDK 11
    validations:
      required: true
  - type: textarea
    id: error-sql
    attributes:
      label: Error SQL
      description: Please provide the SQL that caused the error.
      placeholder: SELECT * FROM your_table
    validations:
      required: true
  - type: textarea
    id: testcase-code
    attributes:
      label: Testcase Code
      description: Please provide the testcase code that reproduces the issue.
      placeholder: |
        ```java
        // Your testcase code here
        ```
    validations:
      required: false
  - type: textarea
    id: stacktrace-info
    attributes:
      label: Stacktrace Info
      description: Please provide the stacktrace information if applicable.
      placeholder: |
        ```java
        // Your stacktrace here
        ```
    validations:
      required: false
  - type: textarea
    id: error-info
    attributes:
      label: Error Info
      description: Please provide any additional error information or logs.
      placeholder: |
        ```log
        // Your error info or logs here
        ```
    validations:
      required: false


================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
<!--
please follow the issue template below for bug reports and feature requests
for example, if you are reporting a bug, please provide the following information:
dbtype: mysql
dbversion: 5.7
duird version: 1.2.22
jdk version: 17
error sql: select * from test
error info: error message
-->
**dbtype:** 
**dbversion:** 
**druid verion:**
**jdk verion:**
**error sql:**
**testcase code:**
**stacktrace info:**
**error info:**
---
<!--
Thanks for taking the time to create an issue. Please read the following:

- For bugs, specify affected versions and explain what you are trying to do.
- For enhancements, provide context and describe the problem.

Issue or Pull Request? Create only one, not both. GitHub treats them as the same.
If unsure, start with an issue, and if you submit a pull request later, the
issue will be closed as superseded.
-->


================================================
FILE: .github/workflows/ci.yaml
================================================
---
name: Java CI

on:
  push:
    # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#example-excluding-paths
    paths-ignore:
      - 'docs/**'
      - '**.md'
  pull_request:
    paths-ignore:
      - 'docs/**'
      - '**.md'

jobs:
  test:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ ubuntu-latest ]
        java: [ 8, 11, 17, 21 ]
      fail-fast: false
      max-parallel: 16
    name: Test JDK ${{ matrix.java }}, ${{ matrix.os }}

    steps:
      - uses: actions/checkout@v4
      - name: Set up JDK
        uses: actions/setup-java@v4
        with:
          distribution: 'temurin'
          java-version: ${{ matrix.java }}
          cache: 'maven'
      - name: Build with Maven if test jdk8
        if: ${{ matrix.java == '8' || matrix.java == '11'}}
        run: ./mvnw -Pgen-javadoc clean package -B
      - name: Build with Maven if test jdk17
        if: ${{ matrix.java == '17' || matrix.java == '21' }}
        run: ./mvnw -Penable-for-jdk17+,gen-code-cov clean package -B
      - name: "Codecov if test jdk17"
        if: ${{ matrix.java == '17' }}
        uses: codecov/codecov-action@v3.1.0
        with:
          files: ./core/target/site/jacoco/jacoco.xml,./druid-spring-boot-starter/target/site/jacoco/jacoco.xml,./druid-spring-boot-3-starter/target/site/jacoco/jacoco.xml


================================================
FILE: .gitignore
================================================
target
.settings
.project
.classpath
.DS_Store
/1
/derby.log
/src/test/resources/pool_config
/src/test/java/com/alibaba/druid/local_test
/src/test/java/com/alibaba/druid/pool/mysql/
# IntelliJ Idea
.idea/
out/
*.ipr
*.iws
*.iml
/bin
/druid-inner-test
hs_err_pid*.log
replay_pid*.log
/core/derby.log
/demo-db.mv.db
/demo-db.trace.db

.vscode
druid-spring-boot-3-starter/demo-db.mv.db
/worktrees/
.claude/worktrees/


================================================
FILE: .mvn/wrapper/MavenWrapperDownloader.java
================================================
/*
 * Copyright 2007-present the original author or authors.
 *
 * 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.
 */
import java.net.*;
import java.io.*;
import java.nio.channels.*;
import java.util.Properties;

public class MavenWrapperDownloader {
    private static final String WRAPPER_VERSION = "0.5.6";
    /**
     * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
     */
    private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
        + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";

    /**
     * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
     * use instead of the default one.
     */
    private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
            ".mvn/wrapper/maven-wrapper.properties";

    /**
     * Path where the maven-wrapper.jar will be saved to.
     */
    private static final String MAVEN_WRAPPER_JAR_PATH =
            ".mvn/wrapper/maven-wrapper.jar";

    /**
     * Name of the property which should be used to override the default download url for the wrapper.
     */
    private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";

    public static void main(String args[]) {
        System.out.println("- Downloader started");
        File baseDirectory = new File(args[0]);
        System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());

        // If the maven-wrapper.properties exists, read it and check if it contains a custom
        // wrapperUrl parameter.
        File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
        String url = DEFAULT_DOWNLOAD_URL;
        if(mavenWrapperPropertyFile.exists()) {
            FileInputStream mavenWrapperPropertyFileInputStream = null;
            try {
                mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
                Properties mavenWrapperProperties = new Properties();
                mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
                url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
            } catch (IOException e) {
                System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
            } finally {
                try {
                    if(mavenWrapperPropertyFileInputStream != null) {
                        mavenWrapperPropertyFileInputStream.close();
                    }
                } catch (IOException e) {
                    // Ignore ...
                }
            }
        }
        System.out.println("- Downloading from: " + url);

        File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
        if(!outputFile.getParentFile().exists()) {
            if(!outputFile.getParentFile().mkdirs()) {
                System.out.println(
                        "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
            }
        }
        System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
        try {
            downloadFileFromURL(url, outputFile);
            System.out.println("Done");
            System.exit(0);
        } catch (Throwable e) {
            System.out.println("- Error downloading");
            e.printStackTrace();
            System.exit(1);
        }
    }

    private static void downloadFileFromURL(String urlString, File destination) throws Exception {
        if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
            String username = System.getenv("MVNW_USERNAME");
            char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
            Authenticator.setDefault(new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(username, password);
                }
            });
        }
        URL website = new URL(urlString);
        ReadableByteChannel rbc;
        rbc = Channels.newChannel(website.openStream());
        FileOutputStream fos = new FileOutputStream(destination);
        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
        fos.close();
        rbc.close();
    }

}


================================================
FILE: .mvn/wrapper/maven-wrapper.properties
================================================
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.5/apache-maven-3.8.5-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar


================================================
FILE: .qoder/commands/opsx/apply.md
================================================
---
name: OPSX: Apply
description: Implement tasks from an OpenSpec change (Experimental)
category: Workflow
tags: [workflow, artifacts, experimental]
---

Implement tasks from an OpenSpec change.

**Input**: Optionally specify a change name (e.g., `/opsx:apply add-auth`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.

**Steps**

1. **Select the change**

   If a name is provided, use it. Otherwise:
   - Infer from conversation context if the user mentioned a change
   - Auto-select if only one active change exists
   - If ambiguous, run `openspec list --json` to get available changes and use the **AskUserQuestion tool** to let the user select

   Always announce: "Using change: <name>" and how to override (e.g., `/opsx:apply <other>`).

2. **Check status to understand the schema**
   ```bash
   openspec status --change "<name>" --json
   ```
   Parse the JSON to understand:
   - `schemaName`: The workflow being used (e.g., "spec-driven")
   - Which artifact contains the tasks (typically "tasks" for spec-driven, check status for others)

3. **Get apply instructions**

   ```bash
   openspec instructions apply --change "<name>" --json
   ```

   This returns:
   - Context file paths (varies by schema)
   - Progress (total, complete, remaining)
   - Task list with status
   - Dynamic instruction based on current state

   **Handle states:**
   - If `state: "blocked"` (missing artifacts): show message, suggest using `/opsx:continue`
   - If `state: "all_done"`: congratulate, suggest archive
   - Otherwise: proceed to implementation

4. **Read context files**

   Read the files listed in `contextFiles` from the apply instructions output.
   The files depend on the schema being used:
   - **spec-driven**: proposal, specs, design, tasks
   - Other schemas: follow the contextFiles from CLI output

5. **Show current progress**

   Display:
   - Schema being used
   - Progress: "N/M tasks complete"
   - Remaining tasks overview
   - Dynamic instruction from CLI

6. **Implement tasks (loop until done or blocked)**

   For each pending task:
   - Show which task is being worked on
   - Make the code changes required
   - Keep changes minimal and focused
   - Mark task complete in the tasks file: `- [ ]` → `- [x]`
   - Continue to next task

   **Pause if:**
   - Task is unclear → ask for clarification
   - Implementation reveals a design issue → suggest updating artifacts
   - Error or blocker encountered → report and wait for guidance
   - User interrupts

7. **On completion or pause, show status**

   Display:
   - Tasks completed this session
   - Overall progress: "N/M tasks complete"
   - If all done: suggest archive
   - If paused: explain why and wait for guidance

**Output During Implementation**

```
## Implementing: <change-name> (schema: <schema-name>)

Working on task 3/7: <task description>
[...implementation happening...]
✓ Task complete

Working on task 4/7: <task description>
[...implementation happening...]
✓ Task complete
```

**Output On Completion**

```
## Implementation Complete

**Change:** <change-name>
**Schema:** <schema-name>
**Progress:** 7/7 tasks complete ✓

### Completed This Session
- [x] Task 1
- [x] Task 2
...

All tasks complete! You can archive this change with `/opsx:archive`.
```

**Output On Pause (Issue Encountered)**

```
## Implementation Paused

**Change:** <change-name>
**Schema:** <schema-name>
**Progress:** 4/7 tasks complete

### Issue Encountered
<description of the issue>

**Options:**
1. <option 1>
2. <option 2>
3. Other approach

What would you like to do?
```

**Guardrails**
- Keep going through tasks until done or blocked
- Always read context files before starting (from the apply instructions output)
- If task is ambiguous, pause and ask before implementing
- If implementation reveals issues, pause and suggest artifact updates
- Keep code changes minimal and scoped to each task
- Update task checkbox immediately after completing each task
- Pause on errors, blockers, or unclear requirements - don't guess
- Use contextFiles from CLI output, don't assume specific file names

**Fluid Workflow Integration**

This skill supports the "actions on a change" model:

- **Can be invoked anytime**: Before all artifacts are done (if tasks exist), after partial implementation, interleaved with other actions
- **Allows artifact updates**: If implementation reveals design issues, suggest updating artifacts - not phase-locked, work fluidly


================================================
FILE: .qoder/commands/opsx/archive.md
================================================
---
name: OPSX: Archive
description: Archive a completed change in the experimental workflow
category: Workflow
tags: [workflow, archive, experimental]
---

Archive a completed change in the experimental workflow.

**Input**: Optionally specify a change name after `/opsx:archive` (e.g., `/opsx:archive add-auth`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.

**Steps**

1. **If no change name provided, prompt for selection**

   Run `openspec list --json` to get available changes. Use the **AskUserQuestion tool** to let the user select.

   Show only active changes (not already archived).
   Include the schema used for each change if available.

   **IMPORTANT**: Do NOT guess or auto-select a change. Always let the user choose.

2. **Check artifact completion status**

   Run `openspec status --change "<name>" --json` to check artifact completion.

   Parse the JSON to understand:
   - `schemaName`: The workflow being used
   - `artifacts`: List of artifacts with their status (`done` or other)

   **If any artifacts are not `done`:**
   - Display warning listing incomplete artifacts
   - Prompt user for confirmation to continue
   - Proceed if user confirms

3. **Check task completion status**

   Read the tasks file (typically `tasks.md`) to check for incomplete tasks.

   Count tasks marked with `- [ ]` (incomplete) vs `- [x]` (complete).

   **If incomplete tasks found:**
   - Display warning showing count of incomplete tasks
   - Prompt user for confirmation to continue
   - Proceed if user confirms

   **If no tasks file exists:** Proceed without task-related warning.

4. **Assess delta spec sync state**

   Check for delta specs at `openspec/changes/<name>/specs/`. If none exist, proceed without sync prompt.

   **If delta specs exist:**
   - Compare each delta spec with its corresponding main spec at `openspec/specs/<capability>/spec.md`
   - Determine what changes would be applied (adds, modifications, removals, renames)
   - Show a combined summary before prompting

   **Prompt options:**
   - If changes needed: "Sync now (recommended)", "Archive without syncing"
   - If already synced: "Archive now", "Sync anyway", "Cancel"

   If user chooses sync, execute `/opsx:sync` logic. Proceed to archive regardless of choice.

5. **Perform the archive**

   Create the archive directory if it doesn't exist:
   ```bash
   mkdir -p openspec/changes/archive
   ```

   Generate target name using current date: `YYYY-MM-DD-<change-name>`

   **Check if target already exists:**
   - If yes: Fail with error, suggest renaming existing archive or using different date
   - If no: Move the change directory to archive

   ```bash
   mv openspec/changes/<name> openspec/changes/archive/YYYY-MM-DD-<name>
   ```

6. **Display summary**

   Show archive completion summary including:
   - Change name
   - Schema that was used
   - Archive location
   - Spec sync status (synced / sync skipped / no delta specs)
   - Note about any warnings (incomplete artifacts/tasks)

**Output On Success**

```
## Archive Complete

**Change:** <change-name>
**Schema:** <schema-name>
**Archived to:** openspec/changes/archive/YYYY-MM-DD-<name>/
**Specs:** ✓ Synced to main specs

All artifacts complete. All tasks complete.
```

**Output On Success (No Delta Specs)**

```
## Archive Complete

**Change:** <change-name>
**Schema:** <schema-name>
**Archived to:** openspec/changes/archive/YYYY-MM-DD-<name>/
**Specs:** No delta specs

All artifacts complete. All tasks complete.
```

**Output On Success With Warnings**

```
## Archive Complete (with warnings)

**Change:** <change-name>
**Schema:** <schema-name>
**Archived to:** openspec/changes/archive/YYYY-MM-DD-<name>/
**Specs:** Sync skipped (user chose to skip)

**Warnings:**
- Archived with 2 incomplete artifacts
- Archived with 3 incomplete tasks
- Delta spec sync was skipped (user chose to skip)

Review the archive if this was not intentional.
```

**Output On Error (Archive Exists)**

```
## Archive Failed

**Change:** <change-name>
**Target:** openspec/changes/archive/YYYY-MM-DD-<name>/

Target archive directory already exists.

**Options:**
1. Rename the existing archive
2. Delete the existing archive if it's a duplicate
3. Wait until a different date to archive
```

**Guardrails**
- Always prompt for change selection if not provided
- Use artifact graph (openspec status --json) for completion checking
- Don't block archive on warnings - just inform and confirm
- Preserve .openspec.yaml when moving to archive (it moves with the directory)
- Show clear summary of what happened
- If sync is requested, use /opsx:sync approach (agent-driven)
- If delta specs exist, always run the sync assessment and show the combined summary before prompting


================================================
FILE: .qoder/commands/opsx/bulk-archive.md
================================================
---
name: OPSX: Bulk Archive
description: Archive multiple completed changes at once
category: Workflow
tags: [workflow, archive, experimental, bulk]
---

Archive multiple completed changes in a single operation.

This skill allows you to batch-archive changes, handling spec conflicts intelligently by checking the codebase to determine what's actually implemented.

**Input**: None required (prompts for selection)

**Steps**

1. **Get active changes**

   Run `openspec list --json` to get all active changes.

   If no active changes exist, inform user and stop.

2. **Prompt for change selection**

   Use **AskUserQuestion tool** with multi-select to let user choose changes:
   - Show each change with its schema
   - Include an option for "All changes"
   - Allow any number of selections (1+ works, 2+ is the typical use case)

   **IMPORTANT**: Do NOT auto-select. Always let the user choose.

3. **Batch validation - gather status for all selected changes**

   For each selected change, collect:

   a. **Artifact status** - Run `openspec status --change "<name>" --json`
      - Parse `schemaName` and `artifacts` list
      - Note which artifacts are `done` vs other states

   b. **Task completion** - Read `openspec/changes/<name>/tasks.md`
      - Count `- [ ]` (incomplete) vs `- [x]` (complete)
      - If no tasks file exists, note as "No tasks"

   c. **Delta specs** - Check `openspec/changes/<name>/specs/` directory
      - List which capability specs exist
      - For each, extract requirement names (lines matching `### Requirement: <name>`)

4. **Detect spec conflicts**

   Build a map of `capability -> [changes that touch it]`:

   ```
   auth -> [change-a, change-b]  <- CONFLICT (2+ changes)
   api  -> [change-c]            <- OK (only 1 change)
   ```

   A conflict exists when 2+ selected changes have delta specs for the same capability.

5. **Resolve conflicts agentically**

   **For each conflict**, investigate the codebase:

   a. **Read the delta specs** from each conflicting change to understand what each claims to add/modify

   b. **Search the codebase** for implementation evidence:
      - Look for code implementing requirements from each delta spec
      - Check for related files, functions, or tests

   c. **Determine resolution**:
      - If only one change is actually implemented -> sync that one's specs
      - If both implemented -> apply in chronological order (older first, newer overwrites)
      - If neither implemented -> skip spec sync, warn user

   d. **Record resolution** for each conflict:
      - Which change's specs to apply
      - In what order (if both)
      - Rationale (what was found in codebase)

6. **Show consolidated status table**

   Display a table summarizing all changes:

   ```
   | Change               | Artifacts | Tasks | Specs   | Conflicts | Status |
   |---------------------|-----------|-------|---------|-----------|--------|
   | schema-management   | Done      | 5/5   | 2 delta | None      | Ready  |
   | project-config      | Done      | 3/3   | 1 delta | None      | Ready  |
   | add-oauth           | Done      | 4/4   | 1 delta | auth (!)  | Ready* |
   | add-verify-skill    | 1 left    | 2/5   | None    | None      | Warn   |
   ```

   For conflicts, show the resolution:
   ```
   * Conflict resolution:
     - auth spec: Will apply add-oauth then add-jwt (both implemented, chronological order)
   ```

   For incomplete changes, show warnings:
   ```
   Warnings:
   - add-verify-skill: 1 incomplete artifact, 3 incomplete tasks
   ```

7. **Confirm batch operation**

   Use **AskUserQuestion tool** with a single confirmation:

   - "Archive N changes?" with options based on status
   - Options might include:
     - "Archive all N changes"
     - "Archive only N ready changes (skip incomplete)"
     - "Cancel"

   If there are incomplete changes, make clear they'll be archived with warnings.

8. **Execute archive for each confirmed change**

   Process changes in the determined order (respecting conflict resolution):

   a. **Sync specs** if delta specs exist:
      - Use the openspec-sync-specs approach (agent-driven intelligent merge)
      - For conflicts, apply in resolved order
      - Track if sync was done

   b. **Perform the archive**:
      ```bash
      mkdir -p openspec/changes/archive
      mv openspec/changes/<name> openspec/changes/archive/YYYY-MM-DD-<name>
      ```

   c. **Track outcome** for each change:
      - Success: archived successfully
      - Failed: error during archive (record error)
      - Skipped: user chose not to archive (if applicable)

9. **Display summary**

   Show final results:

   ```
   ## Bulk Archive Complete

   Archived 3 changes:
   - schema-management-cli -> archive/2026-01-19-schema-management-cli/
   - project-config -> archive/2026-01-19-project-config/
   - add-oauth -> archive/2026-01-19-add-oauth/

   Skipped 1 change:
   - add-verify-skill (user chose not to archive incomplete)

   Spec sync summary:
   - 4 delta specs synced to main specs
   - 1 conflict resolved (auth: applied both in chronological order)
   ```

   If any failures:
   ```
   Failed 1 change:
   - some-change: Archive directory already exists
   ```

**Conflict Resolution Examples**

Example 1: Only one implemented
```
Conflict: specs/auth/spec.md touched by [add-oauth, add-jwt]

Checking add-oauth:
- Delta adds "OAuth Provider Integration" requirement
- Searching codebase... found src/auth/oauth.ts implementing OAuth flow

Checking add-jwt:
- Delta adds "JWT Token Handling" requirement
- Searching codebase... no JWT implementation found

Resolution: Only add-oauth is implemented. Will sync add-oauth specs only.
```

Example 2: Both implemented
```
Conflict: specs/api/spec.md touched by [add-rest-api, add-graphql]

Checking add-rest-api (created 2026-01-10):
- Delta adds "REST Endpoints" requirement
- Searching codebase... found src/api/rest.ts

Checking add-graphql (created 2026-01-15):
- Delta adds "GraphQL Schema" requirement
- Searching codebase... found src/api/graphql.ts

Resolution: Both implemented. Will apply add-rest-api specs first,
then add-graphql specs (chronological order, newer takes precedence).
```

**Output On Success**

```
## Bulk Archive Complete

Archived N changes:
- <change-1> -> archive/YYYY-MM-DD-<change-1>/
- <change-2> -> archive/YYYY-MM-DD-<change-2>/

Spec sync summary:
- N delta specs synced to main specs
- No conflicts (or: M conflicts resolved)
```

**Output On Partial Success**

```
## Bulk Archive Complete (partial)

Archived N changes:
- <change-1> -> archive/YYYY-MM-DD-<change-1>/

Skipped M changes:
- <change-2> (user chose not to archive incomplete)

Failed K changes:
- <change-3>: Archive directory already exists
```

**Output When No Changes**

```
## No Changes to Archive

No active changes found. Use `/opsx:new` to create a new change.
```

**Guardrails**
- Allow any number of changes (1+ is fine, 2+ is the typical use case)
- Always prompt for selection, never auto-select
- Detect spec conflicts early and resolve by checking codebase
- When both changes are implemented, apply specs in chronological order
- Skip spec sync only when implementation is missing (warn user)
- Show clear per-change status before confirming
- Use single confirmation for entire batch
- Track and report all outcomes (success/skip/fail)
- Preserve .openspec.yaml when moving to archive
- Archive directory target uses current date: YYYY-MM-DD-<name>
- If archive target exists, fail that change but continue with others


================================================
FILE: .qoder/commands/opsx/continue.md
================================================
---
name: OPSX: Continue
description: Continue working on a change - create the next artifact (Experimental)
category: Workflow
tags: [workflow, artifacts, experimental]
---

Continue working on a change by creating the next artifact.

**Input**: Optionally specify a change name after `/opsx:continue` (e.g., `/opsx:continue add-auth`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.

**Steps**

1. **If no change name provided, prompt for selection**

   Run `openspec list --json` to get available changes sorted by most recently modified. Then use the **AskUserQuestion tool** to let the user select which change to work on.

   Present the top 3-4 most recently modified changes as options, showing:
   - Change name
   - Schema (from `schema` field if present, otherwise "spec-driven")
   - Status (e.g., "0/5 tasks", "complete", "no tasks")
   - How recently it was modified (from `lastModified` field)

   Mark the most recently modified change as "(Recommended)" since it's likely what the user wants to continue.

   **IMPORTANT**: Do NOT guess or auto-select a change. Always let the user choose.

2. **Check current status**
   ```bash
   openspec status --change "<name>" --json
   ```
   Parse the JSON to understand current state. The response includes:
   - `schemaName`: The workflow schema being used (e.g., "spec-driven")
   - `artifacts`: Array of artifacts with their status ("done", "ready", "blocked")
   - `isComplete`: Boolean indicating if all artifacts are complete

3. **Act based on status**:

   ---

   **If all artifacts are complete (`isComplete: true`)**:
   - Congratulate the user
   - Show final status including the schema used
   - Suggest: "All artifacts created! You can now implement this change with `/opsx:apply` or archive it with `/opsx:archive`."
   - STOP

   ---

   **If artifacts are ready to create** (status shows artifacts with `status: "ready"`):
   - Pick the FIRST artifact with `status: "ready"` from the status output
   - Get its instructions:
     ```bash
     openspec instructions <artifact-id> --change "<name>" --json
     ```
   - Parse the JSON. The key fields are:
     - `context`: Project background (constraints for you - do NOT include in output)
     - `rules`: Artifact-specific rules (constraints for you - do NOT include in output)
     - `template`: The structure to use for your output file
     - `instruction`: Schema-specific guidance
     - `outputPath`: Where to write the artifact
     - `dependencies`: Completed artifacts to read for context
   - **Create the artifact file**:
     - Read any completed dependency files for context
     - Use `template` as the structure - fill in its sections
     - Apply `context` and `rules` as constraints when writing - but do NOT copy them into the file
     - Write to the output path specified in instructions
   - Show what was created and what's now unlocked
   - STOP after creating ONE artifact

   ---

   **If no artifacts are ready (all blocked)**:
   - This shouldn't happen with a valid schema
   - Show status and suggest checking for issues

4. **After creating an artifact, show progress**
   ```bash
   openspec status --change "<name>"
   ```

**Output**

After each invocation, show:
- Which artifact was created
- Schema workflow being used
- Current progress (N/M complete)
- What artifacts are now unlocked
- Prompt: "Run `/opsx:continue` to create the next artifact"

**Artifact Creation Guidelines**

The artifact types and their purpose depend on the schema. Use the `instruction` field from the instructions output to understand what to create.

Common artifact patterns:

**spec-driven schema** (proposal → specs → design → tasks):
- **proposal.md**: Ask user about the change if not clear. Fill in Why, What Changes, Capabilities, Impact.
  - The Capabilities section is critical - each capability listed will need a spec file.
- **specs/<capability>/spec.md**: Create one spec per capability listed in the proposal's Capabilities section (use the capability name, not the change name).
- **design.md**: Document technical decisions, architecture, and implementation approach.
- **tasks.md**: Break down implementation into checkboxed tasks.

For other schemas, follow the `instruction` field from the CLI output.

**Guardrails**
- Create ONE artifact per invocation
- Always read dependency artifacts before creating a new one
- Never skip artifacts or create out of order
- If context is unclear, ask the user before creating
- Verify the artifact file exists after writing before marking progress
- Use the schema's artifact sequence, don't assume specific artifact names
- **IMPORTANT**: `context` and `rules` are constraints for YOU, not content for the file
  - Do NOT copy `<context>`, `<rules>`, `<project_context>` blocks into the artifact
  - These guide what you write, but should never appear in the output


================================================
FILE: .qoder/commands/opsx/explore.md
================================================
---
name: OPSX: Explore
description: Enter explore mode - think through ideas, investigate problems, clarify requirements
category: Workflow
tags: [workflow, explore, experimental, thinking]
---

Enter explore mode. Think deeply. Visualize freely. Follow the conversation wherever it goes.

**IMPORTANT: Explore mode is for thinking, not implementing.** You may read files, search code, and investigate the codebase, but you must NEVER write code or implement features. If the user asks you to implement something, remind them to exit explore mode first (e.g., start a change with `/opsx:new` or `/opsx:ff`). You MAY create OpenSpec artifacts (proposals, designs, specs) if the user asks—that's capturing thinking, not implementing.

**This is a stance, not a workflow.** There are no fixed steps, no required sequence, no mandatory outputs. You're a thinking partner helping the user explore.

**Input**: The argument after `/opsx:explore` is whatever the user wants to think about. Could be:
- A vague idea: "real-time collaboration"
- A specific problem: "the auth system is getting unwieldy"
- A change name: "add-dark-mode" (to explore in context of that change)
- A comparison: "postgres vs sqlite for this"
- Nothing (just enter explore mode)

---

## The Stance

- **Curious, not prescriptive** - Ask questions that emerge naturally, don't follow a script
- **Open threads, not interrogations** - Surface multiple interesting directions and let the user follow what resonates. Don't funnel them through a single path of questions.
- **Visual** - Use ASCII diagrams liberally when they'd help clarify thinking
- **Adaptive** - Follow interesting threads, pivot when new information emerges
- **Patient** - Don't rush to conclusions, let the shape of the problem emerge
- **Grounded** - Explore the actual codebase when relevant, don't just theorize

---

## What You Might Do

Depending on what the user brings, you might:

**Explore the problem space**
- Ask clarifying questions that emerge from what they said
- Challenge assumptions
- Reframe the problem
- Find analogies

**Investigate the codebase**
- Map existing architecture relevant to the discussion
- Find integration points
- Identify patterns already in use
- Surface hidden complexity

**Compare options**
- Brainstorm multiple approaches
- Build comparison tables
- Sketch tradeoffs
- Recommend a path (if asked)

**Visualize**
```
┌─────────────────────────────────────────┐
│     Use ASCII diagrams liberally        │
├─────────────────────────────────────────┤
│                                         │
│   ┌────────┐         ┌────────┐        │
│   │ State  │────────▶│ State  │        │
│   │   A    │         │   B    │        │
│   └────────┘         └────────┘        │
│                                         │
│   System diagrams, state machines,      │
│   data flows, architecture sketches,    │
│   dependency graphs, comparison tables  │
│                                         │
└─────────────────────────────────────────┘
```

**Surface risks and unknowns**
- Identify what could go wrong
- Find gaps in understanding
- Suggest spikes or investigations

---

## OpenSpec Awareness

You have full context of the OpenSpec system. Use it naturally, don't force it.

### Check for context

At the start, quickly check what exists:
```bash
openspec list --json
```

This tells you:
- If there are active changes
- Their names, schemas, and status
- What the user might be working on

If the user mentioned a specific change name, read its artifacts for context.

### When no change exists

Think freely. When insights crystallize, you might offer:

- "This feels solid enough to start a change. Want me to create one?"
  → Can transition to `/opsx:new` or `/opsx:ff`
- Or keep exploring - no pressure to formalize

### When a change exists

If the user mentions a change or you detect one is relevant:

1. **Read existing artifacts for context**
   - `openspec/changes/<name>/proposal.md`
   - `openspec/changes/<name>/design.md`
   - `openspec/changes/<name>/tasks.md`
   - etc.

2. **Reference them naturally in conversation**
   - "Your design mentions using Redis, but we just realized SQLite fits better..."
   - "The proposal scopes this to premium users, but we're now thinking everyone..."

3. **Offer to capture when decisions are made**

   | Insight Type | Where to Capture |
   |--------------|------------------|
   | New requirement discovered | `specs/<capability>/spec.md` |
   | Requirement changed | `specs/<capability>/spec.md` |
   | Design decision made | `design.md` |
   | Scope changed | `proposal.md` |
   | New work identified | `tasks.md` |
   | Assumption invalidated | Relevant artifact |

   Example offers:
   - "That's a design decision. Capture it in design.md?"
   - "This is a new requirement. Add it to specs?"
   - "This changes scope. Update the proposal?"

4. **The user decides** - Offer and move on. Don't pressure. Don't auto-capture.

---

## What You Don't Have To Do

- Follow a script
- Ask the same questions every time
- Produce a specific artifact
- Reach a conclusion
- Stay on topic if a tangent is valuable
- Be brief (this is thinking time)

---

## Ending Discovery

There's no required ending. Discovery might:

- **Flow into action**: "Ready to start? `/opsx:new` or `/opsx:ff`"
- **Result in artifact updates**: "Updated design.md with these decisions"
- **Just provide clarity**: User has what they need, moves on
- **Continue later**: "We can pick this up anytime"

When things crystallize, you might offer a summary - but it's optional. Sometimes the thinking IS the value.

---

## Guardrails

- **Don't implement** - Never write code or implement features. Creating OpenSpec artifacts is fine, writing application code is not.
- **Don't fake understanding** - If something is unclear, dig deeper
- **Don't rush** - Discovery is thinking time, not task time
- **Don't force structure** - Let patterns emerge naturally
- **Don't auto-capture** - Offer to save insights, don't just do it
- **Do visualize** - A good diagram is worth many paragraphs
- **Do explore the codebase** - Ground discussions in reality
- **Do question assumptions** - Including the user's and your own


================================================
FILE: .qoder/commands/opsx/ff.md
================================================
---
name: OPSX: Fast Forward
description: Create a change and generate all artifacts needed for implementation in one go
category: Workflow
tags: [workflow, artifacts, experimental]
---

Fast-forward through artifact creation - generate everything needed to start implementation.

**Input**: The argument after `/opsx:ff` is the change name (kebab-case), OR a description of what the user wants to build.

**Steps**

1. **If no input provided, ask what they want to build**

   Use the **AskUserQuestion tool** (open-ended, no preset options) to ask:
   > "What change do you want to work on? Describe what you want to build or fix."

   From their description, derive a kebab-case name (e.g., "add user authentication" → `add-user-auth`).

   **IMPORTANT**: Do NOT proceed without understanding what the user wants to build.

2. **Create the change directory**
   ```bash
   openspec new change "<name>"
   ```
   This creates a scaffolded change at `openspec/changes/<name>/`.

3. **Get the artifact build order**
   ```bash
   openspec status --change "<name>" --json
   ```
   Parse the JSON to get:
   - `applyRequires`: array of artifact IDs needed before implementation (e.g., `["tasks"]`)
   - `artifacts`: list of all artifacts with their status and dependencies

4. **Create artifacts in sequence until apply-ready**

   Use the **TodoWrite tool** to track progress through the artifacts.

   Loop through artifacts in dependency order (artifacts with no pending dependencies first):

   a. **For each artifact that is `ready` (dependencies satisfied)**:
      - Get instructions:
        ```bash
        openspec instructions <artifact-id> --change "<name>" --json
        ```
      - The instructions JSON includes:
        - `context`: Project background (constraints for you - do NOT include in output)
        - `rules`: Artifact-specific rules (constraints for you - do NOT include in output)
        - `template`: The structure to use for your output file
        - `instruction`: Schema-specific guidance for this artifact type
        - `outputPath`: Where to write the artifact
        - `dependencies`: Completed artifacts to read for context
      - Read any completed dependency files for context
      - Create the artifact file using `template` as the structure
      - Apply `context` and `rules` as constraints - but do NOT copy them into the file
      - Show brief progress: "✓ Created <artifact-id>"

   b. **Continue until all `applyRequires` artifacts are complete**
      - After creating each artifact, re-run `openspec status --change "<name>" --json`
      - Check if every artifact ID in `applyRequires` has `status: "done"` in the artifacts array
      - Stop when all `applyRequires` artifacts are done

   c. **If an artifact requires user input** (unclear context):
      - Use **AskUserQuestion tool** to clarify
      - Then continue with creation

5. **Show final status**
   ```bash
   openspec status --change "<name>"
   ```

**Output**

After completing all artifacts, summarize:
- Change name and location
- List of artifacts created with brief descriptions
- What's ready: "All artifacts created! Ready for implementation."
- Prompt: "Run `/opsx:apply` to start implementing."

**Artifact Creation Guidelines**

- Follow the `instruction` field from `openspec instructions` for each artifact type
- The schema defines what each artifact should contain - follow it
- Read dependency artifacts for context before creating new ones
- Use the `template` as a starting point, filling in based on context

**Guardrails**
- Create ALL artifacts needed for implementation (as defined by schema's `apply.requires`)
- Always read dependency artifacts before creating a new one
- If context is critically unclear, ask the user - but prefer making reasonable decisions to keep momentum
- If a change with that name already exists, ask if user wants to continue it or create a new one
- Verify each artifact file exists after writing before proceeding to next


================================================
FILE: .qoder/commands/opsx/new.md
================================================
---
name: OPSX: New
description: Start a new change using the experimental artifact workflow (OPSX)
category: Workflow
tags: [workflow, artifacts, experimental]
---

Start a new change using the experimental artifact-driven approach.

**Input**: The argument after `/opsx:new` is the change name (kebab-case), OR a description of what the user wants to build.

**Steps**

1. **If no input provided, ask what they want to build**

   Use the **AskUserQuestion tool** (open-ended, no preset options) to ask:
   > "What change do you want to work on? Describe what you want to build or fix."

   From their description, derive a kebab-case name (e.g., "add user authentication" → `add-user-auth`).

   **IMPORTANT**: Do NOT proceed without understanding what the user wants to build.

2. **Determine the workflow schema**

   Use the default schema (omit `--schema`) unless the user explicitly requests a different workflow.

   **Use a different schema only if the user mentions:**
   - A specific schema name → use `--schema <name>`
   - "show workflows" or "what workflows" → run `openspec schemas --json` and let them choose

   **Otherwise**: Omit `--schema` to use the default.

3. **Create the change directory**
   ```bash
   openspec new change "<name>"
   ```
   Add `--schema <name>` only if the user requested a specific workflow.
   This creates a scaffolded change at `openspec/changes/<name>/` with the selected schema.

4. **Show the artifact status**
   ```bash
   openspec status --change "<name>"
   ```
   This shows which artifacts need to be created and which are ready (dependencies satisfied).

5. **Get instructions for the first artifact**
   The first artifact depends on the schema. Check the status output to find the first artifact with status "ready".
   ```bash
   openspec instructions <first-artifact-id> --change "<name>"
   ```
   This outputs the template and context for creating the first artifact.

6. **STOP and wait for user direction**

**Output**

After completing the steps, summarize:
- Change name and location
- Schema/workflow being used and its artifact sequence
- Current status (0/N artifacts complete)
- The template for the first artifact
- Prompt: "Ready to create the first artifact? Run `/opsx:continue` or just describe what this change is about and I'll draft it."

**Guardrails**
- Do NOT create any artifacts yet - just show the instructions
- Do NOT advance beyond showing the first artifact template
- If the name is invalid (not kebab-case), ask for a valid name
- If a change with that name already exists, suggest using `/opsx:continue` instead
- Pass --schema if using a non-default workflow


================================================
FILE: .qoder/commands/opsx/onboard.md
================================================
---
name: OPSX: Onboard
description: Guided onboarding - walk through a complete OpenSpec workflow cycle with narration
category: Workflow
tags: [workflow, onboarding, tutorial, learning]
---

Guide the user through their first complete OpenSpec workflow cycle. This is a teaching experience—you'll do real work in their codebase while explaining each step.

---

## Preflight

Before starting, check if OpenSpec is initialized:

```bash
openspec status --json 2>&1 || echo "NOT_INITIALIZED"
```

**If not initialized:**
> OpenSpec isn't set up in this project yet. Run `openspec init` first, then come back to `/opsx:onboard`.

Stop here if not initialized.

---

## Phase 1: Welcome

Display:

```
## Welcome to OpenSpec!

I'll walk you through a complete change cycle—from idea to implementation—using a real task in your codebase. Along the way, you'll learn the workflow by doing it.

**What we'll do:**
1. Pick a small, real task in your codebase
2. Explore the problem briefly
3. Create a change (the container for our work)
4. Build the artifacts: proposal → specs → design → tasks
5. Implement the tasks
6. Archive the completed change

**Time:** ~15-20 minutes

Let's start by finding something to work on.
```

---

## Phase 2: Task Selection

### Codebase Analysis

Scan the codebase for small improvement opportunities. Look for:

1. **TODO/FIXME comments** - Search for `TODO`, `FIXME`, `HACK`, `XXX` in code files
2. **Missing error handling** - `catch` blocks that swallow errors, risky operations without try-catch
3. **Functions without tests** - Cross-reference `src/` with test directories
4. **Type issues** - `any` types in TypeScript files (`: any`, `as any`)
5. **Debug artifacts** - `console.log`, `console.debug`, `debugger` statements in non-debug code
6. **Missing validation** - User input handlers without validation

Also check recent git activity:
```bash
git log --oneline -10 2>/dev/null || echo "No git history"
```

### Present Suggestions

From your analysis, present 3-4 specific suggestions:

```
## Task Suggestions

Based on scanning your codebase, here are some good starter tasks:

**1. [Most promising task]**
   Location: `src/path/to/file.ts:42`
   Scope: ~1-2 files, ~20-30 lines
   Why it's good: [brief reason]

**2. [Second task]**
   Location: `src/another/file.ts`
   Scope: ~1 file, ~15 lines
   Why it's good: [brief reason]

**3. [Third task]**
   Location: [location]
   Scope: [estimate]
   Why it's good: [brief reason]

**4. Something else?**
   Tell me what you'd like to work on.

Which task interests you? (Pick a number or describe your own)
```

**If nothing found:** Fall back to asking what the user wants to build:
> I didn't find obvious quick wins in your codebase. What's something small you've been meaning to add or fix?

### Scope Guardrail

If the user picks or describes something too large (major feature, multi-day work):

```
That's a valuable task, but it's probably larger than ideal for your first OpenSpec run-through.

For learning the workflow, smaller is better—it lets you see the full cycle without getting stuck in implementation details.

**Options:**
1. **Slice it smaller** - What's the smallest useful piece of [their task]? Maybe just [specific slice]?
2. **Pick something else** - One of the other suggestions, or a different small task?
3. **Do it anyway** - If you really want to tackle this, we can. Just know it'll take longer.

What would you prefer?
```

Let the user override if they insist—this is a soft guardrail.

---

## Phase 3: Explore Demo

Once a task is selected, briefly demonstrate explore mode:

```
Before we create a change, let me quickly show you **explore mode**—it's how you think through problems before committing to a direction.
```

Spend 1-2 minutes investigating the relevant code:
- Read the file(s) involved
- Draw a quick ASCII diagram if it helps
- Note any considerations

```
## Quick Exploration

[Your brief analysis—what you found, any considerations]

┌─────────────────────────────────────────┐
│   [Optional: ASCII diagram if helpful]  │
└─────────────────────────────────────────┘

Explore mode (`/opsx:explore`) is for this kind of thinking—investigating before implementing. You can use it anytime you need to think through a problem.

Now let's create a change to hold our work.
```

**PAUSE** - Wait for user acknowledgment before proceeding.

---

## Phase 4: Create the Change

**EXPLAIN:**
```
## Creating a Change

A "change" in OpenSpec is a container for all the thinking and planning around a piece of work. It lives in `openspec/changes/<name>/` and holds your artifacts—proposal, specs, design, tasks.

Let me create one for our task.
```

**DO:** Create the change with a derived kebab-case name:
```bash
openspec new change "<derived-name>"
```

**SHOW:**
```
Created: `openspec/changes/<name>/`

The folder structure:
```
openspec/changes/<name>/
├── proposal.md    ← Why we're doing this (empty, we'll fill it)
├── design.md      ← How we'll build it (empty)
├── specs/         ← Detailed requirements (empty)
└── tasks.md       ← Implementation checklist (empty)
```

Now let's fill in the first artifact—the proposal.
```

---

## Phase 5: Proposal

**EXPLAIN:**
```
## The Proposal

The proposal captures **why** we're making this change and **what** it involves at a high level. It's the "elevator pitch" for the work.

I'll draft one based on our task.
```

**DO:** Draft the proposal content (don't save yet):

```
Here's a draft proposal:

---

## Why

[1-2 sentences explaining the problem/opportunity]

## What Changes

[Bullet points of what will be different]

## Capabilities

### New Capabilities
- `<capability-name>`: [brief description]

### Modified Capabilities
<!-- If modifying existing behavior -->

## Impact

- `src/path/to/file.ts`: [what changes]
- [other files if applicable]

---

Does this capture the intent? I can adjust before we save it.
```

**PAUSE** - Wait for user approval/feedback.

After approval, save the proposal:
```bash
openspec instructions proposal --change "<name>" --json
```
Then write the content to `openspec/changes/<name>/proposal.md`.

```
Proposal saved. This is your "why" document—you can always come back and refine it as understanding evolves.

Next up: specs.
```

---

## Phase 6: Specs

**EXPLAIN:**
```
## Specs

Specs define **what** we're building in precise, testable terms. They use a requirement/scenario format that makes expected behavior crystal clear.

For a small task like this, we might only need one spec file.
```

**DO:** Create the spec file:
```bash
mkdir -p openspec/changes/<name>/specs/<capability-name>
```

Draft the spec content:

```
Here's the spec:

---

## ADDED Requirements

### Requirement: <Name>

<Description of what the system should do>

#### Scenario: <Scenario name>

- **WHEN** <trigger condition>
- **THEN** <expected outcome>
- **AND** <additional outcome if needed>

---

This format—WHEN/THEN/AND—makes requirements testable. You can literally read them as test cases.
```

Save to `openspec/changes/<name>/specs/<capability>/spec.md`.

---

## Phase 7: Design

**EXPLAIN:**
```
## Design

The design captures **how** we'll build it—technical decisions, tradeoffs, approach.

For small changes, this might be brief. That's fine—not every change needs deep design discussion.
```

**DO:** Draft design.md:

```
Here's the design:

---

## Context

[Brief context about the current state]

## Goals / Non-Goals

**Goals:**
- [What we're trying to achieve]

**Non-Goals:**
- [What's explicitly out of scope]

## Decisions

### Decision 1: [Key decision]

[Explanation of approach and rationale]

---

For a small task, this captures the key decisions without over-engineering.
```

Save to `openspec/changes/<name>/design.md`.

---

## Phase 8: Tasks

**EXPLAIN:**
```
## Tasks

Finally, we break the work into implementation tasks—checkboxes that drive the apply phase.

These should be small, clear, and in logical order.
```

**DO:** Generate tasks based on specs and design:

```
Here are the implementation tasks:

---

## 1. [Category or file]

- [ ] 1.1 [Specific task]
- [ ] 1.2 [Specific task]

## 2. Verify

- [ ] 2.1 [Verification step]

---

Each checkbox becomes a unit of work in the apply phase. Ready to implement?
```

**PAUSE** - Wait for user to confirm they're ready to implement.

Save to `openspec/changes/<name>/tasks.md`.

---

## Phase 9: Apply (Implementation)

**EXPLAIN:**
```
## Implementation

Now we implement each task, checking them off as we go. I'll announce each one and occasionally note how the specs/design informed the approach.
```

**DO:** For each task:

1. Announce: "Working on task N: [description]"
2. Implement the change in the codebase
3. Reference specs/design naturally: "The spec says X, so I'm doing Y"
4. Mark complete in tasks.md: `- [ ]` → `- [x]`
5. Brief status: "✓ Task N complete"

Keep narration light—don't over-explain every line of code.

After all tasks:

```
## Implementation Complete

All tasks done:
- [x] Task 1
- [x] Task 2
- [x] ...

The change is implemented! One more step—let's archive it.
```

---

## Phase 10: Archive

**EXPLAIN:**
```
## Archiving

When a change is complete, we archive it. This moves it from `openspec/changes/` to `openspec/changes/archive/YYYY-MM-DD-<name>/`.

Archived changes become your project's decision history—you can always find them later to understand why something was built a certain way.
```

**DO:**
```bash
openspec archive "<name>"
```

**SHOW:**
```
Archived to: `openspec/changes/archive/YYYY-MM-DD-<name>/`

The change is now part of your project's history. The code is in your codebase, the decision record is preserved.
```

---

## Phase 11: Recap & Next Steps

```
## Congratulations!

You just completed a full OpenSpec cycle:

1. **Explore** - Thought through the problem
2. **New** - Created a change container
3. **Proposal** - Captured WHY
4. **Specs** - Defined WHAT in detail
5. **Design** - Decided HOW
6. **Tasks** - Broke it into steps
7. **Apply** - Implemented the work
8. **Archive** - Preserved the record

This same rhythm works for any size change—a small fix or a major feature.

---

## Command Reference

| Command | What it does |
|---------|--------------|
| `/opsx:explore` | Think through problems before/during work |
| `/opsx:new` | Start a new change, step through artifacts |
| `/opsx:ff` | Fast-forward: create all artifacts at once |
| `/opsx:continue` | Continue working on an existing change |
| `/opsx:apply` | Implement tasks from a change |
| `/opsx:verify` | Verify implementation matches artifacts |
| `/opsx:archive` | Archive a completed change |

---

## What's Next?

Try `/opsx:new` or `/opsx:ff` on something you actually want to build. You've got the rhythm now!
```

---

## Graceful Exit Handling

### User wants to stop mid-way

If the user says they need to stop, want to pause, or seem disengaged:

```
No problem! Your change is saved at `openspec/changes/<name>/`.

To pick up where we left off later:
- `/opsx:continue <name>` - Resume artifact creation
- `/opsx:apply <name>` - Jump to implementation (if tasks exist)

The work won't be lost. Come back whenever you're ready.
```

Exit gracefully without pressure.

### User just wants command reference

If the user says they just want to see the commands or skip the tutorial:

```
## OpenSpec Quick Reference

| Command | What it does |
|---------|--------------|
| `/opsx:explore` | Think through problems (no code changes) |
| `/opsx:new <name>` | Start a new change, step by step |
| `/opsx:ff <name>` | Fast-forward: all artifacts at once |
| `/opsx:continue <name>` | Continue an existing change |
| `/opsx:apply <name>` | Implement tasks |
| `/opsx:verify <name>` | Verify implementation |
| `/opsx:archive <name>` | Archive when done |

Try `/opsx:new` to start your first change, or `/opsx:ff` if you want to move fast.
```

Exit gracefully.

---

## Guardrails

- **Follow the EXPLAIN → DO → SHOW → PAUSE pattern** at key transitions (after explore, after proposal draft, after tasks, after archive)
- **Keep narration light** during implementation—teach without lecturing
- **Don't skip phases** even if the change is small—the goal is teaching the workflow
- **Pause for acknowledgment** at marked points, but don't over-pause
- **Handle exits gracefully**—never pressure the user to continue
- **Use real codebase tasks**—don't simulate or use fake examples
- **Adjust scope gently**—guide toward smaller tasks but respect user choice


================================================
FILE: .qoder/commands/opsx/sync.md
================================================
---
name: OPSX: Sync
description: Sync delta specs from a change to main specs
category: Workflow
tags: [workflow, specs, experimental]
---

Sync delta specs from a change to main specs.

This is an **agent-driven** operation - you will read delta specs and directly edit main specs to apply the changes. This allows intelligent merging (e.g., adding a scenario without copying the entire requirement).

**Input**: Optionally specify a change name after `/opsx:sync` (e.g., `/opsx:sync add-auth`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.

**Steps**

1. **If no change name provided, prompt for selection**

   Run `openspec list --json` to get available changes. Use the **AskUserQuestion tool** to let the user select.

   Show changes that have delta specs (under `specs/` directory).

   **IMPORTANT**: Do NOT guess or auto-select a change. Always let the user choose.

2. **Find delta specs**

   Look for delta spec files in `openspec/changes/<name>/specs/*/spec.md`.

   Each delta spec file contains sections like:
   - `## ADDED Requirements` - New requirements to add
   - `## MODIFIED Requirements` - Changes to existing requirements
   - `## REMOVED Requirements` - Requirements to remove
   - `## RENAMED Requirements` - Requirements to rename (FROM:/TO: format)

   If no delta specs found, inform user and stop.

3. **For each delta spec, apply changes to main specs**

   For each capability with a delta spec at `openspec/changes/<name>/specs/<capability>/spec.md`:

   a. **Read the delta spec** to understand the intended changes

   b. **Read the main spec** at `openspec/specs/<capability>/spec.md` (may not exist yet)

   c. **Apply changes intelligently**:

      **ADDED Requirements:**
      - If requirement doesn't exist in main spec → add it
      - If requirement already exists → update it to match (treat as implicit MODIFIED)

      **MODIFIED Requirements:**
      - Find the requirement in main spec
      - Apply the changes - this can be:
        - Adding new scenarios (don't need to copy existing ones)
        - Modifying existing scenarios
        - Changing the requirement description
      - Preserve scenarios/content not mentioned in the delta

      **REMOVED Requirements:**
      - Remove the entire requirement block from main spec

      **RENAMED Requirements:**
      - Find the FROM requirement, rename to TO

   d. **Create new main spec** if capability doesn't exist yet:
      - Create `openspec/specs/<capability>/spec.md`
      - Add Purpose section (can be brief, mark as TBD)
      - Add Requirements section with the ADDED requirements

4. **Show summary**

   After applying all changes, summarize:
   - Which capabilities were updated
   - What changes were made (requirements added/modified/removed/renamed)

**Delta Spec Format Reference**

```markdown
## ADDED Requirements

### Requirement: New Feature
The system SHALL do something new.

#### Scenario: Basic case
- **WHEN** user does X
- **THEN** system does Y

## MODIFIED Requirements

### Requirement: Existing Feature
#### Scenario: New scenario to add
- **WHEN** user does A
- **THEN** system does B

## REMOVED Requirements

### Requirement: Deprecated Feature

## RENAMED Requirements

- FROM: `### Requirement: Old Name`
- TO: `### Requirement: New Name`
```

**Key Principle: Intelligent Merging**

Unlike programmatic merging, you can apply **partial updates**:
- To add a scenario, just include that scenario under MODIFIED - don't copy existing scenarios
- The delta represents *intent*, not a wholesale replacement
- Use your judgment to merge changes sensibly

**Output On Success**

```
## Specs Synced: <change-name>

Updated main specs:

**<capability-1>**:
- Added requirement: "New Feature"
- Modified requirement: "Existing Feature" (added 1 scenario)

**<capability-2>**:
- Created new spec file
- Added requirement: "Another Feature"

Main specs are now updated. The change remains active - archive when implementation is complete.
```

**Guardrails**
- Read both delta and main specs before making changes
- Preserve existing content not mentioned in delta
- If something is unclear, ask for clarification
- Show what you're changing as you go
- The operation should be idempotent - running twice should give same result


================================================
FILE: .qoder/commands/opsx/verify.md
================================================
---
name: OPSX: Verify
description: Verify implementation matches change artifacts before archiving
category: Workflow
tags: [workflow, verify, experimental]
---

Verify that an implementation matches the change artifacts (specs, tasks, design).

**Input**: Optionally specify a change name after `/opsx:verify` (e.g., `/opsx:verify add-auth`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.

**Steps**

1. **If no change name provided, prompt for selection**

   Run `openspec list --json` to get available changes. Use the **AskUserQuestion tool** to let the user select.

   Show changes that have implementation tasks (tasks artifact exists).
   Include the schema used for each change if available.
   Mark changes with incomplete tasks as "(In Progress)".

   **IMPORTANT**: Do NOT guess or auto-select a change. Always let the user choose.

2. **Check status to understand the schema**
   ```bash
   openspec status --change "<name>" --json
   ```
   Parse the JSON to understand:
   - `schemaName`: The workflow being used (e.g., "spec-driven")
   - Which artifacts exist for this change

3. **Get the change directory and load artifacts**

   ```bash
   openspec instructions apply --change "<name>" --json
   ```

   This returns the change directory and context files. Read all available artifacts from `contextFiles`.

4. **Initialize verification report structure**

   Create a report structure with three dimensions:
   - **Completeness**: Track tasks and spec coverage
   - **Correctness**: Track requirement implementation and scenario coverage
   - **Coherence**: Track design adherence and pattern consistency

   Each dimension can have CRITICAL, WARNING, or SUGGESTION issues.

5. **Verify Completeness**

   **Task Completion**:
   - If tasks.md exists in contextFiles, read it
   - Parse checkboxes: `- [ ]` (incomplete) vs `- [x]` (complete)
   - Count complete vs total tasks
   - If incomplete tasks exist:
     - Add CRITICAL issue for each incomplete task
     - Recommendation: "Complete task: <description>" or "Mark as done if already implemented"

   **Spec Coverage**:
   - If delta specs exist in `openspec/changes/<name>/specs/`:
     - Extract all requirements (marked with "### Requirement:")
     - For each requirement:
       - Search codebase for keywords related to the requirement
       - Assess if implementation likely exists
     - If requirements appear unimplemented:
       - Add CRITICAL issue: "Requirement not found: <requirement name>"
       - Recommendation: "Implement requirement X: <description>"

6. **Verify Correctness**

   **Requirement Implementation Mapping**:
   - For each requirement from delta specs:
     - Search codebase for implementation evidence
     - If found, note file paths and line ranges
     - Assess if implementation matches requirement intent
     - If divergence detected:
       - Add WARNING: "Implementation may diverge from spec: <details>"
       - Recommendation: "Review <file>:<lines> against requirement X"

   **Scenario Coverage**:
   - For each scenario in delta specs (marked with "#### Scenario:"):
     - Check if conditions are handled in code
     - Check if tests exist covering the scenario
     - If scenario appears uncovered:
       - Add WARNING: "Scenario not covered: <scenario name>"
       - Recommendation: "Add test or implementation for scenario: <description>"

7. **Verify Coherence**

   **Design Adherence**:
   - If design.md exists in contextFiles:
     - Extract key decisions (look for sections like "Decision:", "Approach:", "Architecture:")
     - Verify implementation follows those decisions
     - If contradiction detected:
       - Add WARNING: "Design decision not followed: <decision>"
       - Recommendation: "Update implementation or revise design.md to match reality"
   - If no design.md: Skip design adherence check, note "No design.md to verify against"

   **Code Pattern Consistency**:
   - Review new code for consistency with project patterns
   - Check file naming, directory structure, coding style
   - If significant deviations found:
     - Add SUGGESTION: "Code pattern deviation: <details>"
     - Recommendation: "Consider following project pattern: <example>"

8. **Generate Verification Report**

   **Summary Scorecard**:
   ```
   ## Verification Report: <change-name>

   ### Summary
   | Dimension    | Status           |
   |--------------|------------------|
   | Completeness | X/Y tasks, N reqs|
   | Correctness  | M/N reqs covered |
   | Coherence    | Followed/Issues  |
   ```

   **Issues by Priority**:

   1. **CRITICAL** (Must fix before archive):
      - Incomplete tasks
      - Missing requirement implementations
      - Each with specific, actionable recommendation

   2. **WARNING** (Should fix):
      - Spec/design divergences
      - Missing scenario coverage
      - Each with specific recommendation

   3. **SUGGESTION** (Nice to fix):
      - Pattern inconsistencies
      - Minor improvements
      - Each with specific recommendation

   **Final Assessment**:
   - If CRITICAL issues: "X critical issue(s) found. Fix before archiving."
   - If only warnings: "No critical issues. Y warning(s) to consider. Ready for archive (with noted improvements)."
   - If all clear: "All checks passed. Ready for archive."

**Verification Heuristics**

- **Completeness**: Focus on objective checklist items (checkboxes, requirements list)
- **Correctness**: Use keyword search, file path analysis, reasonable inference - don't require perfect certainty
- **Coherence**: Look for glaring inconsistencies, don't nitpick style
- **False Positives**: When uncertain, prefer SUGGESTION over WARNING, WARNING over CRITICAL
- **Actionability**: Every issue must have a specific recommendation with file/line references where applicable

**Graceful Degradation**

- If only tasks.md exists: verify task completion only, skip spec/design checks
- If tasks + specs exist: verify completeness and correctness, skip design
- If full artifacts: verify all three dimensions
- Always note which checks were skipped and why

**Output Format**

Use clear markdown with:
- Table for summary scorecard
- Grouped lists for issues (CRITICAL/WARNING/SUGGESTION)
- Code references in format: `file.ts:123`
- Specific, actionable recommendations
- No vague suggestions like "consider reviewing"


================================================
FILE: .qoder/skills/openspec-apply-change/SKILL.md
================================================
---
name: openspec-apply-change
description: Implement tasks from an OpenSpec change. Use when the user wants to start implementing, continue implementation, or work through tasks.
license: MIT
compatibility: Requires openspec CLI.
metadata:
  author: openspec
  version: "1.0"
  generatedBy: "1.1.1"
---

Implement tasks from an OpenSpec change.

**Input**: Optionally specify a change name. If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.

**Steps**

1. **Select the change**

   If a name is provided, use it. Otherwise:
   - Infer from conversation context if the user mentioned a change
   - Auto-select if only one active change exists
   - If ambiguous, run `openspec list --json` to get available changes and use the **AskUserQuestion tool** to let the user select

   Always announce: "Using change: <name>" and how to override (e.g., `/opsx:apply <other>`).

2. **Check status to understand the schema**
   ```bash
   openspec status --change "<name>" --json
   ```
   Parse the JSON to understand:
   - `schemaName`: The workflow being used (e.g., "spec-driven")
   - Which artifact contains the tasks (typically "tasks" for spec-driven, check status for others)

3. **Get apply instructions**

   ```bash
   openspec instructions apply --change "<name>" --json
   ```

   This returns:
   - Context file paths (varies by schema - could be proposal/specs/design/tasks or spec/tests/implementation/docs)
   - Progress (total, complete, remaining)
   - Task list with status
   - Dynamic instruction based on current state

   **Handle states:**
   - If `state: "blocked"` (missing artifacts): show message, suggest using openspec-continue-change
   - If `state: "all_done"`: congratulate, suggest archive
   - Otherwise: proceed to implementation

4. **Read context files**

   Read the files listed in `contextFiles` from the apply instructions output.
   The files depend on the schema being used:
   - **spec-driven**: proposal, specs, design, tasks
   - Other schemas: follow the contextFiles from CLI output

5. **Show current progress**

   Display:
   - Schema being used
   - Progress: "N/M tasks complete"
   - Remaining tasks overview
   - Dynamic instruction from CLI

6. **Implement tasks (loop until done or blocked)**

   For each pending task:
   - Show which task is being worked on
   - Make the code changes required
   - Keep changes minimal and focused
   - Mark task complete in the tasks file: `- [ ]` → `- [x]`
   - Continue to next task

   **Pause if:**
   - Task is unclear → ask for clarification
   - Implementation reveals a design issue → suggest updating artifacts
   - Error or blocker encountered → report and wait for guidance
   - User interrupts

7. **On completion or pause, show status**

   Display:
   - Tasks completed this session
   - Overall progress: "N/M tasks complete"
   - If all done: suggest archive
   - If paused: explain why and wait for guidance

**Output During Implementation**

```
## Implementing: <change-name> (schema: <schema-name>)

Working on task 3/7: <task description>
[...implementation happening...]
✓ Task complete

Working on task 4/7: <task description>
[...implementation happening...]
✓ Task complete
```

**Output On Completion**

```
## Implementation Complete

**Change:** <change-name>
**Schema:** <schema-name>
**Progress:** 7/7 tasks complete ✓

### Completed This Session
- [x] Task 1
- [x] Task 2
...

All tasks complete! Ready to archive this change.
```

**Output On Pause (Issue Encountered)**

```
## Implementation Paused

**Change:** <change-name>
**Schema:** <schema-name>
**Progress:** 4/7 tasks complete

### Issue Encountered
<description of the issue>

**Options:**
1. <option 1>
2. <option 2>
3. Other approach

What would you like to do?
```

**Guardrails**
- Keep going through tasks until done or blocked
- Always read context files before starting (from the apply instructions output)
- If task is ambiguous, pause and ask before implementing
- If implementation reveals issues, pause and suggest artifact updates
- Keep code changes minimal and scoped to each task
- Update task checkbox immediately after completing each task
- Pause on errors, blockers, or unclear requirements - don't guess
- Use contextFiles from CLI output, don't assume specific file names

**Fluid Workflow Integration**

This skill supports the "actions on a change" model:

- **Can be invoked anytime**: Before all artifacts are done (if tasks exist), after partial implementation, interleaved with other actions
- **Allows artifact updates**: If implementation reveals design issues, suggest updating artifacts - not phase-locked, work fluidly


================================================
FILE: .qoder/skills/openspec-archive-change/SKILL.md
================================================
---
name: openspec-archive-change
description: Archive a completed change in the experimental workflow. Use when the user wants to finalize and archive a change after implementation is complete.
license: MIT
compatibility: Requires openspec CLI.
metadata:
  author: openspec
  version: "1.0"
  generatedBy: "1.1.1"
---

Archive a completed change in the experimental workflow.

**Input**: Optionally specify a change name. If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.

**Steps**

1. **If no change name provided, prompt for selection**

   Run `openspec list --json` to get available changes. Use the **AskUserQuestion tool** to let the user select.

   Show only active changes (not already archived).
   Include the schema used for each change if available.

   **IMPORTANT**: Do NOT guess or auto-select a change. Always let the user choose.

2. **Check artifact completion status**

   Run `openspec status --change "<name>" --json` to check artifact completion.

   Parse the JSON to understand:
   - `schemaName`: The workflow being used
   - `artifacts`: List of artifacts with their status (`done` or other)

   **If any artifacts are not `done`:**
   - Display warning listing incomplete artifacts
   - Use **AskUserQuestion tool** to confirm user wants to proceed
   - Proceed if user confirms

3. **Check task completion status**

   Read the tasks file (typically `tasks.md`) to check for incomplete tasks.

   Count tasks marked with `- [ ]` (incomplete) vs `- [x]` (complete).

   **If incomplete tasks found:**
   - Display warning showing count of incomplete tasks
   - Use **AskUserQuestion tool** to confirm user wants to proceed
   - Proceed if user confirms

   **If no tasks file exists:** Proceed without task-related warning.

4. **Assess delta spec sync state**

   Check for delta specs at `openspec/changes/<name>/specs/`. If none exist, proceed without sync prompt.

   **If delta specs exist:**
   - Compare each delta spec with its corresponding main spec at `openspec/specs/<capability>/spec.md`
   - Determine what changes would be applied (adds, modifications, removals, renames)
   - Show a combined summary before prompting

   **Prompt options:**
   - If changes needed: "Sync now (recommended)", "Archive without syncing"
   - If already synced: "Archive now", "Sync anyway", "Cancel"

   If user chooses sync, execute /opsx:sync logic (use the openspec-sync-specs skill). Proceed to archive regardless of choice.

5. **Perfo
Download .txt
Showing preview only (466K chars total). Download the full file or copy to clipboard to get everything.
gitextract__wvhcd09/

├── .cursor/
│   ├── commands/
│   │   ├── opsx-apply.md
│   │   ├── opsx-archive.md
│   │   ├── opsx-bulk-archive.md
│   │   ├── opsx-continue.md
│   │   ├── opsx-explore.md
│   │   ├── opsx-ff.md
│   │   ├── opsx-new.md
│   │   ├── opsx-onboard.md
│   │   ├── opsx-sync.md
│   │   └── opsx-verify.md
│   └── skills/
│       ├── openspec-apply-change/
│       │   └── SKILL.md
│       ├── openspec-archive-change/
│       │   └── SKILL.md
│       ├── openspec-bulk-archive-change/
│       │   └── SKILL.md
│       ├── openspec-continue-change/
│       │   └── SKILL.md
│       ├── openspec-explore/
│       │   └── SKILL.md
│       ├── openspec-ff-change/
│       │   └── SKILL.md
│       ├── openspec-new-change/
│       │   └── SKILL.md
│       ├── openspec-onboard/
│       │   └── SKILL.md
│       ├── openspec-sync-specs/
│       │   └── SKILL.md
│       └── openspec-verify-change/
│           └── SKILL.md
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   └── bug_report.yml
│   ├── ISSUE_TEMPLATE.md
│   └── workflows/
│       └── ci.yaml
├── .gitignore
├── .mvn/
│   └── wrapper/
│       ├── MavenWrapperDownloader.java
│       ├── maven-wrapper.jar
│       └── maven-wrapper.properties
├── .qoder/
│   ├── commands/
│   │   └── opsx/
│   │       ├── apply.md
│   │       ├── archive.md
│   │       ├── bulk-archive.md
│   │       ├── continue.md
│   │       ├── explore.md
│   │       ├── ff.md
│   │       ├── new.md
│   │       ├── onboard.md
│   │       ├── sync.md
│   │       └── verify.md
│   └── skills/
│       ├── openspec-apply-change/
│       │   └── SKILL.md
│       ├── openspec-archive-change/
│       │   └── SKILL.md
│       ├── openspec-bulk-archive-change/
│       │   └── SKILL.md
│       ├── openspec-continue-change/
│       │   └── SKILL.md
│       ├── openspec-explore/
│       │   └── SKILL.md
│       ├── openspec-ff-change/
│       │   └── SKILL.md
│       ├── openspec-new-change/
│       │   └── SKILL.md
│       ├── openspec-onboard/
│       │   └── SKILL.md
│       ├── openspec-sync-specs/
│       │   └── SKILL.md
│       └── openspec-verify-change/
│           └── SKILL.md
├── .travis.yml
├── AGENTS.md
├── CONTRIBUTING.md
├── NOTICE
├── QWEN.md
├── README.md
├── README_EN.md
├── SECURITY.md
├── codecov.yml
├── core/
│   ├── .gitignore
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   ├── META-INF/
│       │   │   │   └── MANIFEST.MF
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── druid/
│       │   │               ├── Constants.java
│       │   │               ├── DbType.java
│       │   │               ├── DruidRuntimeException.java
│       │   │               ├── FastsqlColumnAmbiguousException.java
│       │   │               ├── FastsqlException.java
│       │   │               ├── TransactionTimeoutException.java
│       │   │               ├── VERSION.java
│       │   │               ├── filter/
│       │   │               │   ├── AutoLoad.java
│       │   │               │   ├── Filter.java
│       │   │               │   ├── FilterAdapter.java
│       │   │               │   ├── FilterChain.java
│       │   │               │   ├── FilterChainImpl.java
│       │   │               │   ├── FilterEventAdapter.java
│       │   │               │   ├── FilterManager.java
│       │   │               │   ├── config/
│       │   │               │   │   ├── ConfigFilter.java
│       │   │               │   │   └── ConfigTools.java
│       │   │               │   ├── encoding/
│       │   │               │   │   ├── CharsetConvert.java
│       │   │               │   │   ├── CharsetParameter.java
│       │   │               │   │   └── EncodingConvertFilter.java
│       │   │               │   ├── logging/
│       │   │               │   │   ├── CommonsLogFilter.java
│       │   │               │   │   ├── CommonsLogFilterMBean.java
│       │   │               │   │   ├── Log4j2Filter.java
│       │   │               │   │   ├── Log4j2FilterMBean.java
│       │   │               │   │   ├── Log4jFilter.java
│       │   │               │   │   ├── Log4jFilterMBean.java
│       │   │               │   │   ├── LogFilter.java
│       │   │               │   │   ├── LogFilterMBean.java
│       │   │               │   │   └── Slf4jLogFilter.java
│       │   │               │   ├── mysql8datetime/
│       │   │               │   │   ├── MySQL8DateTimeResultSetMetaData.java
│       │   │               │   │   └── MySQL8DateTimeSqlTypeFilter.java
│       │   │               │   └── stat/
│       │   │               │       ├── MergeStatFilter.java
│       │   │               │       ├── StatFilter.java
│       │   │               │       ├── StatFilterContext.java
│       │   │               │       ├── StatFilterContextListener.java
│       │   │               │       ├── StatFilterContextListenerAdapter.java
│       │   │               │       └── StatFilterMBean.java
│       │   │               ├── mock/
│       │   │               │   ├── MockArray.java
│       │   │               │   ├── MockBlob.java
│       │   │               │   ├── MockCallableStatement.java
│       │   │               │   ├── MockClob.java
│       │   │               │   ├── MockConnection.java
│       │   │               │   ├── MockConnectionClosedException.java
│       │   │               │   ├── MockDriver.java
│       │   │               │   ├── MockDriverMBean.java
│       │   │               │   ├── MockNClob.java
│       │   │               │   ├── MockParameterMetaData.java
│       │   │               │   ├── MockPreparedStatement.java
│       │   │               │   ├── MockRef.java
│       │   │               │   ├── MockResultSet.java
│       │   │               │   ├── MockResultSetMetaData.java
│       │   │               │   ├── MockRowId.java
│       │   │               │   ├── MockSQLXML.java
│       │   │               │   ├── MockSavepoint.java
│       │   │               │   ├── MockStatement.java
│       │   │               │   ├── MockStatementBase.java
│       │   │               │   ├── MockStruct.java
│       │   │               │   └── handler/
│       │   │               │       ├── MockExecuteHandler.java
│       │   │               │       └── MySqlMockExecuteHandlerImpl.java
│       │   │               ├── pool/
│       │   │               │   ├── DataSourceClosedException.java
│       │   │               │   ├── DataSourceDisableException.java
│       │   │               │   ├── DataSourceNotAvailableException.java
│       │   │               │   ├── DruidAbstractDataSource.java
│       │   │               │   ├── DruidAbstractDataSourceMBean.java
│       │   │               │   ├── DruidConnectionHolder.java
│       │   │               │   ├── DruidDataSource.java
│       │   │               │   ├── DruidDataSourceC3P0Adapter.java
│       │   │               │   ├── DruidDataSourceC3P0AdapterMBean.java
│       │   │               │   ├── DruidDataSourceFactory.java
│       │   │               │   ├── DruidDataSourceMBean.java
│       │   │               │   ├── DruidDataSourceStatLogger.java
│       │   │               │   ├── DruidDataSourceStatLoggerAdapter.java
│       │   │               │   ├── DruidDataSourceStatLoggerImpl.java
│       │   │               │   ├── DruidDataSourceStatValue.java
│       │   │               │   ├── DruidPooledCallableStatement.java
│       │   │               │   ├── DruidPooledConnection.java
│       │   │               │   ├── DruidPooledPreparedStatement.java
│       │   │               │   ├── DruidPooledResultSet.java
│       │   │               │   ├── DruidPooledStatement.java
│       │   │               │   ├── DruidStatementConnection.java
│       │   │               │   ├── ExceptionSorter.java
│       │   │               │   ├── GetConnectionTimeoutException.java
│       │   │               │   ├── JDBC4ValidConnectionChecker.java
│       │   │               │   ├── ManagedDataSource.java
│       │   │               │   ├── PoolableWrapper.java
│       │   │               │   ├── PreparedStatementHolder.java
│       │   │               │   ├── PreparedStatementPool.java
│       │   │               │   ├── ValidConnectionChecker.java
│       │   │               │   ├── ValidConnectionCheckerAdapter.java
│       │   │               │   ├── WrapperAdapter.java
│       │   │               │   ├── ha/
│       │   │               │   │   ├── DataSourceCreator.java
│       │   │               │   │   ├── HighAvailableDataSource.java
│       │   │               │   │   ├── PropertiesUtils.java
│       │   │               │   │   ├── node/
│       │   │               │   │   │   ├── FileNodeListener.java
│       │   │               │   │   │   ├── NodeEvent.java
│       │   │               │   │   │   ├── NodeEventTypeEnum.java
│       │   │               │   │   │   ├── NodeListener.java
│       │   │               │   │   │   ├── PoolUpdater.java
│       │   │               │   │   │   ├── ZookeeperNodeInfo.java
│       │   │               │   │   │   ├── ZookeeperNodeListener.java
│       │   │               │   │   │   └── ZookeeperNodeRegister.java
│       │   │               │   │   └── selector/
│       │   │               │   │       ├── DataSourceSelector.java
│       │   │               │   │       ├── DataSourceSelectorEnum.java
│       │   │               │   │       ├── DataSourceSelectorFactory.java
│       │   │               │   │       ├── NamedDataSourceSelector.java
│       │   │               │   │       ├── RandomDataSourceRecoverThread.java
│       │   │               │   │       ├── RandomDataSourceSelector.java
│       │   │               │   │       ├── RandomDataSourceValidateFilter.java
│       │   │               │   │       ├── RandomDataSourceValidateThread.java
│       │   │               │   │       ├── StickyDataSourceHolder.java
│       │   │               │   │       └── StickyRandomDataSourceSelector.java
│       │   │               │   ├── vendor/
│       │   │               │   │   ├── AbstractOracleExceptionSorter.java
│       │   │               │   │   ├── DB2ExceptionSorter.java
│       │   │               │   │   ├── InformixExceptionSorter.java
│       │   │               │   │   ├── MSSQLValidConnectionChecker.java
│       │   │               │   │   ├── MockExceptionSorter.java
│       │   │               │   │   ├── MySqlExceptionSorter.java
│       │   │               │   │   ├── MySqlValidConnectionChecker.java
│       │   │               │   │   ├── NullExceptionSorter.java
│       │   │               │   │   ├── OceanBaseOracleExceptionSorter.java
│       │   │               │   │   ├── OceanBaseValidConnectionChecker.java
│       │   │               │   │   ├── OracleExceptionSorter.java
│       │   │               │   │   ├── OracleValidConnectionChecker.java
│       │   │               │   │   ├── PGExceptionSorter.java
│       │   │               │   │   ├── PGValidConnectionChecker.java
│       │   │               │   │   ├── PhoenixExceptionSorter.java
│       │   │               │   │   └── SybaseExceptionSorter.java
│       │   │               │   └── xa/
│       │   │               │       ├── DruidPooledXAConnection.java
│       │   │               │       ├── DruidXADataSource.java
│       │   │               │       ├── JtdsXAConnection.java
│       │   │               │       └── JtdsXAResource.java
│       │   │               ├── proxy/
│       │   │               │   ├── DruidDriver.java
│       │   │               │   ├── DruidDriverMBean.java
│       │   │               │   └── jdbc/
│       │   │               │       ├── CallableStatementProxy.java
│       │   │               │       ├── CallableStatementProxyImpl.java
│       │   │               │       ├── ClobProxy.java
│       │   │               │       ├── ClobProxyImpl.java
│       │   │               │       ├── ConnectionProxy.java
│       │   │               │       ├── ConnectionProxyImpl.java
│       │   │               │       ├── DataSourceProxy.java
│       │   │               │       ├── DataSourceProxyConfig.java
│       │   │               │       ├── DataSourceProxyImpl.java
│       │   │               │       ├── DataSourceProxyImplMBean.java
│       │   │               │       ├── DatabaseMetaDataProxyImpl.java
│       │   │               │       ├── JdbcParameter.java
│       │   │               │       ├── JdbcParameterDate.java
│       │   │               │       ├── JdbcParameterDecimal.java
│       │   │               │       ├── JdbcParameterImpl.java
│       │   │               │       ├── JdbcParameterInt.java
│       │   │               │       ├── JdbcParameterLong.java
│       │   │               │       ├── JdbcParameterNull.java
│       │   │               │       ├── JdbcParameterString.java
│       │   │               │       ├── JdbcParameterTimestamp.java
│       │   │               │       ├── NClobProxy.java
│       │   │               │       ├── NClobProxyImpl.java
│       │   │               │       ├── PreparedStatementProxy.java
│       │   │               │       ├── PreparedStatementProxyImpl.java
│       │   │               │       ├── ResultSetMetaDataProxy.java
│       │   │               │       ├── ResultSetMetaDataProxyImpl.java
│       │   │               │       ├── ResultSetProxy.java
│       │   │               │       ├── ResultSetProxyImpl.java
│       │   │               │       ├── StatementExecuteType.java
│       │   │               │       ├── StatementProxy.java
│       │   │               │       ├── StatementProxyImpl.java
│       │   │               │       ├── TransactionInfo.java
│       │   │               │       ├── WrapperProxy.java
│       │   │               │       └── WrapperProxyImpl.java
│       │   │               ├── sql/
│       │   │               │   ├── PagerUtils.java
│       │   │               │   ├── SQLDialect.java
│       │   │               │   ├── SQLUtils.java
│       │   │               │   ├── ast/
│       │   │               │   │   ├── AutoIncrementType.java
│       │   │               │   │   ├── ClusteringType.java
│       │   │               │   │   ├── DistributedByType.java
│       │   │               │   │   ├── SQLAdhocTableSource.java
│       │   │               │   │   ├── SQLAnnIndex.java
│       │   │               │   │   ├── SQLArgument.java
│       │   │               │   │   ├── SQLArrayDataType.java
│       │   │               │   │   ├── SQLCommentHint.java
│       │   │               │   │   ├── SQLComputeIncrementalStatsStatement.java
│       │   │               │   │   ├── SQLCurrentTimeExpr.java
│       │   │               │   │   ├── SQLCurrentUserExpr.java
│       │   │               │   │   ├── SQLDataType.java
│       │   │               │   │   ├── SQLDataTypeImpl.java
│       │   │               │   │   ├── SQLDataTypeRefExpr.java
│       │   │               │   │   ├── SQLDbTypedObject.java
│       │   │               │   │   ├── SQLDeclareItem.java
│       │   │               │   │   ├── SQLExpr.java
│       │   │               │   │   ├── SQLExprComparor.java
│       │   │               │   │   ├── SQLExprImpl.java
│       │   │               │   │   ├── SQLHint.java
│       │   │               │   │   ├── SQLIndex.java
│       │   │               │   │   ├── SQLIndexDefinition.java
│       │   │               │   │   ├── SQLIndexOptions.java
│       │   │               │   │   ├── SQLJSONValueExpr.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
│       │   │               │   │   ├── SQLPartitionBatch.java
│       │   │               │   │   ├── SQLPartitionBy.java
│       │   │               │   │   ├── SQLPartitionByHash.java
│       │   │               │   │   ├── SQLPartitionByList.java
│       │   │               │   │   ├── SQLPartitionByRange.java
│       │   │               │   │   ├── SQLPartitionByValue.java
│       │   │               │   │   ├── SQLPartitionOf.java
│       │   │               │   │   ├── SQLPartitionSingle.java
│       │   │               │   │   ├── SQLPartitionSpec.java
│       │   │               │   │   ├── SQLPartitionValue.java
│       │   │               │   │   ├── SQLPivot.java
│       │   │               │   │   ├── SQLRecordDataType.java
│       │   │               │   │   ├── SQLReplaceable.java
│       │   │               │   │   ├── SQLResetStatement.java
│       │   │               │   │   ├── SQLRowDataType.java
│       │   │               │   │   ├── SQLSetQuantifier.java
│       │   │               │   │   ├── SQLStatement.java
│       │   │               │   │   ├── SQLStatementImpl.java
│       │   │               │   │   ├── SQLStructDataType.java
│       │   │               │   │   ├── SQLSubPartition.java
│       │   │               │   │   ├── SQLSubPartitionBy.java
│       │   │               │   │   ├── SQLSubPartitionByHash.java
│       │   │               │   │   ├── SQLSubPartitionByList.java
│       │   │               │   │   ├── SQLSubPartitionByRange.java
│       │   │               │   │   ├── SQLTableDataType.java
│       │   │               │   │   ├── SQLTop.java
│       │   │               │   │   ├── SQLUnionDataType.java
│       │   │               │   │   ├── SQLUnpivot.java
│       │   │               │   │   ├── SQLWindow.java
│       │   │               │   │   ├── SQLZOrderBy.java
│       │   │               │   │   ├── TDDLHint.java
│       │   │               │   │   ├── expr/
│       │   │               │   │   │   ├── SQLAggregateExpr.java
│       │   │               │   │   │   ├── SQLAggregateOption.java
│       │   │               │   │   │   ├── SQLAliasedExpr.java
│       │   │               │   │   │   ├── SQLAllColumnExpr.java
│       │   │               │   │   │   ├── SQLAllExpr.java
│       │   │               │   │   │   ├── SQLAnyExpr.java
│       │   │               │   │   │   ├── SQLArrayExpr.java
│       │   │               │   │   │   ├── SQLAtTimeZoneExpr.java
│       │   │               │   │   │   ├── SQLBetweenExpr.java
│       │   │               │   │   │   ├── SQLBigIntExpr.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
│       │   │               │   │   │   ├── SQLDateTimeExpr.java
│       │   │               │   │   │   ├── SQLDateTypeExpr.java
│       │   │               │   │   │   ├── SQLDbLinkExpr.java
│       │   │               │   │   │   ├── SQLDecimalExpr.java
│       │   │               │   │   │   ├── SQLDefaultExpr.java
│       │   │               │   │   │   ├── SQLDoubleExpr.java
│       │   │               │   │   │   ├── SQLExistsExpr.java
│       │   │               │   │   │   ├── SQLExprUtils.java
│       │   │               │   │   │   ├── SQLExtractExpr.java
│       │   │               │   │   │   ├── SQLFlashbackExpr.java
│       │   │               │   │   │   ├── SQLFloatExpr.java
│       │   │               │   │   │   ├── SQLGroupingSetExpr.java
│       │   │               │   │   │   ├── SQLHexExpr.java
│       │   │               │   │   │   ├── SQLIdentifierExpr.java
│       │   │               │   │   │   ├── SQLInListExpr.java
│       │   │               │   │   │   ├── SQLInSubQueryExpr.java
│       │   │               │   │   │   ├── SQLIntegerExpr.java
│       │   │               │   │   │   ├── SQLIntervalExpr.java
│       │   │               │   │   │   ├── SQLIntervalUnit.java
│       │   │               │   │   │   ├── SQLJSONExpr.java
│       │   │               │   │   │   ├── SQLListExpr.java
│       │   │               │   │   │   ├── SQLLiteralExpr.java
│       │   │               │   │   │   ├── SQLMatchAgainstExpr.java
│       │   │               │   │   │   ├── SQLMethodInvokeExpr.java
│       │   │               │   │   │   ├── SQLNCharExpr.java
│       │   │               │   │   │   ├── SQLNotExpr.java
│       │   │               │   │   │   ├── SQLNullExpr.java
│       │   │               │   │   │   ├── SQLNumberExpr.java
│       │   │               │   │   │   ├── SQLNumericLiteralExpr.java
│       │   │               │   │   │   ├── SQLParametricMethodInvokeExpr.java
│       │   │               │   │   │   ├── SQLPatternExpr.java
│       │   │               │   │   │   ├── SQLPropertyExpr.java
│       │   │               │   │   │   ├── SQLQueryExpr.java
│       │   │               │   │   │   ├── SQLRealExpr.java
│       │   │               │   │   │   ├── SQLSequenceExpr.java
│       │   │               │   │   │   ├── SQLSizeExpr.java
│       │   │               │   │   │   ├── SQLSmallIntExpr.java
│       │   │               │   │   │   ├── SQLSomeExpr.java
│       │   │               │   │   │   ├── SQLStructExpr.java
│       │   │               │   │   │   ├── SQLTextLiteralExpr.java
│       │   │               │   │   │   ├── SQLTimeExpr.java
│       │   │               │   │   │   ├── SQLTimestampExpr.java
│       │   │               │   │   │   ├── SQLTimestampNTZExpr.java
│       │   │               │   │   │   ├── SQLTinyIntExpr.java
│       │   │               │   │   │   ├── SQLTypeExpr.java
│       │   │               │   │   │   ├── SQLUnaryExpr.java
│       │   │               │   │   │   ├── SQLUnaryOperator.java
│       │   │               │   │   │   ├── SQLValuableExpr.java
│       │   │               │   │   │   ├── SQLValuesExpr.java
│       │   │               │   │   │   └── SQLVariantRefExpr.java
│       │   │               │   │   └── statement/
│       │   │               │   │       ├── SQLAlterCharacter.java
│       │   │               │   │       ├── SQLAlterDatabaseItem.java
│       │   │               │   │       ├── SQLAlterDatabaseStatement.java
│       │   │               │   │       ├── SQLAlterFunctionStatement.java
│       │   │               │   │       ├── SQLAlterIndexStatement.java
│       │   │               │   │       ├── SQLAlterMaterializedViewStatement.java
│       │   │               │   │       ├── SQLAlterOutlineStatement.java
│       │   │               │   │       ├── SQLAlterProcedureStatement.java
│       │   │               │   │       ├── SQLAlterSequenceStatement.java
│       │   │               │   │       ├── SQLAlterStatement.java
│       │   │               │   │       ├── SQLAlterSystemGetConfigStatement.java
│       │   │               │   │       ├── SQLAlterSystemSetConfigStatement.java
│       │   │               │   │       ├── SQLAlterTableAddClusteringKey.java
│       │   │               │   │       ├── SQLAlterTableAddColumn.java
│       │   │               │   │       ├── SQLAlterTableAddConstraint.java
│       │   │               │   │       ├── SQLAlterTableAddExtPartition.java
│       │   │               │   │       ├── SQLAlterTableAddIndex.java
│       │   │               │   │       ├── SQLAlterTableAddPartition.java
│       │   │               │   │       ├── SQLAlterTableAddSupplemental.java
│       │   │               │   │       ├── SQLAlterTableAlterColumn.java
│       │   │               │   │       ├── SQLAlterTableAlterIndex.java
│       │   │               │   │       ├── SQLAlterTableAnalyzePartition.java
│       │   │               │   │       ├── SQLAlterTableArchive.java
│       │   │               │   │       ├── SQLAlterTableArchivePartition.java
│       │   │               │   │       ├── SQLAlterTableAttachPartition.java
│       │   │               │   │       ├── SQLAlterTableBlockSize.java
│       │   │               │   │       ├── SQLAlterTableChangeOwner.java
│       │   │               │   │       ├── SQLAlterTableCheckPartition.java
│       │   │               │   │       ├── SQLAlterTableCoalescePartition.java
│       │   │               │   │       ├── SQLAlterTableCompression.java
│       │   │               │   │       ├── SQLAlterTableConvertCharSet.java
│       │   │               │   │       ├── SQLAlterTableDeleteByCondition.java
│       │   │               │   │       ├── SQLAlterTableDetachPartition.java
│       │   │               │   │       ├── SQLAlterTableDisableConstraint.java
│       │   │               │   │       ├── SQLAlterTableDisableKeys.java
│       │   │               │   │       ├── SQLAlterTableDisableLifecycle.java
│       │   │               │   │       ├── SQLAlterTableDiscardPartition.java
│       │   │               │   │       ├── SQLAlterTableDropCheck.java
│       │   │               │   │       ├── SQLAlterTableDropClusteringKey.java
│       │   │               │   │       ├── SQLAlterTableDropColumnItem.java
│       │   │               │   │       ├── SQLAlterTableDropConstraint.java
│       │   │               │   │       ├── SQLAlterTableDropExtPartition.java
│       │   │               │   │       ├── SQLAlterTableDropForeignKey.java
│       │   │               │   │       ├── SQLAlterTableDropIndex.java
│       │   │               │   │       ├── SQLAlterTableDropKey.java
│       │   │               │   │       ├── SQLAlterTableDropPartition.java
│       │   │               │   │       ├── SQLAlterTableDropPrimaryKey.java
│       │   │               │   │       ├── SQLAlterTableDropSubpartition.java
│       │   │               │   │       ├── SQLAlterTableEnableConstraint.java
│       │   │               │   │       ├── SQLAlterTableEnableKeys.java
│       │   │               │   │       ├── SQLAlterTableEnableLifecycle.java
│       │   │               │   │       ├── SQLAlterTableExchangePartition.java
│       │   │               │   │       ├── SQLAlterTableGroupStatement.java
│       │   │               │   │       ├── SQLAlterTableImportPartition.java
│       │   │               │   │       ├── SQLAlterTableItem.java
│       │   │               │   │       ├── SQLAlterTableMergePartition.java
│       │   │               │   │       ├── SQLAlterTableModifyClusteredBy.java
│       │   │               │   │       ├── SQLAlterTableOptimizePartition.java
│       │   │               │   │       ├── SQLAlterTablePartition.java
│       │   │               │   │       ├── SQLAlterTablePartitionCount.java
│       │   │               │   │       ├── SQLAlterTablePartitionLifecycle.java
│       │   │               │   │       ├── SQLAlterTablePartitionSetProperties.java
│       │   │               │   │       ├── SQLAlterTableReOrganizePartition.java
│       │   │               │   │       ├── SQLAlterTableRebuildPartition.java
│       │   │               │   │       ├── SQLAlterTableRecoverPartitions.java
│       │   │               │   │       ├── SQLAlterTableRename.java
│       │   │               │   │       ├── SQLAlterTableRenameColumn.java
│       │   │               │   │       ├── SQLAlterTableRenameConstraint.java
│       │   │               │   │       ├── SQLAlterTableRenameIndex.java
│       │   │               │   │       ├── SQLAlterTableRenamePartition.java
│       │   │               │   │       ├── SQLAlterTableRepairPartition.java
│       │   │               │   │       ├── SQLAlterTableReplaceColumn.java
│       │   │               │   │       ├── SQLAlterTableSetComment.java
│       │   │               │   │       ├── SQLAlterTableSetFileFormat.java
│       │   │               │   │       ├── SQLAlterTableSetLifecycle.java
│       │   │               │   │       ├── SQLAlterTableSetLocation.java
│       │   │               │   │       ├── SQLAlterTableSetOption.java
│       │   │               │   │       ├── SQLAlterTableSetSchema.java
│       │   │               │   │       ├── SQLAlterTableSetSerde.java
│       │   │               │   │       ├── SQLAlterTableSetSerdeProperties.java
│       │   │               │   │       ├── SQLAlterTableSetTableSpace.java
│       │   │               │   │       ├── SQLAlterTableStatement.java
│       │   │               │   │       ├── SQLAlterTableSubpartitionAvailablePartitionNum.java
│       │   │               │   │       ├── SQLAlterTableSubpartitionLifecycle.java
│       │   │               │   │       ├── SQLAlterTableTouch.java
│       │   │               │   │       ├── SQLAlterTableTruncatePartition.java
│       │   │               │   │       ├── SQLAlterTableUnarchivePartition.java
│       │   │               │   │       ├── SQLAlterTableValidateConstraint.java
│       │   │               │   │       ├── SQLAlterTypeStatement.java
│       │   │               │   │       ├── SQLAlterViewRenameStatement.java
│       │   │               │   │       ├── SQLAlterViewStatement.java
│       │   │               │   │       ├── SQLAnalyzeTableStatement.java
│       │   │               │   │       ├── SQLArchiveTableStatement.java
│       │   │               │   │       ├── SQLAssignItem.java
│       │   │               │   │       ├── SQLBackupStatement.java
│       │   │               │   │       ├── SQLBeginStatement.java
│       │   │               │   │       ├── SQLBlockStatement.java
│       │   │               │   │       ├── SQLBreakStatement.java
│       │   │               │   │       ├── SQLBuildTableStatement.java
│       │   │               │   │       ├── SQLCallStatement.java
│       │   │               │   │       ├── SQLCancelJobStatement.java
│       │   │               │   │       ├── SQLCharacterDataType.java
│       │   │               │   │       ├── SQLCheck.java
│       │   │               │   │       ├── SQLCloneTableStatement.java
│       │   │               │   │       ├── SQLCloseStatement.java
│       │   │               │   │       ├── SQLColumnCheck.java
│       │   │               │   │       ├── SQLColumnConstraint.java
│       │   │               │   │       ├── SQLColumnDefault.java
│       │   │               │   │       ├── SQLColumnDefinition.java
│       │   │               │   │       ├── SQLColumnPrimaryKey.java
│       │   │               │   │       ├── SQLColumnReference.java
│       │   │               │   │       ├── SQLColumnUniqueKey.java
│       │   │               │   │       ├── SQLCommentStatement.java
│       │   │               │   │       ├── SQLCommitStatement.java
│       │   │               │   │       ├── SQLCommitTransactionStatement.java
│       │   │               │   │       ├── SQLConstraint.java
│       │   │               │   │       ├── SQLConstraintImpl.java
│       │   │               │   │       ├── SQLContinueStatement.java
│       │   │               │   │       ├── SQLCopyFromStatement.java
│       │   │               │   │       ├── SQLCostStatement.java
│       │   │               │   │       ├── SQLCreateDatabaseStatement.java
│       │   │               │   │       ├── SQLCreateFunctionStatement.java
│       │   │               │   │       ├── SQLCreateIndexStatement.java
│       │   │               │   │       ├── SQLCreateMaterializedViewStatement.java
│       │   │               │   │       ├── SQLCreateOutlineStatement.java
│       │   │               │   │       ├── SQLCreateProcedureStatement.java
│       │   │               │   │       ├── SQLCreateRoleStatement.java
│       │   │               │   │       ├── SQLCreateSequenceStatement.java
│       │   │               │   │       ├── SQLCreateStatement.java
│       │   │               │   │       ├── SQLCreateTableGroupStatement.java
│       │   │               │   │       ├── SQLCreateTableStatement.java
│       │   │               │   │       ├── SQLCreateTriggerStatement.java
│       │   │               │   │       ├── SQLCreateUserStatement.java
│       │   │               │   │       ├── SQLCreateViewStatement.java
│       │   │               │   │       ├── SQLDDLStatement.java
│       │   │               │   │       ├── SQLDeclareStatement.java
│       │   │               │   │       ├── SQLDefault.java
│       │   │               │   │       ├── SQLDeleteStatement.java
│       │   │               │   │       ├── SQLDescribeStatement.java
│       │   │               │   │       ├── SQLDropCatalogStatement.java
│       │   │               │   │       ├── SQLDropDatabaseStatement.java
│       │   │               │   │       ├── SQLDropEventStatement.java
│       │   │               │   │       ├── SQLDropFunctionStatement.java
│       │   │               │   │       ├── SQLDropIndexStatement.java
│       │   │               │   │       ├── SQLDropLogFileGroupStatement.java
│       │   │               │   │       ├── SQLDropMaterializedViewStatement.java
│       │   │               │   │       ├── SQLDropOfflineModelStatement.java
│       │   │               │   │       ├── SQLDropOutlineStatement.java
│       │   │               │   │       ├── SQLDropProcedureStatement.java
│       │   │               │   │       ├── SQLDropResourceGroupStatement.java
│       │   │               │   │       ├── SQLDropResourceStatement.java
│       │   │               │   │       ├── SQLDropRoleStatement.java
│       │   │               │   │       ├── SQLDropSequenceStatement.java
│       │   │               │   │       ├── SQLDropServerStatement.java
│       │   │               │   │       ├── SQLDropStatement.java
│       │   │               │   │       ├── SQLDropSynonymStatement.java
│       │   │               │   │       ├── SQLDropTableGroupStatement.java
│       │   │               │   │       ├── SQLDropTableSpaceStatement.java
│       │   │               │   │       ├── SQLDropTableStatement.java
│       │   │               │   │       ├── SQLDropTriggerStatement.java
│       │   │               │   │       ├── SQLDropTypeStatement.java
│       │   │               │   │       ├── SQLDropUserStatement.java
│       │   │               │   │       ├── SQLDropViewStatement.java
│       │   │               │   │       ├── SQLDumpStatement.java
│       │   │               │   │       ├── SQLErrorLoggingClause.java
│       │   │               │   │       ├── SQLExceptionStatement.java
│       │   │               │   │       ├── SQLExecuteImmediateStatement.java
│       │   │               │   │       ├── SQLExplainAnalyzeStatement.java
│       │   │               │   │       ├── SQLExplainStatement.java
│       │   │               │   │       ├── SQLExportDatabaseStatement.java
│       │   │               │   │       ├── SQLExportTableStatement.java
│       │   │               │   │       ├── SQLExprHint.java
│       │   │               │   │       ├── SQLExprStatement.java
│       │   │               │   │       ├── SQLExprTableSource.java
│       │   │               │   │       ├── SQLExternalRecordFormat.java
│       │   │               │   │       ├── SQLFetchStatement.java
│       │   │               │   │       ├── SQLForStatement.java
│       │   │               │   │       ├── SQLForeignKeyConstraint.java
│       │   │               │   │       ├── SQLForeignKeyImpl.java
│       │   │               │   │       ├── SQLGeneratedTableSource.java
│       │   │               │   │       ├── SQLGetDiagnosticsStatement.java
│       │   │               │   │       ├── SQLGrantStatement.java
│       │   │               │   │       ├── SQLIfStatement.java
│       │   │               │   │       ├── SQLImportDatabaseStatement.java
│       │   │               │   │       ├── SQLImportTableStatement.java
│       │   │               │   │       ├── SQLInsertInto.java
│       │   │               │   │       ├── SQLInsertStatement.java
│       │   │               │   │       ├── SQLJoinTableSource.java
│       │   │               │   │       ├── SQLLateralViewTableSource.java
│       │   │               │   │       ├── SQLLeaveStatement.java
│       │   │               │   │       ├── SQLLockTableStatement.java
│       │   │               │   │       ├── SQLLoopStatement.java
│       │   │               │   │       ├── SQLMergeStatement.java
│       │   │               │   │       ├── SQLNotNullConstraint.java
│       │   │               │   │       ├── SQLNullConstraint.java
│       │   │               │   │       ├── SQLObjectType.java
│       │   │               │   │       ├── SQLOpenStatement.java
│       │   │               │   │       ├── SQLOptimizeStatement.java
│       │   │               │   │       ├── SQLPartitionRef.java
│       │   │               │   │       ├── SQLPrimaryKey.java
│       │   │               │   │       ├── SQLPrimaryKeyImpl.java
│       │   │               │   │       ├── SQLPrivilegeItem.java
│       │   │               │   │       ├── SQLPrivilegeStatement.java
│       │   │               │   │       ├── SQLPurgeLogsStatement.java
│       │   │               │   │       ├── SQLPurgeRecyclebinStatement.java
│       │   │               │   │       ├── SQLPurgeTableStatement.java
│       │   │               │   │       ├── SQLPurgeTemporaryOutputStatement.java
│       │   │               │   │       ├── SQLRaiseStatement.java
│       │   │               │   │       ├── SQLRefreshMaterializedViewStatement.java
│       │   │               │   │       ├── SQLRefreshTableStatement.java
│       │   │               │   │       ├── SQLReleaseSavePointStatement.java
│       │   │               │   │       ├── SQLRenameUserStatement.java
│       │   │               │   │       ├── SQLReplaceStatement.java
│       │   │               │   │       ├── SQLRestoreStatement.java
│       │   │               │   │       ├── SQLReturnStatement.java
│       │   │               │   │       ├── SQLRevokeStatement.java
│       │   │               │   │       ├── SQLRollbackStatement.java
│       │   │               │   │       ├── SQLRollbackTransactionStatement.java
│       │   │               │   │       ├── SQLSavePointStatement.java
│       │   │               │   │       ├── SQLScriptCommitStatement.java
│       │   │               │   │       ├── SQLSelect.java
│       │   │               │   │       ├── SQLSelectGroupByClause.java
│       │   │               │   │       ├── SQLSelectItem.java
│       │   │               │   │       ├── SQLSelectOrderByItem.java
│       │   │               │   │       ├── SQLSelectQuery.java
│       │   │               │   │       ├── SQLSelectQueryBase.java
│       │   │               │   │       ├── SQLSelectQueryBlock.java
│       │   │               │   │       ├── SQLSelectStatement.java
│       │   │               │   │       ├── SQLSetStatement.java
│       │   │               │   │       ├── SQLShowACLStatement.java
│       │   │               │   │       ├── SQLShowCatalogsStatement.java
│       │   │               │   │       ├── SQLShowColumnsStatement.java
│       │   │               │   │       ├── SQLShowCreateMaterializedViewStatement.java
│       │   │               │   │       ├── SQLShowCreateTableStatement.java
│       │   │               │   │       ├── SQLShowCreateViewStatement.java
│       │   │               │   │       ├── SQLShowDatabasesStatement.java
│       │   │               │   │       ├── SQLShowErrorsStatement.java
│       │   │               │   │       ├── SQLShowFunctionsStatement.java
│       │   │               │   │       ├── SQLShowGrantsStatement.java
│       │   │               │   │       ├── SQLShowHistoryStatement.java
│       │   │               │   │       ├── SQLShowIndexesStatement.java
│       │   │               │   │       ├── SQLShowMaterializedViewStatement.java
│       │   │               │   │       ├── SQLShowOutlinesStatement.java
│       │   │               │   │       ├── SQLShowPackagesStatement.java
│       │   │               │   │       ├── SQLShowPartitionsStmt.java
│       │   │               │   │       ├── SQLShowProcessListStatement.java
│       │   │               │   │       ├── SQLShowQueryTaskStatement.java
│       │   │               │   │       ├── SQLShowRecylebinStatement.java
│       │   │               │   │       ├── SQLShowRoleStatement.java
│       │   │               │   │       ├── SQLShowRolesStatement.java
│       │   │               │   │       ├── SQLShowSessionStatement.java
│       │   │               │   │       ├── SQLShowStatement.java
│       │   │               │   │       ├── SQLShowStatisticListStmt.java
│       │   │               │   │       ├── SQLShowStatisticStmt.java
│       │   │               │   │       ├── SQLShowTableGroupsStatement.java
│       │   │               │   │       ├── SQLShowTablesStatement.java
│       │   │               │   │       ├── SQLShowUsersStatement.java
│       │   │               │   │       ├── SQLShowVariantsStatement.java
│       │   │               │   │       ├── SQLShowViewsStatement.java
│       │   │               │   │       ├── SQLStartTransactionStatement.java
│       │   │               │   │       ├── SQLSubmitJobStatement.java
│       │   │               │   │       ├── SQLSubqueryTableSource.java
│       │   │               │   │       ├── SQLSyncMetaStatement.java
│       │   │               │   │       ├── SQLTableConstraint.java
│       │   │               │   │       ├── SQLTableElement.java
│       │   │               │   │       ├── SQLTableLike.java
│       │   │               │   │       ├── SQLTableSampling.java
│       │   │               │   │       ├── SQLTableSource.java
│       │   │               │   │       ├── SQLTableSourceImpl.java
│       │   │               │   │       ├── SQLTruncateStatement.java
│       │   │               │   │       ├── SQLUnionOperator.java
│       │   │               │   │       ├── SQLUnionQuery.java
│       │   │               │   │       ├── SQLUnionQueryTableSource.java
│       │   │               │   │       ├── SQLUnique.java
│       │   │               │   │       ├── SQLUniqueConstraint.java
│       │   │               │   │       ├── SQLUnnestTableSource.java
│       │   │               │   │       ├── SQLUpdateSetItem.java
│       │   │               │   │       ├── SQLUpdateStatement.java
│       │   │               │   │       ├── SQLUseStatement.java
│       │   │               │   │       ├── SQLValuesQuery.java
│       │   │               │   │       ├── SQLValuesTableSource.java
│       │   │               │   │       ├── SQLWhileStatement.java
│       │   │               │   │       ├── SQLWhoamiStatement.java
│       │   │               │   │       └── SQLWithSubqueryClause.java
│       │   │               │   ├── builder/
│       │   │               │   │   ├── SQLBuilder.java
│       │   │               │   │   ├── SQLBuilderFactory.java
│       │   │               │   │   ├── SQLDeleteBuilder.java
│       │   │               │   │   ├── SQLFunctionBuilder.java
│       │   │               │   │   ├── SQLSelectBuilder.java
│       │   │               │   │   ├── SQLUpdateBuilder.java
│       │   │               │   │   ├── UpdateBuilder.java
│       │   │               │   │   └── impl/
│       │   │               │   │       ├── SQLBuilderImpl.java
│       │   │               │   │       ├── SQLDeleteBuilderImpl.java
│       │   │               │   │       ├── SQLSelectBuilderImpl.java
│       │   │               │   │       └── SQLUpdateBuilderImpl.java
│       │   │               │   ├── dialect/
│       │   │               │   │   ├── athena/
│       │   │               │   │   │   ├── Athena.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── AthenaObject.java
│       │   │               │   │   │   │   └── stmt/
│       │   │               │   │   │   │       └── AthenaCreateTableStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── AthenaCreateTableParser.java
│       │   │               │   │   │   │   ├── AthenaExprParser.java
│       │   │               │   │   │   │   ├── AthenaLexer.java
│       │   │               │   │   │   │   ├── AthenaSelectParser.java
│       │   │               │   │   │   │   └── AthenaStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── AthenaASTVisitor.java
│       │   │               │   │   │       └── AthenaOutputVisitor.java
│       │   │               │   │   ├── bigquery/
│       │   │               │   │   │   ├── BQ.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── BigQueryAssertStatement.java
│       │   │               │   │   │   │   ├── BigQueryCharExpr.java
│       │   │               │   │   │   │   ├── BigQueryCreateModelStatement.java
│       │   │               │   │   │   │   ├── BigQueryCreateTableStatement.java
│       │   │               │   │   │   │   ├── BigQueryExecuteImmediateStatement.java
│       │   │               │   │   │   │   ├── BigQueryExportDataStatement.java
│       │   │               │   │   │   │   ├── BigQueryModelExpr.java
│       │   │               │   │   │   │   ├── BigQueryObject.java
│       │   │               │   │   │   │   ├── BigQuerySelectQueryBlock.java
│       │   │               │   │   │   │   └── BigQueryTableExpr.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── BigQueryCreateTableParser.java
│       │   │               │   │   │   │   ├── BigQueryExprParser.java
│       │   │               │   │   │   │   ├── BigQueryLexer.java
│       │   │               │   │   │   │   ├── BigQuerySelectParser.java
│       │   │               │   │   │   │   └── BigQueryStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── BigQueryASTVisitorAdapter.java
│       │   │               │   │   │       ├── BigQueryOutputVisitor.java
│       │   │               │   │   │       ├── BigQuerySchemaStatVisitor.java
│       │   │               │   │   │       └── BigQueryVisitor.java
│       │   │               │   │   ├── blink/
│       │   │               │   │   │   ├── Blink.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   └── BlinkCreateTableStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── BlinkCreateTableParser.java
│       │   │               │   │   │   │   ├── BlinkExprParser.java
│       │   │               │   │   │   │   ├── BlinkLexer.java
│       │   │               │   │   │   │   └── BlinkStatementParser.java
│       │   │               │   │   │   └── vsitor/
│       │   │               │   │   │       ├── BlinkOutputVisitor.java
│       │   │               │   │   │       └── BlinkVisitor.java
│       │   │               │   │   ├── clickhouse/
│       │   │               │   │   │   ├── CK.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── CKAlterTableStatement.java
│       │   │               │   │   │   │   ├── CKAlterTableUpdateStatement.java
│       │   │               │   │   │   │   ├── CKCreateMaterializedViewStatement.java
│       │   │               │   │   │   │   ├── CKCreateTableStatement.java
│       │   │               │   │   │   │   ├── CKDropTableStatement.java
│       │   │               │   │   │   │   ├── CKSelectQueryBlock.java
│       │   │               │   │   │   │   ├── ClickhouseColumnCodec.java
│       │   │               │   │   │   │   ├── ClickhouseColumnConstraint.java
│       │   │               │   │   │   │   └── ClickhouseColumnTTL.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── CKCreateTableParser.java
│       │   │               │   │   │   │   ├── CKExprParser.java
│       │   │               │   │   │   │   ├── CKLexer.java
│       │   │               │   │   │   │   ├── CKSelectParser.java
│       │   │               │   │   │   │   └── CKStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── CKASTVisitor.java
│       │   │               │   │   │       ├── CKExportParameterVisitor.java
│       │   │               │   │   │       ├── CKOutputVisitor.java
│       │   │               │   │   │       └── CKStatVisitor.java
│       │   │               │   │   ├── databricks/
│       │   │               │   │   │   ├── DataBricks.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── DatabricksCreateTableParser.java
│       │   │               │   │   │   │   ├── DatabricksExprParser.java
│       │   │               │   │   │   │   ├── DatabricksLexer.java
│       │   │               │   │   │   │   ├── DatabricksSelectParser.java
│       │   │               │   │   │   │   └── DatabricksStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── DatabricksASTASTVisitor.java
│       │   │               │   │   │       └── DatabricksOutputASTVisitor.java
│       │   │               │   │   ├── db2/
│       │   │               │   │   │   ├── Db2.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── DB2IntermediateResultTableSource.java
│       │   │               │   │   │   │   ├── DB2Object.java
│       │   │               │   │   │   │   ├── DB2Statement.java
│       │   │               │   │   │   │   ├── DB2StatementImpl.java
│       │   │               │   │   │   │   └── stmt/
│       │   │               │   │   │   │       ├── DB2CreateSchemaStatement.java
│       │   │               │   │   │   │       ├── DB2CreateTableStatement.java
│       │   │               │   │   │   │       ├── DB2DropSchemaStatement.java
│       │   │               │   │   │   │       ├── DB2SelectQueryBlock.java
│       │   │               │   │   │   │       └── DB2ValuesStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── DB2CreateTableParser.java
│       │   │               │   │   │   │   ├── DB2ExprParser.java
│       │   │               │   │   │   │   ├── DB2Lexer.java
│       │   │               │   │   │   │   ├── DB2SelectParser.java
│       │   │               │   │   │   │   └── DB2StatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── DB2ASTVisitor.java
│       │   │               │   │   │       ├── DB2ASTVisitorAdapter.java
│       │   │               │   │   │       ├── DB2EvalVisitor.java
│       │   │               │   │   │       ├── DB2ExportParameterVisitor.java
│       │   │               │   │   │       ├── DB2OutputVisitor.java
│       │   │               │   │   │       └── DB2SchemaStatVisitor.java
│       │   │               │   │   ├── dm/
│       │   │               │   │   │   ├── Dm.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── DmObject.java
│       │   │               │   │   │   │   ├── DmObjectImpl.java
│       │   │               │   │   │   │   └── stmt/
│       │   │               │   │   │   │       ├── DmDeleteStatement.java
│       │   │               │   │   │   │       ├── DmInsertStatement.java
│       │   │               │   │   │   │       ├── DmSelectQueryBlock.java
│       │   │               │   │   │   │       ├── DmSelectStatement.java
│       │   │               │   │   │   │       └── DmUpdateStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── DmCreateTableParser.java
│       │   │               │   │   │   │   ├── DmExprParser.java
│       │   │               │   │   │   │   ├── DmLexer.java
│       │   │               │   │   │   │   ├── DmSelectParser.java
│       │   │               │   │   │   │   └── DmStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── DmASTVisitor.java
│       │   │               │   │   │       ├── DmOutputVisitor.java
│       │   │               │   │   │       └── DmSchemaStatVisitor.java
│       │   │               │   │   ├── doris/
│       │   │               │   │   │   ├── Doris.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── DorisExprTableSource.java
│       │   │               │   │   │   │   ├── DorisObject.java
│       │   │               │   │   │   │   └── DorisObjectImpl.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── DorisCreateTableParser.java
│       │   │               │   │   │   │   ├── DorisExprParser.java
│       │   │               │   │   │   │   ├── DorisLexer.java
│       │   │               │   │   │   │   ├── DorisSelectParser.java
│       │   │               │   │   │   │   └── DorisStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── DorisASTVisitor.java
│       │   │               │   │   │       └── DorisOutputVisitor.java
│       │   │               │   │   ├── gaussdb/
│       │   │               │   │   │   ├── GaussDb.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── GaussDbDistributeBy.java
│       │   │               │   │   │   │   ├── GaussDbObject.java
│       │   │               │   │   │   │   ├── GaussDbObjectImpl.java
│       │   │               │   │   │   │   ├── GaussDbPartitionValue.java
│       │   │               │   │   │   │   └── stmt/
│       │   │               │   │   │   │       ├── GaussDbCreateTableStatement.java
│       │   │               │   │   │   │       └── GaussDbInsertStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── GaussDbCreateTableParser.java
│       │   │               │   │   │   │   ├── GaussDbExprParser.java
│       │   │               │   │   │   │   ├── GaussDbLexer.java
│       │   │               │   │   │   │   └── GaussDbStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── GaussDbASTVisitor.java
│       │   │               │   │   │       └── GaussDbOutputVisitor.java
│       │   │               │   │   ├── h2/
│       │   │               │   │   │   ├── H2.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── H2ExprParser.java
│       │   │               │   │   │   │   ├── H2Lexer.java
│       │   │               │   │   │   │   ├── H2SelectParser.java
│       │   │               │   │   │   │   └── H2StatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── H2ASTVisitor.java
│       │   │               │   │   │       ├── H2ASTVisitorAdapter.java
│       │   │               │   │   │       ├── H2EvalVisitor.java
│       │   │               │   │   │       ├── H2OutputVisitor.java
│       │   │               │   │   │       └── H2SchemaStatVisitor.java
│       │   │               │   │   ├── hive/
│       │   │               │   │   │   ├── Hive.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── HiveAddJarStatement.java
│       │   │               │   │   │   │   ├── HiveInputOutputFormat.java
│       │   │               │   │   │   │   ├── HiveInsert.java
│       │   │               │   │   │   │   ├── HiveInsertStatement.java
│       │   │               │   │   │   │   └── HiveMultiInsertStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── HiveCreateTableParser.java
│       │   │               │   │   │   │   ├── HiveExprParser.java
│       │   │               │   │   │   │   ├── HiveLexer.java
│       │   │               │   │   │   │   ├── HiveSelectParser.java
│       │   │               │   │   │   │   └── HiveStatementParser.java
│       │   │               │   │   │   ├── stmt/
│       │   │               │   │   │   │   ├── HiveCreateFunctionStatement.java
│       │   │               │   │   │   │   ├── HiveCreateTableStatement.java
│       │   │               │   │   │   │   ├── HiveLoadDataStatement.java
│       │   │               │   │   │   │   └── HiveMsckRepairStatement.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── HiveASTVisitor.java
│       │   │               │   │   │       ├── HiveASTVisitorAdapter.java
│       │   │               │   │   │       ├── HiveOutputVisitor.java
│       │   │               │   │   │       └── HiveSchemaStatVisitor.java
│       │   │               │   │   ├── hologres/
│       │   │               │   │   │   ├── Hologres.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── HologresCreateTableParser.java
│       │   │               │   │   │   │   ├── HologresExprParser.java
│       │   │               │   │   │   │   ├── HologresLexer.java
│       │   │               │   │   │   │   ├── HologresSelectParser.java
│       │   │               │   │   │   │   └── HologresStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       └── HologresOutputVisitor.java
│       │   │               │   │   ├── impala/
│       │   │               │   │   │   ├── Impala.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   └── ImpalaSQLPartitionValue.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── ImpalaCreateTableParser.java
│       │   │               │   │   │   │   ├── ImpalaExprParser.java
│       │   │               │   │   │   │   ├── ImpalaLexer.java
│       │   │               │   │   │   │   ├── ImpalaSelectParser.java
│       │   │               │   │   │   │   └── ImpalaStatementParser.java
│       │   │               │   │   │   ├── stmt/
│       │   │               │   │   │   │   ├── ImpalaCreateTableStatement.java
│       │   │               │   │   │   │   └── ImpalaInsertStatement.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── ImpalaASTVisitor.java
│       │   │               │   │   │       └── ImpalaOutputVisitor.java
│       │   │               │   │   ├── informix/
│       │   │               │   │   │   ├── Informix.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── InformixSelectParser.java
│       │   │               │   │   │   │   └── InformixStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       └── InformixOutputVisitor.java
│       │   │               │   │   ├── mysql/
│       │   │               │   │   │   ├── MySQL.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── AnalyzerIndexType.java
│       │   │               │   │   │   │   ├── FullTextType.java
│       │   │               │   │   │   │   ├── MySqlForceIndexHint.java
│       │   │               │   │   │   │   ├── MySqlHint.java
│       │   │               │   │   │   │   ├── MySqlIgnoreIndexHint.java
│       │   │               │   │   │   │   ├── MySqlIndexHint.java
│       │   │               │   │   │   │   ├── MySqlIndexHintImpl.java
│       │   │               │   │   │   │   ├── MySqlKey.java
│       │   │               │   │   │   │   ├── MySqlObject.java
│       │   │               │   │   │   │   ├── MySqlObjectImpl.java
│       │   │               │   │   │   │   ├── MySqlPrimaryKey.java
│       │   │               │   │   │   │   ├── MySqlUnique.java
│       │   │               │   │   │   │   ├── MySqlUseIndexHint.java
│       │   │               │   │   │   │   ├── MysqlForeignKey.java
│       │   │               │   │   │   │   ├── MysqlPartitionSingle.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
│       │   │               │   │   │   │   │   ├── MySqlJSONTableExpr.java
│       │   │               │   │   │   │   │   ├── MySqlOrderingExpr.java
│       │   │               │   │   │   │   │   ├── MySqlOutFileExpr.java
│       │   │               │   │   │   │   │   └── MySqlUserName.java
│       │   │               │   │   │   │   └── statement/
│       │   │               │   │   │   │       ├── CobarShowStatus.java
│       │   │               │   │   │   │       ├── DrdsBaselineStatement.java
│       │   │               │   │   │   │       ├── DrdsCancelDDLJob.java
│       │   │               │   │   │   │       ├── DrdsChangeDDLJob.java
│       │   │               │   │   │   │       ├── DrdsClearDDLJobCache.java
│       │   │               │   │   │   │       ├── DrdsInspectDDLJobCache.java
│       │   │               │   │   │   │       ├── DrdsRecoverDDLJob.java
│       │   │               │   │   │   │       ├── DrdsRemoveDDLJob.java
│       │   │               │   │   │   │       ├── DrdsRollbackDDLJob.java
│       │   │               │   │   │   │       ├── DrdsShowDDLJobs.java
│       │   │               │   │   │   │       ├── DrdsShowGlobalIndex.java
│       │   │               │   │   │   │       ├── DrdsShowMetadataLock.java
│       │   │               │   │   │   │       ├── MySqlAlterDatabaseKillJob.java
│       │   │               │   │   │   │       ├── MySqlAlterDatabaseSetOption.java
│       │   │               │   │   │   │       ├── MySqlAlterEventStatement.java
│       │   │               │   │   │   │       ├── MySqlAlterLogFileGroupStatement.java
│       │   │               │   │   │   │       ├── MySqlAlterServerStatement.java
│       │   │               │   │   │   │       ├── MySqlAlterTableAlgorithm.java
│       │   │               │   │   │   │       ├── MySqlAlterTableAlterColumn.java
│       │   │               │   │   │   │       ├── MySqlAlterTableAlterFullTextIndex.java
│       │   │               │   │   │   │       ├── MySqlAlterTableChangeColumn.java
│       │   │               │   │   │   │       ├── MySqlAlterTableDiscardTablespace.java
│       │   │               │   │   │   │       ├── MySqlAlterTableForce.java
│       │   │               │   │   │   │       ├── MySqlAlterTableImportTablespace.java
│       │   │               │   │   │   │       ├── MySqlAlterTableLock.java
│       │   │               │   │   │   │       ├── MySqlAlterTableModifyColumn.java
│       │   │               │   │   │   │       ├── MySqlAlterTableOption.java
│       │   │               │   │   │   │       ├── MySqlAlterTableOrderBy.java
│       │   │               │   │   │   │       ├── MySqlAlterTableValidation.java
│       │   │               │   │   │   │       ├── MySqlAlterTablespaceStatement.java
│       │   │               │   │   │   │       ├── MySqlAlterUserStatement.java
│       │   │               │   │   │   │       ├── MySqlAnalyzeStatement.java
│       │   │               │   │   │   │       ├── MySqlBinlogStatement.java
│       │   │               │   │   │   │       ├── MySqlCheckTableStatement.java
│       │   │               │   │   │   │       ├── MySqlChecksumTableStatement.java
│       │   │               │   │   │   │       ├── MySqlClearPlanCacheStatement.java
│       │   │               │   │   │   │       ├── MySqlCreateAddLogFileGroupStatement.java
│       │   │               │   │   │   │       ├── MySqlCreateEventStatement.java
│       │   │               │   │   │   │       ├── MySqlCreateExternalCatalogStatement.java
│       │   │               │   │   │   │       ├── MySqlCreateServerStatement.java
│       │   │               │   │   │   │       ├── MySqlCreateTableSpaceStatement.java
│       │   │               │   │   │   │       ├── MySqlCreateTableStatement.java
│       │   │               │   │   │   │       ├── MySqlCreateUserStatement.java
│       │   │               │   │   │   │       ├── MySqlDeleteStatement.java
│       │   │               │   │   │   │       ├── MySqlDisabledPlanCacheStatement.java
│       │   │               │   │   │   │       ├── MySqlEventSchedule.java
│       │   │               │   │   │   │       ├── MySqlExecuteForAdsStatement.java
│       │   │               │   │   │   │       ├── MySqlExecuteStatement.java
│       │   │               │   │   │   │       ├── MySqlExplainPlanCacheStatement.java
│       │   │               │   │   │   │       ├── MySqlExplainStatement.java
│       │   │               │   │   │   │       ├── MySqlExtPartition.java
│       │   │               │   │   │   │       ├── MySqlFlashbackStatement.java
│       │   │               │   │   │   │       ├── MySqlFlushStatement.java
│       │   │               │   │   │   │       ├── MySqlHelpStatement.java
│       │   │               │   │   │   │       ├── MySqlHintStatement.java
│       │   │               │   │   │   │       ├── MySqlInsertStatement.java
│       │   │               │   │   │   │       ├── MySqlKillStatement.java
│       │   │               │   │   │   │       ├── MySqlLoadDataInFileStatement.java
│       │   │               │   │   │   │       ├── MySqlLoadXmlStatement.java
│       │   │               │   │   │   │       ├── MySqlLockTableStatement.java
│       │   │               │   │   │   │       ├── MySqlManageInstanceGroupStatement.java
│       │   │               │   │   │   │       ├── MySqlMigrateStatement.java
│       │   │               │   │   │   │       ├── MySqlOptimizeStatement.java
│       │   │               │   │   │   │       ├── MySqlPartitionByKey.java
│       │   │               │   │   │   │       ├── MySqlPrepareStatement.java
│       │   │               │   │   │   │       ├── MySqlRaftLeaderTransferStatement.java
│       │   │               │   │   │   │       ├── MySqlRaftMemberChangeStatement.java
│       │   │               │   │   │   │       ├── MySqlRenameSequenceStatement.java
│       │   │               │   │   │   │       ├── MySqlRenameTableStatement.java
│       │   │               │   │   │   │       ├── MySqlSelectQueryBlock.java
│       │   │               │   │   │   │       ├── MySqlSetTransactionStatement.java
│       │   │               │   │   │   │       ├── MySqlShowAuthorsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowBinLogEventsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowBinaryLogsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowBroadcastsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowCharacterSetStatement.java
│       │   │               │   │   │   │       ├── MySqlShowClusterNameStatement.java
│       │   │               │   │   │   │       ├── MySqlShowCollationStatement.java
│       │   │               │   │   │   │       ├── MySqlShowConfigStatement.java
│       │   │               │   │   │   │       ├── MySqlShowContributorsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowCreateDatabaseStatement.java
│       │   │               │   │   │   │       ├── MySqlShowCreateEventStatement.java
│       │   │               │   │   │   │       ├── MySqlShowCreateFunctionStatement.java
│       │   │               │   │   │   │       ├── MySqlShowCreateProcedureStatement.java
│       │   │               │   │   │   │       ├── MySqlShowCreateTriggerStatement.java
│       │   │               │   │   │   │       ├── MySqlShowDatabaseStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowDatasourcesStatement.java
│       │   │               │   │   │   │       ├── MySqlShowDdlStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowDsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowEngineStatement.java
│       │   │               │   │   │   │       ├── MySqlShowEnginesStatement.java
│       │   │               │   │   │   │       ├── MySqlShowErrorsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowEventsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowFunctionCodeStatement.java
│       │   │               │   │   │   │       ├── MySqlShowFunctionStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowGrantsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowHMSMetaStatement.java
│       │   │               │   │   │   │       ├── MySqlShowHelpStatement.java
│       │   │               │   │   │   │       ├── MySqlShowJobStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowMasterLogsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowMasterStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowMigrateTaskStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowNodeStatement.java
│       │   │               │   │   │   │       ├── MySqlShowOpenTablesStatement.java
│       │   │               │   │   │   │       ├── MySqlShowPartitionsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowPhysicalProcesslistStatement.java
│       │   │               │   │   │   │       ├── MySqlShowPlanCacheStatement.java
│       │   │               │   │   │   │       ├── MySqlShowPlanCacheStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowPluginsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowPrivilegesStatement.java
│       │   │               │   │   │   │       ├── MySqlShowProcedureCodeStatement.java
│       │   │               │   │   │   │       ├── MySqlShowProcedureStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowProcessListStatement.java
│       │   │               │   │   │   │       ├── MySqlShowProfileStatement.java
│       │   │               │   │   │   │       ├── MySqlShowProfilesStatement.java
│       │   │               │   │   │   │       ├── MySqlShowRelayLogEventsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowRuleStatement.java
│       │   │               │   │   │   │       ├── MySqlShowRuleStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowSequencesStatement.java
│       │   │               │   │   │   │       ├── MySqlShowSlaveHostsStatement.java
│       │   │               │   │   │   │       ├── MySqlShowSlaveStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowSlowStatement.java
│       │   │               │   │   │   │       ├── MySqlShowStatement.java
│       │   │               │   │   │   │       ├── MySqlShowStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowTableStatusStatement.java
│       │   │               │   │   │   │       ├── MySqlShowTopologyStatement.java
│       │   │               │   │   │   │       ├── MySqlShowTraceStatement.java
│       │   │               │   │   │   │       ├── MySqlShowTriggersStatement.java
│       │   │               │   │   │   │       ├── MySqlShowWarningsStatement.java
│       │   │               │   │   │   │       ├── MySqlStatement.java
│       │   │               │   │   │   │       ├── MySqlStatementImpl.java
│       │   │               │   │   │   │       ├── MySqlSubPartitionByKey.java
│       │   │               │   │   │   │       ├── MySqlSubPartitionByList.java
│       │   │               │   │   │   │       ├── MySqlSubPartitionByValue.java
│       │   │               │   │   │   │       ├── MySqlTableIndex.java
│       │   │               │   │   │   │       ├── MySqlUnlockTablesStatement.java
│       │   │               │   │   │   │       ├── MySqlUpdatePlanCacheStatement.java
│       │   │               │   │   │   │       ├── MySqlUpdateStatement.java
│       │   │               │   │   │   │       ├── MySqlUpdateTableSource.java
│       │   │               │   │   │   │       ├── MySqlXAStatement.java
│       │   │               │   │   │   │       ├── MysqlAlterFullTextStatement.java
│       │   │               │   │   │   │       ├── MysqlAlterTableAlterCheck.java
│       │   │               │   │   │   │       ├── MysqlCreateFullTextAnalyzerStatement.java
│       │   │               │   │   │   │       ├── MysqlCreateFullTextCharFilterStatement.java
│       │   │               │   │   │   │       ├── MysqlCreateFullTextDictionaryStatement.java
│       │   │               │   │   │   │       ├── MysqlCreateFullTextTokenFilterStatement.java
│       │   │               │   │   │   │       ├── MysqlCreateFullTextTokenizerStatement.java
│       │   │               │   │   │   │       ├── MysqlDeallocatePrepareStatement.java
│       │   │               │   │   │   │       ├── MysqlDropFullTextStatement.java
│       │   │               │   │   │   │       ├── MysqlShowCreateFullTextStatement.java
│       │   │               │   │   │   │       ├── MysqlShowDbLockStatement.java
│       │   │               │   │   │   │       ├── MysqlShowFullTextStatement.java
│       │   │               │   │   │   │       ├── MysqlShowHtcStatement.java
│       │   │               │   │   │   │       ├── MysqlShowStcStatement.java
│       │   │               │   │   │   │       ├── SQLAlterResourceGroupStatement.java
│       │   │               │   │   │   │       ├── SQLCreateResourceGroupStatement.java
│       │   │               │   │   │   │       ├── SQLListResourceGroupStatement.java
│       │   │               │   │   │   │       └── TidbSplitTableStatement.java
│       │   │               │   │   │   ├── executor/
│       │   │               │   │   │   │   └── MySqlProcedureExecutor.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── MySqlCreateTableParser.java
│       │   │               │   │   │   │   ├── MySqlExprParser.java
│       │   │               │   │   │   │   ├── MySqlInsertReader.java
│       │   │               │   │   │   │   ├── MySqlLexer.java
│       │   │               │   │   │   │   ├── MySqlSelectIntoParser.java
│       │   │               │   │   │   │   ├── MySqlSelectParser.java
│       │   │               │   │   │   │   └── MySqlStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── MySqlASTVisitor.java
│       │   │               │   │   │       ├── MySqlASTVisitorAdapter.java
│       │   │               │   │   │       ├── MySqlEvalVisitorImpl.java
│       │   │               │   │   │       ├── MySqlExportParameterVisitor.java
│       │   │               │   │   │       ├── MySqlOutputVisitor.java
│       │   │               │   │   │       ├── MySqlParameterizedVisitor.java
│       │   │               │   │   │       ├── MySqlSchemaStatVisitor.java
│       │   │               │   │   │       ├── MySqlShowColumnOutpuVisitor.java
│       │   │               │   │   │       └── transform/
│       │   │               │   │   │           ├── FromSubqueryResolver.java
│       │   │               │   │   │           ├── NameResolveVisitor.java
│       │   │               │   │   │           └── OrderByResolve.java
│       │   │               │   │   ├── odps/
│       │   │               │   │   │   ├── Odps.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── OdpsAddAccountProviderStatement.java
│       │   │               │   │   │   │   ├── OdpsAddFileStatement.java
│       │   │               │   │   │   │   ├── OdpsAddStatisticStatement.java
│       │   │               │   │   │   │   ├── OdpsAddTableStatement.java
│       │   │               │   │   │   │   ├── OdpsAddUserStatement.java
│       │   │               │   │   │   │   ├── OdpsAlterTableChangeOwner.java
│       │   │               │   │   │   │   ├── OdpsAlterTableSetChangeLogs.java
│       │   │               │   │   │   │   ├── OdpsAlterTableSetFileFormat.java
│       │   │               │   │   │   │   ├── OdpsCopyStmt.java
│       │   │               │   │   │   │   ├── OdpsCountStatement.java
│       │   │               │   │   │   │   ├── OdpsCreateTableStatement.java
│       │   │               │   │   │   │   ├── OdpsDeclareVariableStatement.java
│       │   │               │   │   │   │   ├── OdpsExstoreStatement.java
│       │   │               │   │   │   │   ├── OdpsGrantStmt.java
│       │   │               │   │   │   │   ├── OdpsInstallPackageStatement.java
│       │   │               │   │   │   │   ├── OdpsListStmt.java
│       │   │               │   │   │   │   ├── OdpsNewExpr.java
│       │   │               │   │   │   │   ├── OdpsObject.java
│       │   │               │   │   │   │   ├── OdpsObjectImpl.java
│       │   │               │   │   │   │   ├── OdpsPAIStmt.java
│       │   │               │   │   │   │   ├── OdpsQueryAliasStatement.java
│       │   │               │   │   │   │   ├── OdpsReadStatement.java
│       │   │               │   │   │   │   ├── OdpsRemoveStatisticStatement.java
│       │   │               │   │   │   │   ├── OdpsRemoveUserStatement.java
│       │   │               │   │   │   │   ├── OdpsRestoreStatement.java
│       │   │               │   │   │   │   ├── OdpsSelectQueryBlock.java
│       │   │               │   │   │   │   ├── OdpsSetLabelStatement.java
│       │   │               │   │   │   │   ├── OdpsShowChangelogsStatement.java
│       │   │               │   │   │   │   ├── OdpsShowGrantsStmt.java
│       │   │               │   │   │   │   ├── OdpsStatementImpl.java
│       │   │               │   │   │   │   ├── OdpsStatisticClause.java
│       │   │               │   │   │   │   ├── OdpsTransformExpr.java
│       │   │               │   │   │   │   ├── OdpsUDTFSQLSelectItem.java
│       │   │               │   │   │   │   ├── OdpsUndoTableStatement.java
│       │   │               │   │   │   │   └── OdpsUnloadStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── OdpsCreateTableParser.java
│       │   │               │   │   │   │   ├── OdpsExprParser.java
│       │   │               │   │   │   │   ├── OdpsLexer.java
│       │   │               │   │   │   │   ├── OdpsSelectParser.java
│       │   │               │   │   │   │   └── OdpsStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── OdpsASTVisitor.java
│       │   │               │   │   │       ├── OdpsASTVisitorAdapter.java
│       │   │               │   │   │       ├── OdpsOutputVisitor.java
│       │   │               │   │   │       └── OdpsSchemaStatVisitor.java
│       │   │               │   │   ├── oracle/
│       │   │               │   │   │   ├── Oracle.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── OracleDataTypeIntervalDay.java
│       │   │               │   │   │   │   ├── OracleDataTypeIntervalYear.java
│       │   │               │   │   │   │   ├── OraclePartitionSingle.java
│       │   │               │   │   │   │   ├── OracleSQLObject.java
│       │   │               │   │   │   │   ├── OracleSQLObjectImpl.java
│       │   │               │   │   │   │   ├── OracleSegmentAttributes.java
│       │   │               │   │   │   │   ├── OracleSegmentAttributesImpl.java
│       │   │               │   │   │   │   ├── clause/
│       │   │               │   │   │   │   │   ├── CycleClause.java
│       │   │               │   │   │   │   │   ├── ModelClause.java
│       │   │               │   │   │   │   │   ├── OracleLobStorageClause.java
│       │   │               │   │   │   │   │   ├── OracleReturningClause.java
│       │   │               │   │   │   │   │   ├── OracleStorageClause.java
│       │   │               │   │   │   │   │   ├── OracleWithSubqueryEntry.java
│       │   │               │   │   │   │   │   ├── PartitionExtensionClause.java
│       │   │               │   │   │   │   │   ├── SampleClause.java
│       │   │               │   │   │   │   │   └── SearchClause.java
│       │   │               │   │   │   │   ├── expr/
│       │   │               │   │   │   │   │   ├── OracleAnalytic.java
│       │   │               │   │   │   │   │   ├── OracleAnalyticWindowing.java
│       │   │               │   │   │   │   │   ├── OracleArgumentExpr.java
│       │   │               │   │   │   │   │   ├── OracleBinaryDoubleExpr.java
│       │   │               │   │   │   │   │   ├── OracleBinaryFloatExpr.java
│       │   │               │   │   │   │   │   ├── OracleCursorExpr.java
│       │   │               │   │   │   │   │   ├── OracleDateTimeUnit.java
│       │   │               │   │   │   │   │   ├── OracleDatetimeExpr.java
│       │   │               │   │   │   │   │   ├── OracleExpr.java
│       │   │               │   │   │   │   │   ├── OracleIntervalExpr.java
│       │   │               │   │   │   │   │   ├── OracleIntervalType.java
│       │   │               │   │   │   │   │   ├── OracleIsOfTypeExpr.java
│       │   │               │   │   │   │   │   ├── OracleIsSetExpr.java
│       │   │               │   │   │   │   │   ├── OracleOuterExpr.java
│       │   │               │   │   │   │   │   ├── OracleRangeExpr.java
│       │   │               │   │   │   │   │   ├── OracleSysdateExpr.java
│       │   │               │   │   │   │   │   └── OracleTreatExpr.java
│       │   │               │   │   │   │   └── stmt/
│       │   │               │   │   │   │       ├── OracleAlterPackageStatement.java
│       │   │               │   │   │   │       ├── OracleAlterSessionStatement.java
│       │   │               │   │   │   │       ├── OracleAlterStatement.java
│       │   │               │   │   │   │       ├── OracleAlterSummaryStatement.java
│       │   │               │   │   │   │       ├── OracleAlterSynonymStatement.java
│       │   │               │   │   │   │       ├── OracleAlterTableDropPartition.java
│       │   │               │   │   │   │       ├── OracleAlterTableItem.java
│       │   │               │   │   │   │       ├── OracleAlterTableModify.java
│       │   │               │   │   │   │       ├── OracleAlterTableMoveTablespace.java
│       │   │               │   │   │   │       ├── OracleAlterTableRowMovement.java
│       │   │               │   │   │   │       ├── OracleAlterTableShrinkSpace.java
│       │   │               │   │   │   │       ├── OracleAlterTableSplitPartition.java
│       │   │               │   │   │   │       ├── OracleAlterTableTruncatePartition.java
│       │   │               │   │   │   │       ├── OracleAlterTablespaceAddDataFile.java
│       │   │               │   │   │   │       ├── OracleAlterTablespaceItem.java
│       │   │               │   │   │   │       ├── OracleAlterTablespaceStatement.java
│       │   │               │   │   │   │       ├── OracleAlterTriggerStatement.java
│       │   │               │   │   │   │       ├── OracleAlterViewStatement.java
│       │   │               │   │   │   │       ├── OracleCheck.java
│       │   │               │   │   │   │       ├── OracleConstraint.java
│       │   │               │   │   │   │       ├── OracleContinueStatement.java
│       │   │               │   │   │   │       ├── OracleCreateDatabaseDbLinkStatement.java
│       │   │               │   │   │   │       ├── OracleCreateIndexStatement.java
│       │   │               │   │   │   │       ├── OracleCreatePackageStatement.java
│       │   │               │   │   │   │       ├── OracleCreateSynonymStatement.java
│       │   │               │   │   │   │       ├── OracleCreateTableSpaceStatement.java
│       │   │               │   │   │   │       ├── OracleCreateTableStatement.java
│       │   │               │   │   │   │       ├── OracleCreateTypeStatement.java
│       │   │               │   │   │   │       ├── OracleDDLStatement.java
│       │   │               │   │   │   │       ├── OracleDeleteStatement.java
│       │   │               │   │   │   │       ├── OracleDropDbLinkStatement.java
│       │   │               │   │   │   │       ├── OracleDropPackageStatement.java
│       │   │               │   │   │   │       ├── OracleExecuteImmediateStatement.java
│       │   │               │   │   │   │       ├── OracleExitStatement.java
│       │   │               │   │   │   │       ├── OracleExplainStatement.java
│       │   │               │   │   │   │       ├── OracleFileSpecification.java
│       │   │               │   │   │   │       ├── OracleForStatement.java
│       │   │               │   │   │   │       ├── OracleForeignKey.java
│       │   │               │   │   │   │       ├── OracleGotoStatement.java
│       │   │               │   │   │   │       ├── OracleInsertStatement.java
│       │   │               │   │   │   │       ├── OracleLabelStatement.java
│       │   │               │   │   │   │       ├── OracleLobParameters.java
│       │   │               │   │   │   │       ├── OracleLockTableStatement.java
│       │   │               │   │   │   │       ├── OracleMultiInsertStatement.java
│       │   │               │   │   │   │       ├── OraclePipeRowStatement.java
│       │   │               │   │   │   │       ├── OraclePrimaryKey.java
│       │   │               │   │   │   │       ├── OracleRaiseStatement.java
│       │   │               │   │   │   │       ├── OracleRunStatement.java
│       │   │               │   │   │   │       ├── OracleSelectJoin.java
│       │   │               │   │   │   │       ├── OracleSelectPivotBase.java
│       │   │               │   │   │   │       ├── OracleSelectQueryBlock.java
│       │   │               │   │   │   │       ├── OracleSelectRestriction.java
│       │   │               │   │   │   │       ├── OracleSelectSubqueryTableSource.java
│       │   │               │   │   │   │       ├── OracleSelectTableReference.java
│       │   │               │   │   │   │       ├── OracleSelectTableSource.java
│       │   │               │   │   │   │       ├── OracleSetTransactionStatement.java
│       │   │               │   │   │   │       ├── OracleStatement.java
│       │   │               │   │   │   │       ├── OracleStatementImpl.java
│       │   │               │   │   │   │       ├── OracleSupplementalIdKey.java
│       │   │               │   │   │   │       ├── OracleSupplementalLogGrp.java
│       │   │               │   │   │   │       ├── OracleUnique.java
│       │   │               │   │   │   │       ├── OracleUpdateStatement.java
│       │   │               │   │   │   │       ├── OracleUsingIndexClause.java
│       │   │               │   │   │   │       └── OracleXmlColumnProperties.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── OracleCreateTableParser.java
│       │   │               │   │   │   │   ├── OracleExprParser.java
│       │   │               │   │   │   │   ├── OracleFunctionDataType.java
│       │   │               │   │   │   │   ├── OracleLexer.java
│       │   │               │   │   │   │   ├── OracleProcedureDataType.java
│       │   │               │   │   │   │   ├── OracleSelectParser.java
│       │   │               │   │   │   │   ├── OracleStatementParser.java
│       │   │               │   │   │   │   └── OracleUpdateParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── OracleASTParameterizedVisitor.java
│       │   │               │   │   │       ├── OracleASTVisitor.java
│       │   │               │   │   │       ├── OracleASTVisitorAdapter.java
│       │   │               │   │   │       ├── OracleEvalVisitor.java
│       │   │               │   │   │       ├── OracleExportParameterVisitor.java
│       │   │               │   │   │       ├── OracleOutputVisitor.java
│       │   │               │   │   │       ├── OracleParameterizedOutputVisitor.java
│       │   │               │   │   │       ├── OracleRowNumToLimit.java
│       │   │               │   │   │       ├── OracleSchemaStatVisitor.java
│       │   │               │   │   │       └── OracleToMySqlOutputVisitor.java
│       │   │               │   │   ├── oscar/
│       │   │               │   │   │   ├── Oscar.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── OscarObject.java
│       │   │               │   │   │   │   ├── OscarObjectImpl.java
│       │   │               │   │   │   │   ├── expr/
│       │   │               │   │   │   │   │   └── OscarExpr.java
│       │   │               │   │   │   │   └── stmt/
│       │   │               │   │   │   │       ├── OscarAlterSchemaStatement.java
│       │   │               │   │   │   │       ├── OscarAlterTableAlterColumnSetNotNull.java
│       │   │               │   │   │   │       ├── OscarConnectToStatement.java
│       │   │               │   │   │   │       ├── OscarCreateSchemaStatement.java
│       │   │               │   │   │   │       ├── OscarDeleteStatement.java
│       │   │               │   │   │   │       ├── OscarDropSchemaStatement.java
│       │   │               │   │   │   │       ├── OscarFunctionTableSource.java
│       │   │               │   │   │   │       ├── OscarInsertStatement.java
│       │   │               │   │   │   │       ├── OscarSelectQueryBlock.java
│       │   │               │   │   │   │       ├── OscarSelectStatement.java
│       │   │               │   │   │   │       ├── OscarShowStatement.java
│       │   │               │   │   │   │       ├── OscarStartTransactionStatement.java
│       │   │               │   │   │   │       ├── OscarStatement.java
│       │   │               │   │   │   │       └── OscarUpdateStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── OscarCreateTableParser.java
│       │   │               │   │   │   │   ├── OscarExprParser.java
│       │   │               │   │   │   │   ├── OscarLexer.java
│       │   │               │   │   │   │   └── OscarSelectParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── OscarASTVisitor.java
│       │   │               │   │   │       ├── OscarOutputVisitor.java
│       │   │               │   │   │       ├── OscarPermissionOutputVisitor.java
│       │   │               │   │   │       └── OscarStatementParser.java
│       │   │               │   │   ├── phoenix/
│       │   │               │   │   │   ├── Phoenix.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── PhoenixObject.java
│       │   │               │   │   │   │   ├── PhoenixStatementImpl.java
│       │   │               │   │   │   │   └── PhoenixUpsertStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── PhoenixExprParser.java
│       │   │               │   │   │   │   ├── PhoenixLexer.java
│       │   │               │   │   │   │   └── PhoenixStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── PhoenixASTVisitor.java
│       │   │               │   │   │       ├── PhoenixOutputVisitor.java
│       │   │               │   │   │       └── PhoenixSchemaStatVisitor.java
│       │   │               │   │   ├── postgresql/
│       │   │               │   │   │   ├── PG.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── PGSQLObject.java
│       │   │               │   │   │   │   ├── PGSQLObjectImpl.java
│       │   │               │   │   │   │   ├── expr/
│       │   │               │   │   │   │   │   ├── PGAttrExpr.java
│       │   │               │   │   │   │   │   ├── PGBoxExpr.java
│       │   │               │   │   │   │   │   ├── PGCharExpr.java
│       │   │               │   │   │   │   │   ├── PGCidrExpr.java
│       │   │               │   │   │   │   │   ├── PGCircleExpr.java
│       │   │               │   │   │   │   │   ├── PGDateField.java
│       │   │               │   │   │   │   │   ├── PGExpr.java
│       │   │               │   │   │   │   │   ├── PGExprImpl.java
│       │   │               │   │   │   │   │   ├── PGExtractExpr.java
│       │   │               │   │   │   │   │   ├── PGInetExpr.java
│       │   │               │   │   │   │   │   ├── PGLineSegmentsExpr.java
│       │   │               │   │   │   │   │   ├── PGMacAddrExpr.java
│       │   │               │   │   │   │   │   ├── PGPointExpr.java
│       │   │               │   │   │   │   │   ├── PGPolygonExpr.java
│       │   │               │   │   │   │   │   └── PGTypeCastExpr.java
│       │   │               │   │   │   │   └── stmt/
│       │   │               │   │   │   │       ├── PGAlterDatabaseStatement.java
│       │   │               │   │   │   │       ├── PGAlterSchemaStatement.java
│       │   │               │   │   │   │       ├── PGAlterTableAlterColumnSetNotNull.java
│       │   │               │   │   │   │       ├── PGAnalyzeStatement.java
│       │   │               │   │   │   │       ├── PGConnectToStatement.java
│       │   │               │   │   │   │       ├── PGCopyStatement.java
│       │   │               │   │   │   │       ├── PGCreateDatabaseStatement.java
│       │   │               │   │   │   │       ├── PGCreateExtensionStatement.java
│       │   │               │   │   │   │       ├── PGCreateSchemaStatement.java
│       │   │               │   │   │   │       ├── PGDeleteStatement.java
│       │   │               │   │   │   │       ├── PGDoStatement.java
│       │   │               │   │   │   │       ├── PGDropDatabaseStatement.java
│       │   │               │   │   │   │       ├── PGDropSchemaStatement.java
│       │   │               │   │   │   │       ├── PGEndTransactionStatement.java
│       │   │               │   │   │   │       ├── PGFunctionTableSource.java
│       │   │               │   │   │   │       ├── PGInsertStatement.java
│       │   │               │   │   │   │       ├── PGSQLStatement.java
│       │   │               │   │   │   │       ├── PGSelectQueryBlock.java
│       │   │               │   │   │   │       ├── PGSelectStatement.java
│       │   │               │   │   │   │       ├── PGShowStatement.java
│       │   │               │   │   │   │       ├── PGStartTransactionStatement.java
│       │   │               │   │   │   │       ├── PGUpdateStatement.java
│       │   │               │   │   │   │       └── PGVacuumStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── PGCreateTableParser.java
│       │   │               │   │   │   │   ├── PGExprParser.java
│       │   │               │   │   │   │   ├── PGLexer.java
│       │   │               │   │   │   │   ├── PGSQLStatementParser.java
│       │   │               │   │   │   │   └── PGSelectParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── PGASTVisitor.java
│       │   │               │   │   │       ├── PGASTVisitorAdapter.java
│       │   │               │   │   │       ├── PGEvalVisitor.java
│       │   │               │   │   │       ├── PGExportParameterVisitor.java
│       │   │               │   │   │       ├── PGOutputVisitor.java
│       │   │               │   │   │       └── PGSchemaStatVisitor.java
│       │   │               │   │   ├── presto/
│       │   │               │   │   │   ├── Presto.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── PrestoColumnConstraint.java
│       │   │               │   │   │   │   ├── PrestoColumnWith.java
│       │   │               │   │   │   │   ├── PrestoDateTimeExpr.java
│       │   │               │   │   │   │   ├── PrestoObject.java
│       │   │               │   │   │   │   └── stmt/
│       │   │               │   │   │   │       ├── PrestoAlterFunctionStatement.java
│       │   │               │   │   │   │       ├── PrestoAlterSchemaStatement.java
│       │   │               │   │   │   │       ├── PrestoCreateTableStatement.java
│       │   │               │   │   │   │       ├── PrestoDeallocatePrepareStatement.java
│       │   │               │   │   │   │       ├── PrestoExecuteStatement.java
│       │   │               │   │   │   │       ├── PrestoPrepareStatement.java
│       │   │               │   │   │   │       ├── PrestoSQLStatement.java
│       │   │               │   │   │   │       └── PrestoSelectStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── PrestoCreateTableParser.java
│       │   │               │   │   │   │   ├── PrestoExprParser.java
│       │   │               │   │   │   │   ├── PrestoLexer.java
│       │   │               │   │   │   │   ├── PrestoSelectParser.java
│       │   │               │   │   │   │   └── PrestoStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── PrestoASTVisitor.java
│       │   │               │   │   │       └── PrestoOutputVisitor.java
│       │   │               │   │   ├── redshift/
│       │   │               │   │   │   ├── Redshift.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── RedshiftCreateTableParser.java
│       │   │               │   │   │   │   ├── RedshiftExprParser.java
│       │   │               │   │   │   │   ├── RedshiftLexer.java
│       │   │               │   │   │   │   ├── RedshiftSelectParser.java
│       │   │               │   │   │   │   └── RedshiftStatementParser.java
│       │   │               │   │   │   ├── stmt/
│       │   │               │   │   │   │   ├── RedshiftColumnConstraint.java
│       │   │               │   │   │   │   ├── RedshiftColumnEncode.java
│       │   │               │   │   │   │   ├── RedshiftColumnKey.java
│       │   │               │   │   │   │   ├── RedshiftCreateTableStatement.java
│       │   │               │   │   │   │   ├── RedshiftObject.java
│       │   │               │   │   │   │   ├── RedshiftObjectImpl.java
│       │   │               │   │   │   │   ├── RedshiftSelectQueryBlock.java
│       │   │               │   │   │   │   └── RedshiftSortKey.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── RedshiftASTVisitor.java
│       │   │               │   │   │       └── RedshiftOutputVisitor.java
│       │   │               │   │   ├── snowflake/
│       │   │               │   │   │   ├── SnowflakeCreateTableParser.java
│       │   │               │   │   │   ├── SnowflakeExprParser.java
│       │   │               │   │   │   ├── SnowflakeLexer.java
│       │   │               │   │   │   ├── SnowflakeSelectParser.java
│       │   │               │   │   │   └── SnowflakeStatementParser.java
│       │   │               │   │   ├── spark/
│       │   │               │   │   │   ├── Spark.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── SparkCreateTableStatement.java
│       │   │               │   │   │   │   └── stmt/
│       │   │               │   │   │   │       ├── SparkCacheTableStatement.java
│       │   │               │   │   │   │       └── SparkCreateScanStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── SparkCreateTableParser.java
│       │   │               │   │   │   │   ├── SparkExprParser.java
│       │   │               │   │   │   │   ├── SparkLexer.java
│       │   │               │   │   │   │   ├── SparkSelectParser.java
│       │   │               │   │   │   │   └── SparkStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── SparkASTVisitor.java
│       │   │               │   │   │       ├── SparkOutputASTVisitor.java
│       │   │               │   │   │       └── SparkSchemaStatASTVisitor.java
│       │   │               │   │   ├── sqlite/
│       │   │               │   │   │   ├── SQLite.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── SQLiteAttachStatement.java
│       │   │               │   │   │   │   ├── SQLiteDetachStatement.java
│       │   │               │   │   │   │   ├── SQLitePragmaStatement.java
│       │   │               │   │   │   │   ├── SQLiteReindexStatement.java
│       │   │               │   │   │   │   └── SQLiteVacuumStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── SQLiteExprParser.java
│       │   │               │   │   │   │   ├── SQLiteLexer.java
│       │   │               │   │   │   │   ├── SQLiteSelectParser.java
│       │   │               │   │   │   │   └── SQLiteStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── SQLiteASTVisitor.java
│       │   │               │   │   │       ├── SQLiteASTVisitorAdapter.java
│       │   │               │   │   │       ├── SQLiteEvalVisitor.java
│       │   │               │   │   │       ├── SQLiteOutputVisitor.java
│       │   │               │   │   │       └── SQLiteSchemaStatVisitor.java
│       │   │               │   │   ├── sqlserver/
│       │   │               │   │   │   ├── SqlServer.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── SQLServerObject.java
│       │   │               │   │   │   │   ├── SQLServerObjectImpl.java
│       │   │               │   │   │   │   ├── SQLServerOutput.java
│       │   │               │   │   │   │   ├── SQLServerSelectQueryBlock.java
│       │   │               │   │   │   │   ├── SQLServerStatement.java
│       │   │               │   │   │   │   ├── SQLServerStatementImpl.java
│       │   │               │   │   │   │   ├── expr/
│       │   │               │   │   │   │   │   ├── SQLServerExpr.java
│       │   │               │   │   │   │   │   └── SQLServerObjectReferenceExpr.java
│       │   │               │   │   │   │   └── stmt/
│       │   │               │   │   │   │       ├── SQLServerExecStatement.java
│       │   │               │   │   │   │       ├── SQLServerInsertStatement.java
│       │   │               │   │   │   │       ├── SQLServerRollbackStatement.java
│       │   │               │   │   │   │       ├── SQLServerSetTransactionIsolationLevelStatement.java
│       │   │               │   │   │   │       ├── SQLServerThrowStatement.java
│       │   │               │   │   │   │       ├── SQLServerTryCatchStatement.java
│       │   │               │   │   │   │       ├── SQLServerUpdateStatement.java
│       │   │               │   │   │   │       └── SQLServerWaitForStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── SQLServerExprParser.java
│       │   │               │   │   │   │   ├── SQLServerLexer.java
│       │   │               │   │   │   │   ├── SQLServerSelectParser.java
│       │   │               │   │   │   │   └── SQLServerStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── MSSQLServerExportParameterVisitor.java
│       │   │               │   │   │       ├── SQLServerASTVisitor.java
│       │   │               │   │   │       ├── SQLServerASTVisitorAdapter.java
│       │   │               │   │   │       ├── SQLServerEvalVisitor.java
│       │   │               │   │   │       ├── SQLServerOutputVisitor.java
│       │   │               │   │   │       └── SQLServerSchemaStatVisitor.java
│       │   │               │   │   ├── starrocks/
│       │   │               │   │   │   ├── StarRocks.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── StarRocksAggregateKey.java
│       │   │               │   │   │   │   ├── StarRocksDuplicateKey.java
│       │   │               │   │   │   │   ├── StarRocksIndexDefinition.java
│       │   │               │   │   │   │   ├── StarRocksObject.java
│       │   │               │   │   │   │   └── statement/
│       │   │               │   │   │   │       ├── StarRocksCreateResourceStatement.java
│       │   │               │   │   │   │       └── StarRocksCreateTableStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── StarRocksCreateTableParser.java
│       │   │               │   │   │   │   ├── StarRocksExprParser.java
│       │   │               │   │   │   │   ├── StarRocksLexer.java
│       │   │               │   │   │   │   ├── StarRocksSelectParser.java
│       │   │               │   │   │   │   └── StarRocksStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── StarRocksASTVisitor.java
│       │   │               │   │   │       └── StarRocksOutputVisitor.java
│       │   │               │   │   ├── supersql/
│       │   │               │   │   │   ├── SuperSql.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   └── SuperSqlObject.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── SuperSqlCreateTableParser.java
│       │   │               │   │   │   │   ├── SuperSqlExprParser.java
│       │   │               │   │   │   │   ├── SuperSqlLexer.java
│       │   │               │   │   │   │   ├── SuperSqlSelectParser.java
│       │   │               │   │   │   │   └── SuperSqlStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── SuperSqlASTVisitor.java
│       │   │               │   │   │       └── SuperSqlOutputVisitor.java
│       │   │               │   │   ├── synapse/
│       │   │               │   │   │   ├── Synapse.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   └── stmt/
│       │   │               │   │   │   │       └── SynapseCreateTableStatement.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── SynapseCreateTableParser.java
│       │   │               │   │   │   │   ├── SynapseExprParser.java
│       │   │               │   │   │   │   ├── SynapseLexer.java
│       │   │               │   │   │   │   ├── SynapseSelectParser.java
│       │   │               │   │   │   │   └── SynapseStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── SynapseASTVisitor.java
│       │   │               │   │   │       └── SynapseOutputVisitor.java
│       │   │               │   │   ├── teradata/
│       │   │               │   │   │   ├── TeraData.java
│       │   │               │   │   │   ├── ast/
│       │   │               │   │   │   │   ├── TDCreateTableStatement.java
│       │   │               │   │   │   │   ├── TDDateDataType.java
│       │   │               │   │   │   │   ├── TDNormalize.java
│       │   │               │   │   │   │   ├── TDObject.java
│       │   │               │   │   │   │   └── TDSelectQueryBlock.java
│       │   │               │   │   │   ├── parser/
│       │   │               │   │   │   │   ├── TDCreateTableParser.java
│       │   │               │   │   │   │   ├── TDExprParser.java
│       │   │               │   │   │   │   ├── TDLexer.java
│       │   │               │   │   │   │   ├── TDSelectParser.java
│       │   │               │   │   │   │   └── TDStatementParser.java
│       │   │               │   │   │   └── visitor/
│       │   │               │   │   │       ├── TDASTVisitor.java
│       │   │               │   │   │       └── TDOutputVisitor.java
│       │   │               │   │   └── transact/
│       │   │               │   │       └── ast/
│       │   │               │   │           └── TransactSQLObject.java
│       │   │               │   ├── parser/
│       │   │               │   │   ├── CharTypes.java
│       │   │               │   │   ├── DialectFeature.java
│       │   │               │   │   ├── EOFParserException.java
│       │   │               │   │   ├── InsertColumnsCache.java
│       │   │               │   │   ├── Keywords.java
│       │   │               │   │   ├── LayoutCharacters.java
│       │   │               │   │   ├── Lexer.java
│       │   │               │   │   ├── NotAllowCommentException.java
│       │   │               │   │   ├── ParserException.java
│       │   │               │   │   ├── SQLCreateTableParser.java
│       │   │               │   │   ├── SQLDDLParser.java
│       │   │               │   │   ├── SQLExprParser.java
│       │   │               │   │   ├── SQLInsertValueHandler.java
│       │   │               │   │   ├── SQLParseException.java
│       │   │               │   │   ├── SQLParser.java
│       │   │               │   │   ├── SQLParserFeature.java
│       │   │               │   │   ├── SQLParserUtils.java
│       │   │               │   │   ├── SQLSelectListCache.java
│       │   │               │   │   ├── SQLSelectParser.java
│       │   │               │   │   ├── SQLStatementParser.java
│       │   │               │   │   ├── SQLType.java
│       │   │               │   │   ├── SymbolTable.java
│       │   │               │   │   └── Token.java
│       │   │               │   ├── repository/
│       │   │               │   │   ├── Schema.java
│       │   │               │   │   ├── SchemaObject.java
│       │   │               │   │   ├── SchemaObjectType.java
│       │   │               │   │   ├── SchemaRepository.java
│       │   │               │   │   ├── SchemaResolveVisitor.java
│       │   │               │   │   ├── SchemaResolveVisitorFactory.java
│       │   │               │   │   └── function/
│       │   │               │   │       ├── Function.java
│       │   │               │   │       ├── FunctionHandler.java
│       │   │               │   │       ├── FunctionType.java
│       │   │               │   │       ├── SignatureUtils.java
│       │   │               │   │       └── Signatures.java
│       │   │               │   ├── template/
│       │   │               │   │   └── SQLSelectQueryTemplate.java
│       │   │               │   └── visitor/
│       │   │               │       ├── ExportParameterVisitor.java
│       │   │               │       ├── ExportParameterVisitorUtils.java
│       │   │               │       ├── ExportParameterizedOutputVisitor.java
│       │   │               │       ├── ParameterizedOutputVisitorUtils.java
│       │   │               │       ├── ParameterizedVisitor.java
│       │   │               │       ├── PrintableVisitor.java
│       │   │               │       ├── SQLASTOutputVisitor.java
│       │   │               │       ├── SQLASTOutputVisitorBinaryOpSupport.java
│       │   │               │       ├── SQLASTParameterizedVisitor.java
│       │   │               │       ├── SQLASTVisitor.java
│       │   │               │       ├── SQLASTVisitorAdapter.java
│       │   │               │       ├── SQLDataTypeValidator.java
│       │   │               │       ├── SQLEvalVisitor.java
│       │   │               │       ├── SQLEvalVisitorImpl.java
│       │   │               │       ├── SQLEvalVisitorUtils.java
│       │   │               │       ├── SQLSubQueryGroupVisitor.java
│       │   │               │       ├── SQLTableAliasCollectVisitor.java
│       │   │               │       ├── SQLTransformVisitor.java
│       │   │               │       ├── SchemaStatVisitor.java
│       │   │               │       ├── VisitorFeature.java
│       │   │               │       └── functions/
│       │   │               │           ├── Ascii.java
│       │   │               │           ├── Bin.java
│       │   │               │           ├── BitLength.java
│       │   │               │           ├── Char.java
│       │   │               │           ├── Concat.java
│       │   │               │           ├── DateAdd.java
│       │   │               │           ├── Elt.java
│       │   │               │           ├── Function.java
│       │   │               │           ├── Greatest.java
│       │   │               │           ├── Hex.java
│       │   │               │           ├── If.java
│       │   │               │           ├── IfNull.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
│       │   │               │           ├── Replace.java
│       │   │               │           ├── Reverse.java
│       │   │               │           ├── Right.java
│       │   │               │           ├── Rpad.java
│       │   │               │           ├── Substring.java
│       │   │               │           ├── ToChar.java
│       │   │               │           ├── ToDate.java
│       │   │               │           ├── Trim.java
│       │   │               │           ├── Ucase.java
│       │   │               │           └── Unhex.java
│       │   │               ├── stat/
│       │   │               │   ├── DataSourceMonitorable.java
│       │   │               │   ├── DruidDataSourceStatManager.java
│       │   │               │   ├── DruidDataSourceStatManagerMBean.java
│       │   │               │   ├── DruidStatManagerFacade.java
│       │   │               │   ├── DruidStatService.java
│       │   │               │   ├── DruidStatServiceMBean.java
│       │   │               │   ├── JdbcConnectionStat.java
│       │   │               │   ├── JdbcConnectionStatMBean.java
│       │   │               │   ├── JdbcDataSourceStat.java
│       │   │               │   ├── JdbcDataSourceStatMBean.java
│       │   │               │   ├── JdbcResultSetStat.java
│       │   │               │   ├── JdbcResultSetStatMBean.java
│       │   │               │   ├── JdbcSqlStat.java
│       │   │               │   ├── JdbcSqlStatMBean.java
│       │   │               │   ├── JdbcSqlStatValue.java
│       │   │               │   ├── JdbcStatContext.java
│       │   │               │   ├── JdbcStatManager.java
│       │   │               │   ├── JdbcStatManagerFactoryBean.java
│       │   │               │   ├── JdbcStatManagerMBean.java
│       │   │               │   ├── JdbcStatementStat.java
│       │   │               │   ├── JdbcStatementStatMBean.java
│       │   │               │   ├── JdbcTraceManager.java
│       │   │               │   ├── JdbcTraceManagerMBean.java
│       │   │               │   └── TableStat.java
│       │   │               ├── support/
│       │   │               │   ├── calcite/
│       │   │               │   │   ├── CalciteMySqlNodeVisitor.java
│       │   │               │   │   ├── CalciteSqlBasicCall.java
│       │   │               │   │   └── TDDLSqlSelect.java
│       │   │               │   ├── clickhouse/
│       │   │               │   │   ├── BalancedClickhouseDriver.java
│       │   │               │   │   └── BalancedClickhouseDriverNative.java
│       │   │               │   ├── hibernate/
│       │   │               │   │   └── DruidConnectionProvider.java
│       │   │               │   ├── http/
│       │   │               │   │   ├── AbstractWebStatImpl.java
│       │   │               │   │   ├── DruidWebSecurityProvider.java
│       │   │               │   │   ├── MonitorClientContextListener.java
│       │   │               │   │   ├── ResourceServlet.java
│       │   │               │   │   ├── StatViewFilter.java
│       │   │               │   │   ├── StatViewServlet.java
│       │   │               │   │   ├── WebStatFilter.java
│       │   │               │   │   ├── stat/
│       │   │               │   │   │   ├── WebAppStat.java
│       │   │               │   │   │   ├── WebAppStatManager.java
│       │   │               │   │   │   ├── WebAppStatUtils.java
│       │   │               │   │   │   ├── WebAppStatValue.java
│       │   │               │   │   │   ├── WebRequestStat.java
│       │   │               │   │   │   ├── WebSessionStat.java
│       │   │               │   │   │   ├── WebSessionStatValue.java
│       │   │               │   │   │   ├── WebURIStat.java
│       │   │               │   │   │   └── WebURIStatValue.java
│       │   │               │   │   └── util/
│       │   │               │   │       ├── IPAddress.java
│       │   │               │   │       └── IPRange.java
│       │   │               │   ├── ibatis/
│       │   │               │   │   ├── DruidDataSourceFactory.java
│       │   │               │   │   ├── IbatisUtils.java
│       │   │               │   │   ├── SpringIbatisBeanNameAutoProxyCreator.java
│       │   │               │   │   ├── SpringIbatisBeanNameAutoProxyCreatorMBean.java
│       │   │               │   │   ├── SpringIbatisBeanTypeAutoProxyCreator.java
│       │   │               │   │   ├── SpringIbatisBeanTypeAutoProxyCreatorMBean.java
│       │   │               │   │   ├── SqlMapClientImplWrapper.java
│       │   │               │   │   ├── SqlMapClientWrapper.java
│       │   │               │   │   ├── SqlMapExecutorWrapper.java
│       │   │               │   │   └── SqlMapSessionWrapper.java
│       │   │               │   ├── jakarta/
│       │   │               │   │   ├── AbstractWebStatImpl.java
│       │   │               │   │   ├── MonitorClientContextListener.java
│       │   │               │   │   ├── ResourceServlet.java
│       │   │               │   │   ├── StatViewFilter.java
│       │   │               │   │   ├── StatViewServlet.java
│       │   │               │   │   └── WebStatFilter.java
│       │   │               │   ├── 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
│       │   │               │   ├── metrics/
│       │   │               │   │   └── MetricCollector.java
│       │   │               │   ├── monitor/
│       │   │               │   │   ├── MonitorClient.java
│       │   │               │   │   ├── MonitorContext.java
│       │   │               │   │   ├── MonitorServlet.java
│       │   │               │   │   ├── annotation/
│       │   │               │   │   │   ├── AggregateType.java
│       │   │               │   │   │   ├── MField.java
│       │   │               │   │   │   └── MTable.java
│       │   │               │   │   ├── dao/
│       │   │               │   │   │   ├── MonitorDao.java
│       │   │               │   │   │   └── MonitorDaoJdbcImpl.java
│       │   │               │   │   └── entity/
│       │   │               │   │       ├── MonitorApp.java
│       │   │               │   │       ├── MonitorCluster.java
│       │   │               │   │       └── MonitorInstance.java
│       │   │               │   ├── opds/
│       │   │               │   │   └── udf/
│       │   │               │   │       ├── ExportColumns.java
│       │   │               │   │       ├── ExportConditionColumns.java
│       │   │               │   │       ├── ExportConditions.java
│       │   │               │   │       ├── ExportSelectListColumns.java
│       │   │               │   │       ├── ExportTables.java
│       │   │               │   │       ├── MetaSqlExtract.java
│       │   │               │   │       ├── SqlCodeStat.java
│       │   │               │   │       ├── SqlFormat.java
│       │   │               │   │       ├── SqlParams.java
│       │   │               │   │       ├── SqlParamsFill.java
│       │   │               │   │       ├── SqlPattern.java
│       │   │               │   │       ├── SqlPatternHash.java
│       │   │               │   │       ├── SqlSyntaxCheck.java
│       │   │               │   │       └── SqlTypeUDF.java
│       │   │               │   ├── profile/
│       │   │               │   │   ├── ProfileEntry.java
│       │   │               │   │   ├── ProfileEntryKey.java
│       │   │               │   │   ├── ProfileEntryReqStat.java
│       │   │               │   │   ├── ProfileEntryStat.java
│       │   │               │   │   ├── ProfileEntryStatValue.java
│       │   │               │   │   ├── ProfileStat.java
│       │   │               │   │   └── Profiler.java
│       │   │               │   ├── quartz/
│       │   │               │   │   └── DruidQuartzConnectionProvider.java
│       │   │               │   ├── simplejndi/
│       │   │               │   │   └── DruidDataSourceConverter.java
│       │   │               │   └── spring/
│       │   │               │       ├── DruidLobCreator.java
│       │   │               │       ├── DruidLobHandler.java
│       │   │               │       ├── DruidNativeJdbcExtractor.java
│       │   │               │       ├── MBeanServerFactoryBean.java
│       │   │               │       ├── mvc/
│       │   │               │       │   └── StatHandlerInterceptor.java
│       │   │               │       └── stat/
│       │   │               │           ├── BeanTypeAutoProxyCreator.java
│       │   │               │           ├── DruidStatInterceptor.java
│       │   │               │           ├── SpringMethodInfo.java
│       │   │               │           ├── SpringMethodStat.java
│       │   │               │           ├── SpringMethodStatValue.java
│       │   │               │           ├── SpringStat.java
│       │   │               │           ├── SpringStatManager.java
│       │   │               │           ├── SpringStatUtils.java
│       │   │               │           ├── annotation/
│       │   │               │           │   ├── Stat.java
│       │   │               │           │   ├── StatAnnotationAdvisor.java
│       │   │               │           │   └── StatAnnotationBeanPostProcessor.java
│       │   │               │           └── config/
│       │   │               │               ├── DruidStatBeanDefinitionParser.java
│       │   │               │               └── DruidStatNamespaceHandler.java
│       │   │               ├── util/
│       │   │               │   ├── Base64.java
│       │   │               │   ├── ConcurrentLruCache.java
│       │   │               │   ├── DaemonThreadFactory.java
│       │   │               │   ├── DruidDataSourceUtils.java
│       │   │               │   ├── DruidPasswordCallback.java
│       │   │               │   ├── DruidWebUtils.java
│       │   │               │   ├── FnvHash.java
│       │   │               │   ├── H2Utils.java
│       │   │               │   ├── HexBin.java
│       │   │               │   ├── Histogram.java
│       │   │               │   ├── HiveUtils.java
│       │   │               │   ├── JMXUtils.java
│       │   │               │   ├── JdbcConstants.java
│       │   │               │   ├── JdbcSqlStatUtils.java
│       │   │               │   ├── JdbcUtils.java
│       │   │               │   ├── LRUCache.java
│       │   │               │   ├── ListDG.java
│       │   │               │   ├── MapComparator.java
│       │   │               │   ├── MySqlUtils.java
│       │   │               │   ├── OdpsUtils.java
│       │   │               │   ├── OracleUtils.java
│       │   │               │   ├── PGUtils.java
│       │   │               │   ├── PatternMatcher.java
│       │   │               │   ├── ResultSetConsumer.java
│       │   │               │   ├── ServletPathMatcher.java
│       │   │               │   ├── StringUtils.java
│       │   │               │   ├── TransactionInfo.java
│       │   │               │   ├── Utils.java
│       │   │               │   ├── jdbc/
│       │   │               │   │   ├── ConnectionBase.java
│       │   │               │   │   ├── LocalResultSet.java
│       │   │               │   │   ├── PreparedStatementBase.java
│       │   │               │   │   ├── ResultSetBase.java
│       │   │               │   │   ├── ResultSetMetaDataBase.java
│       │   │               │   │   └── StatementBase.java
│       │   │               │   └── lang/
│       │   │               │       └── Consumer.java
│       │   │               └── wall/
│       │   │                   ├── Violation.java
│       │   │                   ├── WallCheckResult.java
│       │   │                   ├── WallConfig.java
│       │   │                   ├── WallConfigMBean.java
│       │   │                   ├── WallContext.java
│       │   │                   ├── WallDenyStat.java
│       │   │                   ├── WallFilter.java
│       │   │                   ├── WallFilterMBean.java
│       │   │                   ├── WallFunctionStat.java
│       │   │                   ├── WallFunctionStatValue.java
│       │   │                   ├── WallProvider.java
│       │   │                   ├── WallProviderCreator.java
│       │   │                   ├── WallProviderStatLogger.java
│       │   │                   ├── WallProviderStatLoggerAdapter.java
│       │   │                   ├── WallProviderStatLoggerImpl.java
│       │   │                   ├── WallProviderStatValue.java
│       │   │                   ├── WallSQLException.java
│       │   │                   ├── WallSqlFunctionStat.java
│       │   │                   ├── WallSqlStat.java
│       │   │                   ├── WallSqlStatValue.java
│       │   │                   ├── WallSqlTableStat.java
│       │   │                   ├── WallTableStat.java
│       │   │                   ├── WallTableStatValue.java
│       │   │                   ├── WallUpdateCheckHandler.java
│       │   │                   ├── WallUpdateCheckItem.java
│       │   │                   ├── WallUtils.java
│       │   │                   ├── WallVisitor.java
│       │   │                   ├── spi/
│       │   │                   │   ├── CKWallProvider.java
│       │   │                   │   ├── ClickhouseWallVisitor.java
│       │   │                   │   ├── DB2WallProvider.java
│       │   │                   │   ├── DB2WallVisitor.java
│       │   │                   │   ├── MySqlWallProvider.java
│       │   │                   │   ├── MySqlWallVisitor.java
│       │   │                   │   ├── OracleWallProvider.java
│       │   │                   │   ├── OracleWallVisitor.java
│       │   │                   │   ├── PGWallProvider.java
│       │   │                   │   ├── PGWallVisitor.java
│       │   │                   │   ├── SQLServerWallProvider.java
│       │   │                   │   ├── SQLServerWallVisitor.java
│       │   │                   │   ├── SQLiteWallProvider.java
│       │   │                   │   ├── SQLiteWallVisitor.java
│       │   │                   │   ├── WallVisitorBase.java
│       │   │                   │   └── WallVisitorUtils.java
│       │   │                   └── violation/
│       │   │                       ├── ErrorCode.java
│       │   │                       ├── IllegalSQLObjectViolation.java
│       │   │                       └── SyntaxErrorViolation.java
│       │   ├── resources/
│       │   │   ├── META-INF/
│       │   │   │   ├── druid/
│       │   │   │   │   ├── parser/
│       │   │   │   │   │   ├── athena/
│       │   │   │   │   │   │   └── dialect.properties
│       │   │   │   │   │   ├── bigquery/
│       │   │   │   │   │   │   ├── builtin_datatypes
│       │   │   │   │   │   │   └── dialect.properties
│       │   │   │   │   │   ├── clickhouse/
│       │   │   │   │   │   │   └── dialect.properties
│       │   │   │   │   │   ├── doris/
│       │   │   │   │   │   │   ├── dialect.properties
│       │   │   │   │   │   │   └── keywords
│       │   │   │   │   │   ├── h2/
│       │   │   │   │   │   │   └── dialect.properties
│       │   │   │   │   │   ├── hive/
│       │   │   │   │   │   │   ├── alias_keywords
│       │   │   │   │   │   │   ├── builtin_datatypes
│       │   │   │   │   │   │   ├── dialect.properties
│       │   │   │   │   │   │   └── keywords
│       │   │   │   │   │   ├── hologres/
│       │   │   │   │   │   │   ├── alias_keywords
│       │   │   │   │   │   │   ├── dialect.properties
│       │   │   │   │   │   │   └── keywords
│       │   │   │   │   │   ├── impala/
│       │   │   │   │   │   │   ├── alias_keywords
│       │   │   │   │   │   │   ├── builtin_datatypes
│       │   │   │   │   │   │   ├── dialect.properties
│       │   │   │   │   │   │   └── keywords
│       │   │   │   │   │   ├── mysql/
│       │   │   │   │   │   │   ├── builtin_datatypes
│       │   │   │   │   │   │   ├── dialect.properties
│       │   │   │   │   │   │   └── keywords
│       │   │   │   │   │   ├── odps/
│       │   │   │   │   │   │   ├── alias_keywords
│       │   │   │   │   │   │   ├── dialect.properties
│       │   │   │   │   │   │   └── keywords
│       │   │   │   │   │   ├── oracle/
│       │   │   │   │   │   │   ├── builtin_aggreagte_functions
│       │   │   │   │   │   │   ├── builtin_functions
│       │   │   │   │   │   │   ├── builtin_tables
│       │   │   │   │   │   │   ├── dialect.properties
│       │   │   │   │   │   │   └── keywords
│       │   │   │   │   │   ├── postgresql/
│       │   │   │   │   │   │   └── keywords
│       │   │   │   │   │   ├── spark/
│       │   │   │   │   │   │   ├── alias_keywords
│       │   │   │   │   │   │   ├── builtin_datatypes
│       │   │   │   │   │   │   ├── dialect.properties
│       │   │   │   │   │   │   └── keywords
│       │   │   │   │   │   ├── sqlite/
│       │   │   │   │   │   │   ├── builtin_datatypes
│       │   │   │   │   │   │   └── dialect.properties
│       │   │   │   │   │   ├── sqlserver/
│       │   │   │   │   │   │   └── dialect.properties
│       │   │   │   │   │   ├── starrocks/
│       │   │   │   │   │   │   ├── dialect.properties
│       │   │   │   │   │   │   └── keywords
│       │   │   │   │   │   └── synapse/
│       │   │   │   │   │       └── dialect.properties
│       │   │   │   │   └── wall/
│       │   │   │   │       ├── clickhouse/
│       │   │   │   │       │   ├── deny-function.txt
│       │   │   │   │       │   └── deny-schema.txt
│       │   │   │   │       ├── mysql/
│       │   │   │   │       │   ├── deny-function.txt
│       │   │   │   │       │   ├── deny-schema.txt
│       │   │   │   │       │   ├── deny-variant.txt
│       │   │   │   │       │   ├── permit-function.txt
│       │   │   │   │       │   └── permit-variant.txt
│       │   │   │   │       ├── oracle/
│       │   │   │   │       │   ├── deny-function.txt
│       │   │   │   │       │   ├── deny-object.txt
│       │   │   │   │       │   ├── deny-schema.txt
│       │   │   │   │       │   ├── deny-table.txt
│       │   │   │   │       │   ├── deny-variant.txt
│       │   │   │   │       │   └── permit-function.txt
│       │   │   │   │       ├── postgres/
│       │   │   │   │       │   ├── deny-function.txt
│       │   │   │   │       │   └── deny-table.txt
│       │   │   │   │       └── sqlserver/
│       │   │   │   │           ├── deny-function.txt
│       │   │   │   │           ├── deny-object.txt
│       │   │   │   │           ├── deny-schema.txt
│       │   │   │   │           ├── deny-table.txt
│       │   │   │   │           └── deny-variant.txt
│       │   │   │   ├── druid-driver.properties
│       │   │   │   ├── druid-filter.properties
│       │   │   │   ├── services/
│       │   │   │   │   └── java.sql.Driver
│       │   │   │   ├── spring.handlers
│       │   │   │   ├── spring.schemas
│       │   │   │   └── stat.xsd
│       │   │   ├── support/
│       │   │   │   ├── http/
│       │   │   │   │   └── resources/
│       │   │   │   │       ├── activeConnectionStackTrace.html
│       │   │   │   │       ├── api.html
│       │   │   │   │       ├── connectionInfo.html
│       │   │   │   │       ├── css/
│       │   │   │   │       │   └── style.css
│       │   │   │   │       ├── datasource.html
│       │   │   │   │       ├── header.html
│       │   │   │   │       ├── index.html
│       │   │   │   │       ├── js/
│       │   │   │   │       │   ├── common.js
│       │   │   │   │       │   ├── doT.js
│       │   │   │   │       │   └── lang.js
│       │   │   │   │       ├── login.html
│       │   │   │   │       ├── nopermit.html
│       │   │   │   │       ├── spring-detail.html
│       │   │   │   │       ├── spring.html
│       │   │   │   │       ├── sql-detail.html
│       │   │   │   │       ├── sql.html
│       │   │   │   │       ├── wall.html
│       │   │   │   │       ├── webapp.html
│       │   │   │   │       ├── websession-detail.html
│       │   │   │   │       ├── websession.html
│       │   │   │   │       ├── weburi-detail.html
│       │   │   │   │       └── weburi.html
│       │   │   │   └── monitor/
│       │   │   │       ├── mysql/
│       │   │   │       │   ├── basic.sql
│       │   │   │       │   ├── const.sql
│       │   │   │       │   ├── datasource.sql
│       │   │   │       │   ├── springmethod.sql
│       │   │   │       │   ├── sql.sql
│       │   │   │       │   ├── wall.sql
│       │   │   │       │   ├── webapp.sql
│       │   │   │       │   └── weburi.sql
│       │   │   │       └── resources/
│       │   │   │           └── index.html
│       │   │   ├── tpcds/
│       │   │   │   ├── create_tables.sql
│       │   │   │   ├── query01.sql
│       │   │   │   ├── query02.sql
│       │   │   │   ├── query03.sql
│       │   │   │   ├── query04.sql
│       │   │   │   ├── query05.sql
│       │   │   │   ├── query06.sql
│       │   │   │   ├── query07.sql
│       │   │   │   ├── query08.sql
│       │   │   │   ├── query09.sql
│       │   │   │   ├── query10.sql
│       │   │   │   ├── query11.sql
│       │   │   │   ├── query12.sql
│       │   │   │   ├── query13.sql
│       │   │   │   ├── query14.sql
│       │   │   │   ├── query15.sql
│       │   │   │   ├── query16.sql
│       │   │   │   ├── query17.sql
│       │   │   │   ├── query18.sql
│       │   │   │   ├── query19.sql
│       │   │   │   ├── query20.sql
│       │   │   │   ├── query21.sql
│       │   │   │   ├── query22.sql
│       │   │   │   ├── query23.sql
│       │   │   │   ├── query24.sql
│       │   │   │   ├── query25.sql
│       │   │   │   ├── query26.sql
│       │   │   │   ├── query27.sql
│       │   │   │   ├── query28.sql
│       │   │   │   ├── query29.sql
│       │   │   │   ├── query30.sql
│       │   │   │   ├── query31.sql
│       │   │   │   ├── query32.sql
│       │   │   │   ├── query33.sql
│       │   │   │   ├── query34.sql
│       │   │   │   ├── query35.sql
│       │   │   │   ├── query36.sql
│       │   │   │   ├── query37.sql
│       │   │   │   ├── query38.sql
│       │   │   │   ├── query39.sql
│       │   │   │   ├── query40.sql
│       │   │   │   ├── query41.sql
│       │   │   │   ├── query42.sql
│       │   │   │   ├── query43.sql
│       │   │   │   ├── query44.sql
│       │   │   │   ├── query45.sql
│       │   │   │   ├── query46.sql
│       │   │   │   ├── query47.sql
│       │   │   │   ├── query48.sql
│       │   │   │   ├── query49.sql
│       │   │   │   ├── query50.sql
│       │   │   │   ├── query51.sql
│       │   │   │   ├── query52.sql
│       │   │   │   ├── query53.sql
│       │   │   │   ├── query54.sql
│       │   │   │   ├── query55.sql
│       │   │   │   ├── query56.sql
│       │   │   │   ├── query57.sql
│       │   │   │   ├── query58.sql
│       │   │   │   ├── query59.sql
│       │   │   │   ├── query60.sql
│       │   │   │   ├── query61.sql
│       │   │   │   ├── query62.sql
│       │   │   │   ├── query63.sql
│       │   │   │   ├── query64.sql
│       │   │   │   ├── query65.sql
│       │   │   │   ├── query66.sql
│       │   │   │   ├── query67.sql
│       │   │   │   ├── query68.sql
│       │   │   │   ├── query69.sql
│       │   │   │   ├── query70.sql
│       │   │   │   ├── query71.sql
│       │   │   │   ├── query72.sql
│       │   │   │   ├── query73.sql
│       │   │   │   ├── query74.sql
│       │   │   │   ├── query75.sql
│       │   │   │   ├── query76.sql
│       │   │   │   ├── query77.sql
│       │   │   │   ├── query78.sql
│       │   │   │   ├── query79.sql
│       │   │   │   ├── query80.sql
│       │   │   │   ├── query81.sql
│       │   │   │   ├── query82.sql
│       │   │   │   ├── query83.sql
│       │   │   │   ├── query84.sql
│       │   │   │   ├── query85.sql
│       │   │   │   ├── query86.sql
│       │   │   │   ├── query87.sql
│       │   │   │   ├── query88.sql
│       │   │   │   ├── query89.sql
│       │   │   │   ├── query90.sql
│       │   │   │   ├── query91.sql
│       │   │   │   ├── query92.sql
│       │   │   │   ├── query93.sql
│       │   │   │   ├── query94.sql
│       │   │   │   ├── query95.sql
│       │   │   │   ├── query96.sql
│       │   │   │   ├── query97.sql
│       │   │   │   ├── query98.sql
│       │   │   │   └── query99.sql
│       │   │   └── tpch/
│       │   │       ├── create_tables.sql
│       │   │       ├── insert_lineitem_200.sql
│       │   │       ├── q1.sql
│       │   │       ├── q10.sql
│       │   │       ├── q11.sql
│       │   │       ├── q12.sql
│       │   │       ├── q13.sql
│       │   │       ├── q14.sql
│       │   │       ├── q15.sql
│       │   │       ├── q16.sql
│       │   │       ├── q17.sql
│       │   │       ├── q18.sql
│       │   │       ├── q19.sql
│       │   │       ├── q2.sql
│       │   │       ├── q20.sql
│       │   │       ├── q21.sql
│       │   │       ├── q22.sql
│       │   │       ├── q3.sql
│       │   │       ├── q4.sql
│       │   │       ├── q5.sql
│       │   │       ├── q6.sql
│       │   │       ├── q7.sql
│       │   │       ├── q8.sql
│       │   │       └── q9.sql
│       │   └── scripts/
│       │       ├── druidStat.bat
│       │       └── druidStat.sh
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── alibaba/
│           │           └── druid/
│           │               ├── Bug_for_alibank.java
│           │               ├── DBCPTest.java
│           │               ├── DbTestCase.java
│           │               ├── DragoonMetaInfTest.java
│           │               ├── LockTest.java
│           │               ├── PoolTestCase.java
│           │               ├── TestForZY.java
│           │               ├── TestHibernateCRUDWithTransactional.java
│           │               ├── TestHistogram.java
│           │               ├── TestIdel3.java
│           │               ├── TestLRU.java
│           │               ├── TestLockCount.java
│           │               ├── TestOracle.java
│           │               ├── TestOraclePing.java
│           │               ├── TestReplaceLicense.java
│           │               ├── TestRollBack.java
│           │               ├── TestSqlServer.java
│           │               ├── TestTraceFilter.java
│           │               ├── TestUtil.java
│           │               ├── benckmark/
│           │               │   ├── FnvHashTest.java
│           │               │   ├── TPCDS.java
│           │               │   ├── TPCH.java
│           │               │   ├── pool/
│           │               │   │   ├── AsyncClose.java
│           │               │   │   ├── Case0.java
│           │               │   │   ├── Case1.java
│           │               │   │   ├── Case2.java
│           │               │   │   ├── Case3.java
│           │               │   │   ├── CaseKylin_Oracle.java
│           │               │   │   ├── CaseKylin_mysql.java
│           │               │   │   ├── CaseKylin_mysql_idle_1.java
│           │               │   │   ├── CaseKylin_mysql_idle_2.java
│           │               │   │   ├── Case_Concurrent_50.java
│           │               │   │   ├── Oracle_Case0.java
│           │               │   │   ├── Oracle_Case3.java
│           │               │   │   ├── Oracle_Case4.java
│           │               │   │   ├── druid/
│           │               │   │   │   └── DruidCase0.java
│           │               │   │   └── model/
│           │               │   │       └── TableOperator.java
│           │               │   ├── proxy/
│           │               │   │   ├── BenchmarkCase.java
│           │               │   │   ├── BenchmarkExecutor.java
│           │               │   │   ├── DirectSQLExecutor.java
│           │               │   │   ├── DruidBenchmarkTest.java
│           │               │   │   ├── SQLExecutor.java
│           │               │   │   ├── TestAtomicPerformance.java
│           │               │   │   └── sqlcase/
│           │               │   │       ├── Select1.java
│           │               │   │       ├── SelectEmptyTable.java
│           │               │   │       ├── SelectNow.java
│           │               │   │       └── SelectSysUser.java
│           │               │   ├── sql/
│           │               │   │   ├── MySqlInsertBenchmark.java
│           │               │   │   ├── MySqlInsertBenchmark_2.java
│           │               │   │   ├── MySqlPerfMain.java
│           │               │   │   ├── MySqlPerfMain_schemaStat.java
│           │               │   │   ├── MySqlPerfMain_select.java
│           │               │   │   ├── MySqlPerfMain_visitor.java
│           │               │   │   ├── MySqlPerfTest.java
│           │               │   │   ├── SqlHolder.java
│           │               │   │   ├── StatementConverter.java
│           │               │   │   └── Templates.java
│           │               │   └── wall/
│           │               │       ├── WallBenchmarkTest.java
│           │               │       ├── WallBenchmarkTest1.java
│           │               │       ├── WallBenchmarkTest_mysql.java
│           │               │       └── WallBenchmarkTest_mysql_concurrent.java
│           │               ├── bvt/
│           │               │   ├── AlipayUseCaseTest.java
│           │               │   ├── OrTest.java
│           │               │   ├── bug/
│           │               │   │   ├── BugSqlParserIllegalWhere.java
│           │               │   │   ├── Bug_for_happyday517.java
│           │               │   │   ├── Bug_for_happyday517_2.java
│           │               │   │   ├── Bug_for_happyday517_3.java
│           │               │   │   ├── Bug_for_order.java
│           │               │   │   ├── Bug_for_qianbi.java
│           │               │   │   ├── Bug_for_ruiyi.java
│           │               │   │   ├── Bug_for_wdw1206.java
│           │               │   │   ├── Bug_for_weizhi.java
│           │               │   │   ├── Bug_for_xuershan.java
│           │               │   │   ├── Issue1576.java
│           │               │   │   ├── Issue1645.java
│           │               │   │   ├── Issue1654.java
│           │               │   │   ├── Issue1695.java
│           │               │   │   ├── Issue1737.java
│           │               │   │   ├── Issue1759.java
│           │               │   │   ├── Issue1762.java
│           │               │   │   ├── Issue1769.java
│           │               │   │   ├── Issue1865.java
│           │               │   │   ├── Issue1898.java
│           │               │   │   ├── Issue1912.java
│           │               │   │   ├── Issue1935.java
│           │               │   │   ├── Issue1994.java
│           │               │   │   ├── Issue2002.java
│           │               │   │   ├── Issue2015.java
│           │               │   │   ├── Issue2049.java
│           │               │   │   ├── Issue2876.java
│           │               │   │   ├── Issue3929.java
│           │               │   │   ├── Issue3952.java
│           │               │   │   ├── Issue4067.java
│           │               │   │   ├── Issue4071.java
│           │               │   │   ├── Issue4253.java
│           │               │   │   ├── Issue5763.java
│           │               │   │   ├── Issue5845.java
│           │               │   │   ├── Issue5847.java
│           │               │   │   ├── Issue_4094.java
│           │               │   │   ├── Issue_4190.java
│           │               │   │   ├── Issue_685.java
│           │               │   │   ├── Issue_697.java
│           │               │   │   └── Issue_728.java
│           │               │   ├── filter/
│           │               │   │   ├── ClearFilterTest.java
│           │               │   │   ├── EncodingConvertFilterTest.java
│           │               │   │   ├── EncodingConvertFilterTest2.java
│           │               │   │   ├── FilterChainImplTest.java
│           │               │   │   ├── FilterChainImplTest2.java
│           │               │   │   ├── FilterChainImplTest3.java
│           │               │   │   ├── FilterChainTest_Clob.java
│           │               │   │   ├── FilterChainTest_Clob_2.java
│           │               │   │   ├── FilterChainTest_NClob.java
│           │               │   │   ├── FilterChainTest_NClob_2.java
│           │               │   │   ├── FilterChainTest_ResultSet.java
│           │               │   │   ├── FilterChainTest_ResultSet_2.java
│           │               │   │   ├── FilterDatasourceConnectAndRecycleFilterTest.java
│           │               │   │   ├── FilterManagerTest.java
│           │               │   │   ├── MySQL8DateTimeSqlTypeFilterTest.java
│           │               │   │   ├── ReuseStatFilterTest.java
│           │               │   │   ├── Slf4jFilterTest.java
│           │               │   │   ├── StatFilterAfterResetTest.java
│           │               │   │   ├── StatFilterBuildSlowParameterTest.java
│           │               │   │   ├── StatFilterClobTest.java
│           │               │   │   ├── StatFilterExecErrorTest.java
│           │               │   │   ├── StatFilterExecuteFirstResultSetTest.java
│           │               │   │   ├── StatFilterExecuteTest.java
│           │               │   │   ├── StatFilterOpenBlobCountTest.java
│           │               │   │   ├── StatFilterOpenBlobCountTest2.java
│           │               │   │   ├── StatFilterOpenClobCountTest.java
│           │               │   │   ├── StatFilterOpenClobCountTest2.java
│           │               │   │   ├── StatFilterOpenInputStreamCountTest.java
│           │               │   │   ├── StatFilterOpenInputStreamCountTest2.java
│           │               │   │   ├── StatFilterOpenReaderCountTest.java
│           │               │   │   ├── StatFilterReadBytesLengthTest.java
│           │               │   │   ├── StatFilterReadStringLengthTest.java
│           │               │   │   ├── StatFilterResultSetMultiCloseTest.java
│           │               │   │   ├── config/
│           │               │   │   │   ├── ConfigFilterTest.java
│           │               │   │   │   ├── ConfigFilterTest1.java
│           │               │   │   │   ├── ConfigFilterTest2.java
│           │               │   │   │   ├── ConfigFilterTest3.java
│           │               │   │   │   ├── ConfigFilterTest4.java
│           │               │   │   │   ├── ConfigFilterTest5.java
│           │               │   │   │   ├── ConfigFilterTest6.java
│           │               │   │   │   └── ConfigToolsTest.java
│           │               │   │   ├── log/
│           │               │   │   │   ├── LogFilterTest.java
│           │               │   │   │   ├── LogFilterTest2.java
│           │               │   │   │   ├── LogFilterTest3.java
│           │               │   │   │   ├── LogFilterTest4.java
│           │               │   │   │   ├── LogFilterTest5.java
│           │               │   │   │   └── Slf4jLogFilterTest.java
│           │               │   │   └── wall/
│           │               │   │       ├── BigSqlTest.java
│           │               │   │       ├── BitwiseAndTest.java
│           │               │   │       ├── BitwiseInvertTest.java
│           │               │   │       ├── BitwiseOrTest.java
│           │               │   │       ├── BitwiseXorTest.java
│           │               │   │       ├── BooleanXorTest.java
│           │               │   │       ├── ConstantArithmeticCheckTest.java
│           │               │   │       ├── CountTest.java
│           │               │   │       ├── DoPrivilegedTest.java
│           │               │   │       ├── IdentEqualsTest.java
│           │               │   │       ├── IdentEqualsTest1.java
│           │               │   │       ├── IntersectTest.java
│           │               │   │       ├── LikeTest.java
│           │               │   │       ├── MinusTest.java
│           │               │   │       ├── MustParameterizedTest.java
│           │               │   │       ├── MustParameterizedTest1.java
│           │               │   │       ├── MustParameterizedTest2.java
│           │               │   │       ├── MustParameterizedTest3.java
│           │               │   │       ├── MustParameterizedTest4.java
│           │               │   │       ├── NoMatchDbWallProvider.java
│           │               │   │       ├── NullWallProvider.java
│           │               │   │       ├── PGDenyFunctionTest.java
│           │               │   │       ├── PGWallTest.java
│           │               │   │       ├── StrictSyntaxCheckTest.java
│           │               │   │       ├── TAEWallTest.java
│           │               │   │       ├── TenantDeleteTest.java
│           │               │   │       ├── TenantInsertTest.java
│           │               │   │       ├── TenantSelectTest.java
│           │               │   │       ├── TenantSelectTest2.java
│           │               │   │       ├── TenantSelectTest3.java
│           │               │   │       ├── TenantSelectTest4.java
│           │               │   │       ├── TenantTestCallBack.java
│           │               │   │       ├── TenantUpdateTest.java
│           │               │   │       ├── Test01WallProviderCreator.java
│           │               │   │       ├── Test02WallProviderCreator.java
│           │               │   │       ├── WallAllowSelectAllColumnDefaultTest.java
│           │               │   │       ├── WallAllowSelectAllColumnTest.java
│           │               │   │       ├── WallAllowSelectAllColumnTest1.java
│           │               │   │       ├── WallAllowSelectAllColumnTest2.java
│           │               │   │       ├── WallAlterTest_0.java
│           │               │   │       ├── WallCallTest.java
│           │               │   │       ├── WallCommentTest.java
│           │               │   │       ├── WallConfigTest.java
│           │               │   │       ├── WallDeleteTest.java
│           │               │   │       ├── WallDeleteWhereTest.java
│           │               │   │       ├── WallDeleteWhereTest1.java
│           │               │   │       ├── WallDeleteWhereTest2.java
│           │               │   │       ├── WallDenySchemaTest.java
│           │               │   │       ├── WallDenyTableTest.java
│           │               │   │       ├── WallDropTest.java
│           │               │   │       ├── WallDropTest1.java
│           │               │   │       ├── WallDropTest2.java
│           │               │   │       ├── WallFilterConfigSpiForNoMatchDbTypeTest.java
│           │               │   │       ├── WallFilterConfigSpiForNullDbTypeTest.java
│           │               │   │       ├── WallFilterTest.java
│           │               │   │       ├── WallFilterTest2.java
│           │               │   │       ├── WallFilterTest3.java
│           │               │   │       ├── WallHavingTest.java
│           │               │   │       ├── WallHavingTest6.java
│           │               │   │       ├── WallInsertTest.java
│           │               │   │       ├── WallInsertTest2.java
│           │               │   │       ├── WallLineCommentTest.java
│           │               │   │       ├── WallMultiLineCommentTest.java
│           │               │   │       ├── WallMultiStatementTest.java
│           │               │   │       ├── WallProviderTest.java
│           │               │   │       ├── WallReadOnlyTest.java
│           │               │   │       ├── WallReadOnlyTest2.java
│           │               │   │       ├── WallSQLExceptionTest.java
│           │               │   │       ├── WallSelectIntoTest.java
│           │               │   │       ├── WallSelectIntoTest1.java
│           │               │   │       ├── WallSelectLimitTest.java
│           │               │   │       ├── WallSelectLimitTest_2.java
│           │               │   │       ├── WallSelectWhereTest.java
│           │               │   │       ├── WallSelectWhereTest0.java
│           │               │   │       ├── WallSelectWhereTest1.java
│           │               │   │       ├── WallSelectWhereTest2.java
│           │               │   │       ├── WallSelectWhereTest3.java
│           │               │   │       ├── WallSelectWhereTest4.java
│           │               │   │       ├── WallSelectWhereTest5.java
│           │               │   │       ├── WallSelectWhereTest6.java
│           │               │   │       ├── WallStatTestWhereAlwaysTrue.java
│           │               │   │       ├── WallStatTest_WhiteList.java
│           │               │   │       ├── WallStatTest_WhiteList_disable.java
│           │               │   │       ├── WallStatTest_alter_table.java
│           │               │   │       ├── WallStatTest_blackList_1.java
│           │               │   │       ├── WallStatTest_blackList_syntaxError.java
│           │               │   │       ├── WallStatTest_blacklist.java
│           │               │   │       ├── WallStatTest_create_table.java
│           │               │   │       ├── WallStatTest_delete.java
│           │               │   │       ├── WallStatTest_drop_table.java
│           │               │   │       ├── WallStatTest_function_stats.java
│           │               │   │       ├── WallStatTest_insert.java
│           │               │   │       ├── WallStatTest_select.java
│           │               │   │       ├── WallStatTest_select_1.java
│           │               │   │       ├── WallStatTest_select_2.java
│           │               │   │       ├── WallStatTest_select_into.java
│           │               │   │       ├── WallStatTest_statMap.java
│           │               │   │       ├── WallStatTest_update.java
│           │               │   │       ├── WallStatTest_whiteList_syntaxError.java
│           │               │   │       ├── WallTruncateTest.java
│           │               │   │       ├── WallTruncateTest1.java
│           │               │   │       ├── WallUnionTest.java
│           │               │   │       ├── WallUnionTest2.java
│           │               │   │       ├── WallUnionTest3.java
│           │               │   │       ├── WallUnionTest4.java
│           │               │   │       ├── WallUpdateCheckTest.java
│           │               │   │       ├── WallUpdateTest.java
│           │               │   │       ├── WallUpdateTest1.java
│           │               │   │       ├── WallUpdateTest2.java
│           │               │   │       ├── WallUpdateTest3.java
│           │               │   │       ├── WallUpdateTest4.java
│           │               │   │       ├── WallUpdateWhereTest.java
│           │               │   │       ├── WallUpdateWhereTest1.java
│           │               │   │       ├── WallVisitorUtilsLargeOrTest.java
│           │               │   │       ├── WallVisitorUtilsTest.java
│           │               │   │       ├── mysql/
│           │               │   │       │   ├── MySqlWallDescribteTest.java
│           │               │   │       │   ├── MySqlWallLimitTest.java
│           │               │   │       │   ├── MySqlWallLoadDataInfileTest.java
│           │               │   │       │   ├── MySqlWallPermitFunctionTest.java
│           │               │   │       │   ├── MySqlWallPermitTableTest.java
│           │               │   │       │   ├── MySqlWallPermitVariantTest.java
│           │               │   │       │   ├── MySqlWallTest.java
│           │               │   │       │   ├── MySqlWallTest1.java
│           │               │   │       │   ├── MySqlWallTest10.java
│           │               │   │       │   ├── MySqlWallTest100.java
│           │               │   │       │   ├── MySqlWallTest101.java
│           │               │   │       │   ├── MySqlWallTest102.java
│           │               │   │       │   ├── MySqlWallTest103.java
│           │               │   │       │   ├── MySqlWallTest104.java
│           │               │   │       │   ├── MySqlWallTest105.java
│           │               │   │       │   ├── MySqlWallTest106.java
│           │               │   │       │   ├── MySqlWallTest107.java
│           │               │   │       │   ├── MySqlWallTest108.java
│           │               │   │       │   ├── MySqlWallTest109.java
│           │               │   │       │   ├── MySqlWallTest11.java
│           │               │   │       │   ├── MySqlWallTest110.java
│           │               │   │       │   ├── MySqlWallTest111.java
│           │               │   │       │   ├── MySqlWallTest112.java
│           │               │   │       │   ├── MySqlWallTest113.java
│           │               │   │       │   ├── MySqlWallTest114.java
│           │               │   │       │   ├── MySqlWallTest115.java
│           │               │   │       │   ├── MySqlWallTest116.java
│           │               │   │       │   ├── MySqlWallTest117.java
│           │               │   │       │   ├── MySqlWallTest118.java
│           │               │   │       │   ├── MySqlWallTest119.java
│           │               │   │       │   ├── MySqlWallTest12.java
│           │               │   │       │   ├── MySqlWallTest120.java
│           │               │   │       │   ├── MySqlWallTest121.java
│           │               │   │       │   ├── MySqlWallTest122.java
│           │               │   │       │   ├── MySqlWallTest123.java
│           │               │   │       │   ├── MySqlWallTest124.java
│           │               │   │       │   ├── MySqlWallTest125.java
│           │               │   │       │   ├── MySqlWallTest126.java
│           │               │   │       │   ├── MySqlWallTest127.java
│           │               │   │       │   ├── MySqlWallTest128.java
│           │               │   │       │   ├── MySqlWallTest129.java
│           │               │   │       │   ├── MySqlWallTest13.java
│           │               │   │       │   ├── MySqlWallTest130.java
│           │               │   │       │   ├── MySqlWallTest131.java
│           │               │   │       │   ├── MySqlWallTest132.java
│           │               │   │       │   ├── MySqlWallTest133.java
│           │               │   │       │   ├── MySqlWallTest134.java
│           │               │   │       │   ├── MySqlWallTest135.java
│           │               │   │       │   ├── MySqlWallTest136.java
│           │               │   │       │   ├── MySqlWallTest137.java
│           │               │   │       │   ├── MySqlWallTest138.java
│           │               │   │       │   ├── MySqlWallTest139.java
│           │               │   │       │   ├── MySqlWallTest14.java
│           │               │   │       │   ├── MySqlWallTest140.java
│           │               │   │       │   ├── MySqlWallTest141.java
│           │               │   │       │   ├── MySqlWallTest142.java
│           │               │   │       │   ├── MySqlWallTest143.java
│           │               │   │       │   ├── MySqlWallTest144.java
│           │               │   │       │   ├── MySqlWallTest145.java
│           │               │   │       │   ├── MySqlWallTest146.java
│           │               │   │       │   ├── MySqlWallTest147_optimize.java
│           │               │   │       │   ├── MySqlWallTest148.java
│           │               │   │       │   ├── MySqlWallTest149.java
│           │               │   │       │   ├── MySqlWallTest15.java
│           │               │   │       │   ├── MySqlWallTest150.java
│           │               │   │       │   ├── MySqlWallTest151_update.java
│           │               │   │       │   ├── MySqlWallTest152.java
│           │               │   │       │   ├── MySqlWallTest16.java
│           │               │   │       │   ├── MySqlWallTest17.java
│           │               │   │       │   ├── MySqlWallTest18.java
│           │               │   │       │   ├── MySqlWallTest19.java
│           │               │   │       │   ├── MySqlWallTest2.java
│           │               │   │       │   ├── MySqlWallTest20.java
│           │               │   │       │   ├── MySqlWallTest21.java
│           │               │   │       │   ├── MySqlWallTest22.java
│           │               │   │       │   ├── MySqlWallTest23.java
│           │               │   │       │   ├── MySqlWallTest24.java
│           │               │   │       │   ├── MySqlWallTest25.java
│           │               │   │       │   ├── MySqlWallTest26.java
│           │               │   │       │   ├── MySqlWallTest27.java
│           │               │   │       │   ├── MySqlWallTest28.java
│           │               │   │       │   ├── MySqlWallTest29.java
│           │               │   │       │   ├── MySqlWallTest3.java
│           │               │   │       │   ├── MySqlWallTest30.java
│           │               │   │       │   ├── MySqlWallTest31.java
│           │               │   │       │   ├── MySqlWallTest32.java
│           │               │   │       │   ├── MySqlWallTest33.java
│           │               │   │       │   ├── MySqlWallTest34.java
│           │               │   │       │   ├── MySqlWallTest35.java
│           │               │   │       │   ├── MySqlWallTest36.java
│           │               │   │       │   ├── MySqlWallTest37.java
│           │               │   │       │   ├── MySqlWallTest38.java
│           │               │   │       │   ├── MySqlWallTest39.java
│           │               │   │       │   ├── MySqlWallTest4.java
│           │               │   │       │   ├── MySqlWallTest40.java
│           │               │   │       │   ├── MySqlWallTest41.java
│           │               │   │       │   ├── MySqlWallTest42.java
│           │               │   │       │   ├── MySqlWallTest43.java
│           │               │   │       │   ├── MySqlWallTest44.java
│           │               │   │       │   ├── MySqlWallTest45.java
│           │               │   │       │   ├── MySqlWallTest46.java
│           │               │   │       │   ├── MySqlWallTest47.java
│           │               │   │       │   ├── MySqlWallTest48.java
│           │               │   │       │   ├── MySqlWallTest49.java
│           │               │   │       │   ├── MySqlWallTest5.java
│           │               │   │       │   ├── MySqlWallTest50.java
│           │               │   │       │   ├── MySqlWallTest51.java
│           │               │   │       │   ├── MySqlWallTest52.java
│           │               │   │       │   ├── MySqlWallTest53.java
│           │               │   │       │   ├── MySqlWallTest54.java
│           │               │   │       │   ├── MySqlWallTest55.java
│           │               │   │       │   ├── MySqlWallTest56.java
│           │               │   │       │   ├── MySqlWallTest57.java
│           │               │   │       │   ├── MySqlWallTest58.java
│           │               │   │       │   ├── MySqlWallTest59.java
│           │               │   │       │   ├── MySqlWallTest6.java
│           │               │   │       │   ├── MySqlWallTest60.java
│           │               │   │       │   ├── MySqlWallTest61.java
│           │               │   │       │   ├── MySqlWallTest62.java
│           │               │   │       │   ├── MySqlWallTest63.java
│           │               │   │       │   ├── MySqlWallTest64.java
│           │               │   │       │   ├── MySqlWallTest65.java
│           │               │   │       │   ├── MySqlWallTest66.java
│           │               │   │       │   ├── MySqlWallTest67.java
│           │               │   │       │   ├── MySqlWallTest68.java
│           │               │   │       │   ├── MySqlWallTest69.java
│           │               │   │       │   ├── MySqlWallTest7.java
│           │               │   │       │   ├── MySqlWallTest70.java
│           │               │   │       │   ├── MySqlWallTest71.java
│           │               │   │       │   ├── MySqlWallTest72.java
│           │               │   │       │   ├── MySqlWallTest73.java
│           │               │   │       │   ├── MySqlWallTest74.java
│           │               │   │       │   ├── MySqlWallTest75.java
│           │               │   │       │   ├── MySqlWallTest76.java
│           │               │   │       │   ├── MySqlWallTest77.java
│           │               │   │       │   ├── MySqlWallTest78.java
│           │               │   │       │   ├── MySqlWallTest79.java
│           │               │   │       │   ├── MySqlWallTest8.java
│           │               │   │       │   ├── MySqlWallTest80.java
│           │               │   │       │   ├── MySqlWallTest81.java
│           │               │   │       │   ├── MySqlWallTest82.java
│           │               │   │       │   ├── MySqlWallTest83.java
│           │               │   │       │   ├── MySqlWallTest84.java
│           │               │   │       │   ├── MySqlWallTest85.java
│           │               │   │       │   ├── MySqlWallTest86.java
│           │               │   │       │   ├── MySqlWallTest87.java
│           │               │   │       │   ├── MySqlWallTest88.java
│           │               │   │       │   ├── MySqlWallTest89.java
│           │               │   │       │   ├── MySqlWallTest9.java
│           │               │   │       │   ├── MySqlWallTest90.java
│           │               │   │       │   ├── MySqlWallTest91.java
│           │               │   │       │   ├── MySqlWallTest92.java
│           │               │   │       │   ├── MySqlWallTest93.java
│           │               │   │       │   ├── MySqlWallTest94.java
│           │               │   │       │   ├── MySqlWallTest95.java
│           │               │   │       │   ├── MySqlWallTest96.java
│           │               │   │       │   ├── MySqlWallTest97.java
│           │               │   │       │   ├── MySqlWallTest98.java
│           │               │   │       │   ├── MySqlWallTest99.java
│           │               │   │       │   ├── MySqlWallTest_comment.java
│           │               │   │       │   ├── MySqlWallTest_concat.java
│           │               │   │       │   ├── MySqlWallTest_having.java
│           │               │   │       │   ├── MySqlWallTest_hint.java
│           │               │   │       │   ├── MySqlWallTest_if.java
│           │               │   │       │   ├── MySqlWallTest_ifnull_1.java
│           │               │   │       │   ├── MySqlWallTest_ifnull_2.java
│           │               │   │       │   ├── MySqlWallTest_like_1.java
│           │               │   │       │   ├── MySqlWallTest_sqlmap.java
│           │               │   │       │   ├── MySqlWallTest_union.java
│           │               │   │       │   ├── MySqlWallTest_var.java
│           │               │   │       │   ├── MySqlWallTest_var_autoincrement.java
│           │               │   │       │   └── MysqlWallTest_rename_table.java
│           │               │   │       ├── oracle/
│           │               │   │       │   ├── OracleWallPermitFunctionTest.java
│           │               │   │       │   ├── OracleWallPermitObjectTest.java
│           │               │   │       │   ├── OracleWallPermitSchemaTest.java
│           │               │   │       │   ├── OracleWallPermitTableTest.java
│           │               │   │       │   ├── OracleWallPermitVariantTest.java
│           │               │   │       │   ├── OracleWallPermitVariantTest2.java
│           │               │   │       │   ├── OracleWallResourceTest.java
│           │               │   │       │   ├── OracleWallTest.java
│           │               │   │       │   ├── OracleWallTest1.java
│           │               │   │       │   ├── OracleWallTest10.java
│           │               │   │       │   ├── OracleWallTest2.java
│           │               │   │       │   ├── OracleWallTest3.java
│           │               │   │       │   ├── OracleWallTest4.java
│           │               │   │       │   ├── OracleWallTest5.java
│           │               │   │       │   ├── OracleWallTest6.java
│           │               │   │       │   ├── OracleWallTest7.java
│           │               │   │       │   ├── OracleWallTest8_alter_rebuild.java
│           │               │   │       │   └── OracleWallTest9_exists.java
│           │               │   │       ├── pg/
│           │               │   │       │   ├── PGWallTest1.java
│           │               │   │       │   └── PGWallTest2.java
│           │               │   │       └── sqlserver/
│           │               │   │           ├── SQLServerWallPermitFunctionTest.java
│           │               │   │           ├── SQLServerWallPermitObjectTest.java
│           │               │   │           ├── SQLServerWallPermitSchemaTest.java
│           │               │   │           ├── SQLServerWallPermitTableTest.java
│           │               │   │           ├── SQLServerWallTest.java
│           │               │   │           ├── SQLServerWallTest_0.java
│           │               │   │           ├── SQLServerWallTest_1.java
│           │               │   │           ├── SQLServerWallTest_10.java
│           │               │   │           ├── SQLServerWallTest_11.java
│           │               │   │           ├── SQLServerWallTest_12.java
│           │               │   │           ├── SQLServerWallTest_2.java
│           │               │   │           ├── SQLServerWallTest_3.java
│           │               │   │           ├── SQLServerWallTest_4.java
│           │               │   │           ├── SQLServerWallTest_5.java
│           │               │   │           ├── SQLServerWallTest_6.java
│           │               │   │           ├── SQLServerWallTest_7.java
│           │               │   │           ├── SQLServerWallTest_8.java
│           │               │   │           └── SQLServerWallTest_9.java
│           │               │   ├── hibernate/
│           │               │   │   ├── HibernateCRUDTest.java
│           │               │   │   └── entity/
│           │               │   │       └── Sample.java
│           │               │   ├── jmx/
│           │               │   │   ├── DupRegisterTest.java
│           │               │   │   └── JMXExporterTest.java
│           │               │   ├── log/
│           │               │   │   └── LoggerTest.java
│           │               │   ├── mock/
│           │               │   │   ├── MockExecuteTest.java
│           │               │   │   └── MockResultSetMetaDataTest.java
│           │               │   ├── pool/
│           │               │   │   ├── AsyncInitTest.java
│           │               │   │   ├── AsyncInitTest_1_scheduler.java
│           │               │   │   ├── Bug_for_dupCloseStmtError.java
│           │               │   │   ├── CallableStatmentTest.java
│           │               │   │   ├── Case0.java
│           │               │   │   ├── Case1.java
│           │               │   │   ├── Case2.java
│           │               │   │   ├── Case3.java
│           │               │   │   ├── ClosedTest.java
│           │               │   │   ├── ConfigErrorTest.java
│           │               │   │   ├── ConfigErrorTest2.java
│           │               │   │   ├── ConfigErrorTest3.java
│           │               │   │   ├── ConfigErrorTestMysql.java
│           │               │   │   ├── CreateSchedulerTest.java
│           │               │   │   ├── CreateSchedulerTest_directCreate.java
│           │               │   │   ├── DataSourceDisableExceptionTest.java
│           │               │   │   ├── DestorySchedulerTest.java
│           │               │   │   ├── DruidConnectionHolderTest.java
│           │               │   │   ├── DruidConnectionHolderTest2.java
│           │               │   │   ├── DruidConnectionHolderTest3.java
│           │               │   │   ├── DruidConnectionHolderTest4.java
│           │               │   │   ├── DruidDataSourceAsyncCloseTest.java
│           │               │   │   ├── DruidDataSourceC3P0AdapterTest.java
│           │               │   │   ├── DruidDataSourceConverterTest.java
│           │               │   │   ├── DruidDataSourceDecryptTest.java
│           │               │   │   ├── DruidDataSourceFactoryTest.java
│           │               │   │   ├── DruidDataSourceFactoryTest0.java
│           │               │   │   ├── DruidDataSourceFactoryTest1.java
│           │               │   │   ├── DruidDataSourceFactoryTest2.java
│           │               │   │   ├── DruidDataSourceFilterTest.java
│           │               │   │   ├── DruidDataSourceShrinkTest.java
│           │               │   │   ├── DruidDataSourceTest.java
│           │               │   │   ├── DruidDataSourceTest1.java
│           │               │   │   ├── DruidDataSourceTest10.java
│           │               │   │   ├── DruidDataSourceTest2.java
│           │               │   │   ├── DruidDataSourceTest3.java
│           │               │   │   ├── DruidDataSourceTest4.java
│           │               │   │   ├── DruidDataSourceTest5.java
│           │               │   │   ├── DruidDataSourceTest6.java
│           │               │   │   ├── DruidDataSourceTest7.java
│           │               │   │   ├── DruidDataSourceTest8.java
│           │               │   │   ├── DruidDataSourceTest9_phyMaxUseCount.java
│           │               │   │   ├── DruidDataSourceTestValidConnectionChecker.java
│           │               │   │   ├── DruidDataSourceTest_autocommit.java
│           │               │   │   ├── DruidDataSourceTest_autocommit2.java
│           │               │   │   ├── DruidDataSourceTest_autocommit3.java
│           │               │   │   ├── DruidDataSourceTest_autocommit4.java
│           │               │   │   ├── DruidDataSourceTest_clearCache.java
│           │               │   │   ├── DruidDataSourceTest_closeError.java
│           │               │   │   ├── DruidDataSourceTest_createError.java
│           │               │   │   ├── DruidDataSourceTest_enable.java
│           │               │   │   ├── DruidDataSourceTest_exceptionSorter.java
│           │               │   │   ├── DruidDataSourceTest_exceptionSorter_extend.java
│           │               │   │   ├── DruidDataSourceTest_fill.java
│           │               │   │   ├── DruidDataSourceTest_fill2.java
│           │               │   │   ├── DruidDataSourceTest_getConnection.java
│           │               │   │   ├── DruidDataSourceTest_getConnection_2.java
│           │               │   │   ├── DruidDataSourceTest_getPooledConnection.java
│           │               │   │   ├── DruidDataSourceTest_getPoolingPeakTime.java
│           │               │   │   ├── DruidDataSourceTest_getProperties.java
│           │               │   │   ├── DruidDataSourceTest_initSql.java
│           │               │   │   ├── DruidDataSourceTest_initSql_factory.java
│           │               │   │   ├── DruidDataSourceTest_initSqls.java
│           │               │   │   ├── DruidDataSourceTest_interrupt.java
│           │               │   │   ├── DruidDataSourceTest_interrupt2.java
│           │               │   │   ├── DruidDataSourceTest_interrupt3.java
│           │               │   │   ├── DruidDataSourceTest_lastCreateError.java
│           │               │   │   ├── DruidDataSourceTest_lastError.java
│           │               │   │   ├── DruidDataSourceTest_loadSysPropertyFilter.java
│           │               │   │   ├── DruidDataSourceTest_maxActive1.java
│           │               │   │   ├── DruidDataSourceTest_maxActive2.java
│           │               │   │   ├── DruidDataSourceTest_maxActive3.java
│           │               │   │   ├── DruidDataSourceTest_maxActive4.java
│           │               │   │   ├── DruidDataSourceTest_maxWait.java
│           │               │   │   ├── DruidDataSourceTest_notEmptyWait.java
│           │               │   │   ├── DruidDataSourceTest_notEmptyWait2.java
│           │               │   │   ├── DruidDataSourceTest_oracle.java
│           │               │   │   ├── DruidDataSourceTest_oracle2.java
│           │               │   │   ├── DruidDataSourceTest_oracle3.java
│           │               │   │   ├── DruidDataSourceTest_oracle_error.java
│           │               │   │   ├── DruidDataSourceTest_recycle.java
│           │               │   │   ├── DruidDataSourceTest_recycle2.java
│           │               │   │   ├── DruidDataSourceTest_testOnBorrowFailed.java
│           │               │   │   ├── DruidDataSourceTest_testOnWhileIdleFailed.java
│           │               │   │   ├── DruidDataSourceTest_tryGet.java
│           │               │   │   ├── DruidDataSourceTest_wrapDriverFilters.java
│           │               │   │   ├── DruidPooledCallableStatementTest.java
│           │               │   │   ├── DruidPooledConnectionTest.java
│           │               │   │   ├── DruidPooledConnectionTest1.java
│           │               │   │   ├── DruidPooledConnectionTest2.java
│           │               │   │   ├── DruidPooledConnectionTest_prepareError.java
│           │               │   │   ├── DruidPooledPreparedStatementTest.java
│           │               │   │   ├── DruidPooledPreparedStatementTest1.java
│           │               │   │   ├── DruidPooledResultSetTest.java
│           │               │   │   ├── DruidPooledResultSetTest2.java
│           │               │   │   ├── DruidPooledStatementTest.java
│           │               │   │   ├── DumpTest.java
│           │               │   │   ├── ExceptionSorterTest.java
│           │               │   │   ├── FullTest.java
│           │               │   │   ├── HoldableUnsupportTest.java
│           │               │   │   ├── InitExceptionThrowTest.java
│           │               │   │   ├── Issue4316.java
│           │               │   │   ├── JdbcDataSourceStatTest.java
│           │               │   │   ├── KeepAliveTest.java
│           │               │   │   ├── KeepAliveTest_scheduler.java
│           │               │   │   ├── LastActiveTest_0.java
│           │               │   │   ├── LockFairTest.java
│           │               │   │   ├── ManagedDataSourceTest.java
│           │               │   │   ├── MaxWaitTest.java
│           │               │   │   ├── OnFatalErrorMaxActiveTest.java
│           │               │   │   ├── OnFatalErrorMaxActiveTest_1.java
│           │               │   │   ├── PSCacheTest.java
│           │               │   │   ├── PSCacheTest1.java
│           │               │   │   ├── PSCacheTest2.java
│           │               │   │   ├── PSCacheTest3.java
│           │               │   │   ├── PSCacheTest4.java
│           │               │   │   ├── ParamTest.java
│           │               │   │   ├── PasswordCallbackTest.java
│           │               │   │   ├── PreparedStatementKeyTest.java
│           │               │   │   ├── PreparedStatementProxyImplTest.java
│           │               │   │   ├── RegisterTest.java
│           │               │   │   ├── SavepointTest.java
│           │               │   │   ├── SlowSqlMillisTest.java
│           │               │   │   ├── SlowSqlMillisTest2.java
│           │               │   │   ├── SpringIbatisFilterTest.java
│           │               │   │   ├── SpringMybatisFilterTest.java
│           │               │   │   ├── TestActiveTrace.java
│           │               │   │   ├── TestClone.java
│           │               │   │   ├── TestClose_0.java
│           │               │   │   ├── TestClose_1.java
│           │               │   │   ├── TestClose_2.java
│           │               │   │   ├── TestConnectError.java
│           │               │   │   ├── TestConnectTimeout.java
│           │               │   │   ├── TestDefault.java
│           │               │   │   ├── TestDisable.java
│           │               │   │   ├── TestDruidDataSource.java
│           │               │   │   ├── TestGetUpdateCount.java
│           │               │   │   ├── TestGraceShutdown.java
│           │               │   │   ├── TestH2.java
│           │               │   │   ├── TestIdle.java
│           │               │   │   ├── TestIdle2.java
│           │               │   │   ├── TestIdle3.java
│           │               │   │   ├── TestLogLongTimeTransaction.java
│           │               │   │   ├── TestOnBorrowFileAndNameTest.java
│           │               │   │   ├── TestOraclePrefetch.java
│           │               │   │   ├── TestOracleWall.java
│           │               │   │   ├── TestOracleWall2.java
│           │               │   │   ├── TestOracleWall3.java
│           │               │   │   ├── TestOracleWallJdbc3.java
│           │               │   │   ├── TestOracleWrap.java
│           │               │   │   ├── TestOracleWrap2.java
│           │               │   │   ├── TestPoolPreparedStatement.java
│           │               │   │   ├── TestPoolPreparedStatement2.java
│           │               │   │   ├── TestRemoveAbandoned.java
│           │               │   │   ├── TestRemoveAbandoned2.java
│           │               │   │   ├── TestSharePreparedStatements.java
│           │               │   │   ├── TestStat.java
│           │               │   │   ├── TimeBetweenLogStatsMillisTest.java
│           │               │   │   ├── TimeBetweenLogStatsMillisTest2.java
│           │               │   │   ├── TimeBetweenLogStatsMillisTest3.java
│           │               │   │   ├── TransactionTest.java
│           │               │   │   ├── UnwrapTest.java
│           │               │   │   ├── UnwrapTest2.java
│           │               │   │   ├── UnwrapTest_filter.java
│           │               │   │   ├── UrlNotSetTest.java
│           │               │   │   ├── UserPasswordVersionTest.java
│           │               │   │   ├── UsingDefaultLockModeBenchmarkTest.java
│           │               │   │   ├── UsingFairLockBenchmarkTest.java
│           │               │   │   ├── UsingUnfairLockBenchmarkTest.java
│           │               │   │   ├── ValidationQueryLogDB2Test.java
│           │               │   │   ├── ValidationQueryLogTest.java
│           │               │   │   ├── adapter/
│           │               │   │   │   ├── DruidDataSourceC3P0AdapterTest.java
│           │               │   │   │   └── DruidDataSourceC3P0AdapterTest2.java
│           │               │   │   ├── basic/
│           │               │   │   │   ├── ConnectionTest.java
│           │               │   │   │   ├── ConnectionTest2.java
│           │               │   │   │   ├── ConnectionTest3.java
│           │               │   │   │   ├── ConnectionTest4.java
│           │               │   │   │   ├── ConnectionTest5.java
│           │               │   │   │   ├── DataSourceTest3.java
│           │               │   │   │   ├── DruidDataSourceFactoryTest.java
│           │               │   │   │   ├── MaxEvictableIdleTimeMillisTest.java
│           │               │   │   │   ├── MaxEvictableIdleTimeMillisTest2.java
│           │               │   │   │   ├── MaxPhyTimeMillisTest.java
│           │               │   │   │   ├── PoolableCallableStatementTest.java
│           │               │   │   │   ├── PoolablePreparedStatementTest.java
│           │               │   │   │   ├── PoolableStatementTest.java
│           │               │   │   │   ├── PoolableStatementTest2.java
│           │               │   │   │   ├── PoolableStatementTest3.java
│           │               │   │   │   ├── PoolableWrapperTest.java
│           │               │   │   │   ├── PreparedStatementKeyTest.java
│           │               │   │   │   ├── ResultSetTest.java
│           │               │   │   │   ├── ResultSetTest2.java
│           │               │   │   │   ├── TestCommit.java
│           │               │   │   │   ├── TestDataSourceBasic.java
│           │               │   │   │   └── TestDataSourceBasic2.java
│           │               │   │   ├── dynamic/
│           │               │   │   │   ├── ConnectPropertiesChangeTest.java
│           │               │   │   │   ├── ConnectPropertiesChangeTest1.java
│           │               │   │   │   ├── DruidDataSourceStatLoggerImplTest.java
│           │               │   │   │   ├── MaxActiveChangeTest.java
│           │               │   │   │   ├── PoolPreparedStatementsChangeTest.java
│           │               │   │   │   └── SqlSkipCountTest.java
│           │               │   │   ├── exception/
│           │               │   │   │   ├── OceanBaseOracleExceptionSorterTest.java
│           │               │   │   │   ├── OracleExceptionSorterTest.java
│           │               │   │   │   ├── OracleExceptionSorterTest_closeConn.java
│           │               │   │   │   ├── OracleExceptionSorterTest_closeConn_1.java
│           │               │   │   │   ├── OracleExceptionSorterTest_closeConn_2.java
│           │               │   │   │   ├── OracleExceptionSorterTest_closeConn_3.java
│           │               │   │   │   ├── OracleExceptionSorterTest_closeConnectFailedDatasource.java
│           │               │   │   │   ├── OracleExceptionSorterTest_closeStmt.java
│           │               │   │   │   ├── OracleExceptionSorterTest_commit.java
│           │               │   │   │   ├── OracleExceptionSorterTest_concurrent.java
│           │               │   │   │   ├── OracleExceptionSorterTest_rollback.java
│           │               │   │   │   ├── OracleExceptionSorterTest_setCatalog.java
│           │               │   │   │   ├── OracleExceptionSorterTest_setIsolationLevel.java
│           │               │   │   │   ├── OracleExceptionSorterTest_setReadOnly.java
│           │               │   │   │   ├── OracleExceptionSorterTest_setSavepoint.java
│           │               │   │   │   ├── OracleExceptionSorterTest_setSavepointWithName.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_addBatch.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_cancel.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_clearBatch.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_clearWarrnings.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_execute.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_executeBatch.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_executeQuery.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_executeUpdate.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_executeUpdate_1.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_executeUpdate_2.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_executeUpdate_3.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_execute_1.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_execute_2.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_execute_3.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getFetchDirection.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getFetchSize.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getGeneratedKeys.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getMaxField.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getMaxRows.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getMoreResults.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getMoreResults_1.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getQueryTimeout.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getResultSet.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getResultSetConcurrency.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getResultSetHoldability.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getResultSetType.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getUpdateCount.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_getWarrnings.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_setCursorName.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_setEscapeProcessing.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_setFetchDirection.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_setFetchSize.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_setMaxField.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_setMaxRows.java
│           │               │   │   │   ├── OracleExceptionSorterTest_stmt_setQueryTimeout.java
│           │               │   │   │   ├── OracleExceptionSorter_userDefined.java
│           │               │   │   │   └── OracleExceptionSorter_userDefined_1.java
│           │               │   │   ├── profile/
│           │               │   │   │   ├── FailFastTest.java
│           │               │   │   │   └── ProfileEnableTest.java
│           │               │   │   ├── property/
│           │               │   │   │   ├── PropertyTest_filters.java
│           │               │   │   │   ├── PropertyTest_testOnBorrow.java
│           │               │   │   │   ├── PropertyTest_testWhileIdle.java
│           │               │   │   │   ├── PropertyTest_useGlobalDataSourceStat.java
│           │               │   │   │   └── PropertyTest_validationQuery.java
│           │               │   │   ├── vendor/
│           │               │   │   │   ├── InformixExceptionSorterTest.java
│           │               │   │   │   ├── MSSQLValidConnectionCheckerTest.java
│           │               │   │   │   ├── MySQLValidConnectionCheckerTest.java
│           │               │   │   │   ├── MySqlExceptionSorterTest.java
│           │               │   │   │   ├── MySqlExceptionSorterTest_1.java
│           │               │   │   │   ├── MySqlExceptionSorterTest_2.java
│           │               │   │   │   ├── MySqlExceptionSorterTest_oceanbase.java
│           │               │   │   │   ├── PGExceptionSorterTest.java
│           │               │   │   │   ├── SybaseExceptionSorterTest.java
│           │               │   │   │   └── ValidConnectionCheckerAdapterTest.java
│           │               │   │   └── xa/
│           │               │   │       ├── H2XATest.java
│           │               │   │       └── JtdsXAConnectionTest.java
│           │               │   ├── proxy/
│           │               │   │   ├── AllStatisticTest.java
│           │               │   │   ├── BasicTypeTest.java
│           │               │   │   ├── BatchReadTest.java
│           │               │   │   ├── BlobTest.java
│           │               │   │   ├── CallStatementTest.java
│           │               │   │   ├── CallableStatementProxyImplTest.java
│           │               │   │   ├── ClobTest.java
│           │               │   │   ├── CommonsLogFilterTest.java
│           │               │   │   ├── ConnectionProxyImplTest.java
│           │               │   │   ├── ConnectionStatisticTest.java
│           │               │   │   ├── ConnectionTest.java
│           │               │   │   ├── CounterFilterTest.java
│           │               │   │   ├── DriverTest.java
│           │               │   │   ├── DruidDriverTest.java
│           │               │   │   ├── InsertValues.java
│           │               │   │   ├── InsertValues_1.java
│           │               │   │   ├── InsertValues_2.java
│           │               │   │   ├── JdbcFilterEventAdapterTest.java
│           │               │   │   ├── JdbcUtilsTest.java
│           │               │   │   ├── Log4j2FilterTest.java
│           │               │   │   ├── Log4jFilterTest.java
│           │               │   │   ├── LogFilterTest.java
│           │               │   │   ├── PrecallTest.java
│           │               │   │   ├── PreparedStatementProxyImplGetParametersTest.java
│           │               │   │   ├── PreparedStatementTest.java
│           │               │   │   ├── ProxyDriverTest.java
│           │               │   │   ├── ResultSetProxyImplTest.java
│           │               │   │   ├── SchemaReadTest.java
│           │               │   │   ├── SqlStatisticTest.java
│           │               │   │   ├── StatementTest.java
│           │               │   │   ├── StatisticTest.java
│           │               │   │   ├── WrapImplTest.java
│           │               │   │   ├── fake/
│           │               │   │   │   ├── DruidDriverTest.java
│           │               │   │   │   └── FakeDriverTest.java
│           │               │   │   ├── filter/
│           │               │   │   │   ├── ClobTest.java
│           │               │   │   │   ├── GlobalStatTest0.java
│           │               │   │   │   ├── GlobalStatTest1.java
│           │               │   │   │   ├── MergeStatFilterTest.java
│           │               │   │   │   ├── MergeStatFilterTest2.java
│           │               │   │   │   ├── MergeStatFilterTest3.java
│           │               │   │   │   ├── MergeStatFilterTest_tddl.java
│           │               │   │   │   ├── MergeStatFilterTest_tddl_1.java
│           │               │   │   │   ├── MergeStatFilterTest_tddl_2.java
│           │               │   │   │   ├── MergeStatFilterTest_tddl_3.java
│           │               │   │   │   ├── MergeStatFilterTest_tddl_4.java
│           │               │   │   │   ├── StatFilterConcurrentTest.java
│           │               │   │   │   ├── StatFilterTest.java
│           │               │   │   │   ├── StatFilterTest2.java
│           │               │   │   │   ├── StatFilterTest3.java
│           │               │   │   │   └── encoding/
│           │               │   │   │       ├── CharsetConvertTest.java
│           │               │   │   │       └── CharsetParameterTest.java
│           │               │   │   └── utils/
│           │               │   │       └── DruidLoaderUtilsTest.java
│           │               │   ├── spring/
│           │               │   │   ├── DruidJdbcExtractorTest.java
│           │               │   │   ├── SpringMethodInfoTest.java
│           │               │   │   ├── SqlMapClientWrapperTest.java
│           │               │   │   ├── SqlMapExecutorWrapperTest.java
│           │               │   │   ├── SqlMapExecutorWrapperTest_2.java
│           │               │   │   └── SqlMapSessionWrapperTest.java
│           │               │   ├── sql/
│           │               │   │   ├── BigOrTest.java
│           │               │   │   ├── CompatibleTest.java
│           │               │   │   ├── CreateCompareTest.java
│           │               │   │   ├── CreateCompareTest_1.java
│           │               │   
Download .txt
Showing preview only (2,862K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (35432 symbols across 3330 files)

FILE: .mvn/wrapper/MavenWrapperDownloader.java
  class MavenWrapperDownloader (line 21) | public class MavenWrapperDownloader {
    method main (line 47) | public static void main(String args[]) {
    method downloadFileFromURL (line 96) | private static void downloadFileFromURL(String urlString, File destina...

FILE: core/src/main/java/com/alibaba/druid/Constants.java
  type Constants (line 18) | public interface Constants {

FILE: core/src/main/java/com/alibaba/druid/DbType.java
  type DbType (line 5) | public enum DbType {
    method DbType (line 126) | private DbType(long mask) {
    method of (line 131) | public static long of(DbType... types) {
    method of (line 141) | public static DbType of(String name) {
    method isPostgreSQLDbStyle (line 161) | public static boolean isPostgreSQLDbStyle(DbType dbType) {
    method equals (line 164) | public final boolean equals(String other) {

FILE: core/src/main/java/com/alibaba/druid/DruidRuntimeException.java
  class DruidRuntimeException (line 18) | public class DruidRuntimeException extends RuntimeException {
    method DruidRuntimeException (line 21) | public DruidRuntimeException() {
    method DruidRuntimeException (line 25) | public DruidRuntimeException(String message, Throwable cause) {
    method DruidRuntimeException (line 29) | public DruidRuntimeException(String message) {
    method DruidRuntimeException (line 33) | public DruidRuntimeException(Throwable cause) {

FILE: core/src/main/java/com/alibaba/druid/FastsqlColumnAmbiguousException.java
  class FastsqlColumnAmbiguousException (line 3) | public class FastsqlColumnAmbiguousException extends FastsqlException {
    method FastsqlColumnAmbiguousException (line 4) | public FastsqlColumnAmbiguousException() {
    method FastsqlColumnAmbiguousException (line 7) | public FastsqlColumnAmbiguousException(String msg) {

FILE: core/src/main/java/com/alibaba/druid/FastsqlException.java
  class FastsqlException (line 18) | public class FastsqlException extends RuntimeException {
    method FastsqlException (line 21) | public FastsqlException() {
    method FastsqlException (line 25) | public FastsqlException(String message, Throwable cause) {
    method FastsqlException (line 29) | public FastsqlException(String message) {
    method FastsqlException (line 33) | public FastsqlException(Throwable cause) {

FILE: core/src/main/java/com/alibaba/druid/TransactionTimeoutException.java
  class TransactionTimeoutException (line 20) | public class TransactionTimeoutException extends SQLException {

FILE: core/src/main/java/com/alibaba/druid/VERSION.java
  class VERSION (line 18) | public final class VERSION {
    method getVersionNumber (line 23) | public static String getVersionNumber() {

FILE: core/src/main/java/com/alibaba/druid/filter/Filter.java
  type Filter (line 35) | public interface Filter extends Wrapper {
    method init (line 36) | void init(DataSourceProxy dataSource);
    method destroy (line 38) | void destroy();
    method configFromProperties (line 40) | void configFromProperties(Properties properties);
    method isWrapperFor (line 42) | boolean isWrapperFor(java.lang.Class<?> iface);
    method unwrap (line 44) | <T> T unwrap(java.lang.Class<T> iface);
    method connection_connect (line 46) | ConnectionProxy connection_connect(FilterChain chain, Properties info)...
    method connection_createStatement (line 48) | StatementProxy connection_createStatement(FilterChain chain, Connectio...
    method connection_prepareStatement (line 50) | PreparedStatementProxy connection_prepareStatement(FilterChain chain, ...
    method connection_prepareCall (line 53) | CallableStatementProxy connection_prepareCall(FilterChain chain, Conne...
    method connection_nativeSQL (line 56) | String connection_nativeSQL(FilterChain chain, ConnectionProxy connect...
    method connection_setAutoCommit (line 58) | void connection_setAutoCommit(FilterChain chain, ConnectionProxy conne...
    method connection_getAutoCommit (line 61) | boolean connection_getAutoCommit(FilterChain chain, ConnectionProxy co...
    method connection_commit (line 63) | void connection_commit(FilterChain chain, ConnectionProxy connection) ...
    method connection_rollback (line 65) | void connection_rollback(FilterChain chain, ConnectionProxy connection...
    method connection_close (line 67) | void connection_close(FilterChain chain, ConnectionProxy connection) t...
    method connection_isClosed (line 69) | boolean connection_isClosed(FilterChain chain, ConnectionProxy connect...
    method connection_getMetaData (line 71) | DatabaseMetaData connection_getMetaData(FilterChain chain, ConnectionP...
    method connection_setReadOnly (line 73) | void connection_setReadOnly(FilterChain chain, ConnectionProxy connect...
    method connection_isReadOnly (line 75) | boolean connection_isReadOnly(FilterChain chain, ConnectionProxy conne...
    method connection_setCatalog (line 77) | void connection_setCatalog(FilterChain chain, ConnectionProxy connecti...
    method connection_getCatalog (line 79) | String connection_getCatalog(FilterChain chain, ConnectionProxy connec...
    method connection_setTransactionIsolation (line 81) | void connection_setTransactionIsolation(FilterChain chain, ConnectionP...
    method connection_getTransactionIsolation (line 84) | int connection_getTransactionIsolation(FilterChain chain, ConnectionPr...
    method connection_getWarnings (line 86) | SQLWarning connection_getWarnings(FilterChain chain, ConnectionProxy c...
    method connection_clearWarnings (line 88) | void connection_clearWarnings(FilterChain chain, ConnectionProxy conne...
    method connection_createStatement (line 90) | StatementProxy connection_createStatement(FilterChain chain, Connectio...
    method connection_prepareStatement (line 93) | PreparedStatementProxy connection_prepareStatement(FilterChain chain, ...
    method connection_prepareCall (line 96) | CallableStatementProxy connection_prepareCall(FilterChain chain, Conne...
    method connection_getTypeMap (line 99) | java.util.Map<String, Class<?>> connection_getTypeMap(FilterChain chai...
    method connection_setTypeMap (line 102) | void connection_setTypeMap(FilterChain chain, ConnectionProxy connecti...
    method connection_setHoldability (line 105) | void connection_setHoldability(FilterChain chain, ConnectionProxy conn...
    method connection_getHoldability (line 107) | int connection_getHoldability(FilterChain chain, ConnectionProxy conne...
    method connection_setSavepoint (line 109) | Savepoint connection_setSavepoint(FilterChain chain, ConnectionProxy c...
    method connection_setSavepoint (line 111) | Savepoint connection_setSavepoint(FilterChain chain, ConnectionProxy c...
    method connection_rollback (line 113) | void connection_rollback(FilterChain chain, ConnectionProxy connection...
    method connection_releaseSavepoint (line 115) | void connection_releaseSavepoint(FilterChain chain, ConnectionProxy co...
    method connection_createStatement (line 118) | StatementProxy connection_createStatement(FilterChain chain, Connectio...
    method connection_prepareStatement (line 121) | PreparedStatementProxy connection_prepareStatement(FilterChain chain, ...
    method connection_prepareCall (line 125) | CallableStatementProxy connection_prepareCall(FilterChain chain, Conne...
    method connection_prepareStatement (line 129) | PreparedStatementProxy connection_prepareStatement(FilterChain chain, ...
    method connection_prepareStatement (line 132) | PreparedStatementProxy connection_prepareStatement(FilterChain chain, ...
    method connection_prepareStatement (line 135) | PreparedStatementProxy connection_prepareStatement(FilterChain chain, ...
    method connection_createClob (line 138) | Clob connection_createClob(FilterChain chain, ConnectionProxy connecti...
    method connection_createBlob (line 140) | Blob connection_createBlob(FilterChain chain, ConnectionProxy connecti...
    method connection_createNClob (line 142) | NClob connection_createNClob(FilterChain chain, ConnectionProxy connec...
    method connection_createSQLXML (line 144) | SQLXML connection_createSQLXML(FilterChain chain, ConnectionProxy conn...
    method connection_isValid (line 146) | boolean connection_isValid(FilterChain chain, ConnectionProxy connecti...
    method connection_setClientInfo (line 148) | void connection_setClientInfo(FilterChain chain, ConnectionProxy conne...
    method connection_setClientInfo (line 151) | void connection_setClientInfo(FilterChain chain, ConnectionProxy conne...
    method connection_getClientInfo (line 154) | String connection_getClientInfo(FilterChain chain, ConnectionProxy con...
    method connection_getClientInfo (line 156) | Properties connection_getClientInfo(FilterChain chain, ConnectionProxy...
    method connection_createArrayOf (line 158) | Array connection_createArrayOf(FilterChain chain, ConnectionProxy conn...
    method connection_createStruct (line 161) | Struct connection_createStruct(FilterChain chain, ConnectionProxy conn...
    method connection_getSchema (line 164) | String connection_getSchema(FilterChain chain, ConnectionProxy connect...
    method connection_setSchema (line 166) | void connection_setSchema(FilterChain chain, ConnectionProxy connectio...
    method connection_abort (line 168) | void connection_abort(FilterChain chain, ConnectionProxy connection, E...
    method connection_setNetworkTimeout (line 170) | void connection_setNetworkTimeout(FilterChain chain,
    method connection_getNetworkTimeout (line 175) | int connection_getNetworkTimeout(FilterChain chain, ConnectionProxy co...
    method resultSet_next (line 178) | boolean resultSet_next(FilterChain chain, ResultSetProxy resultSet) th...
    method resultSet_close (line 180) | void resultSet_close(FilterChain chain, ResultSetProxy resultSet) thro...
    method resultSet_wasNull (line 182) | boolean resultSet_wasNull(FilterChain chain, ResultSetProxy resultSet)...
    method resultSet_getString (line 184) | String resultSet_getString(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_getBoolean (line 186) | boolean resultSet_getBoolean(FilterChain chain, ResultSetProxy resultS...
    method resultSet_getByte (line 188) | byte resultSet_getByte(FilterChain chain, ResultSetProxy resultSet, in...
    method resultSet_getShort (line 190) | short resultSet_getShort(FilterChain chain, ResultSetProxy resultSet, ...
    method resultSet_getInt (line 192) | int resultSet_getInt(FilterChain chain, ResultSetProxy resultSet, int ...
    method resultSet_getLong (line 194) | long resultSet_getLong(FilterChain chain, ResultSetProxy resultSet, in...
    method resultSet_getFloat (line 196) | float resultSet_getFloat(FilterChain chain, ResultSetProxy resultSet, ...
    method resultSet_getDouble (line 198) | double resultSet_getDouble(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_getBigDecimal (line 200) | BigDecimal resultSet_getBigDecimal(FilterChain chain, ResultSetProxy r...
    method resultSet_getBytes (line 203) | byte[] resultSet_getBytes(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_getDate (line 205) | Date resultSet_getDate(FilterChain chain, ResultSetProxy resultSet, in...
    method resultSet_getTime (line 207) | Time resultSet_getTime(FilterChain chain, ResultSetProxy resultSet, in...
    method resultSet_getTimestamp (line 209) | Timestamp resultSet_getTimestamp(FilterChain chain, ResultSetProxy res...
    method resultSet_getAsciiStream (line 211) | java.io.InputStream resultSet_getAsciiStream(FilterChain chain, Result...
    method resultSet_getUnicodeStream (line 214) | java.io.InputStream resultSet_getUnicodeStream(FilterChain chain, Resu...
    method resultSet_getBinaryStream (line 217) | java.io.InputStream resultSet_getBinaryStream(FilterChain chain, Resul...
    method resultSet_getString (line 220) | String resultSet_getString(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_getBoolean (line 222) | boolean resultSet_getBoolean(FilterChain chain, ResultSetProxy resultS...
    method resultSet_getByte (line 224) | byte resultSet_getByte(FilterChain chain, ResultSetProxy resultSet, St...
    method resultSet_getShort (line 226) | short resultSet_getShort(FilterChain chain, ResultSetProxy resultSet, ...
    method resultSet_getInt (line 228) | int resultSet_getInt(FilterChain chain, ResultSetProxy resultSet, Stri...
    method resultSet_getLong (line 230) | long resultSet_getLong(FilterChain chain, ResultSetProxy resultSet, St...
    method resultSet_getFloat (line 232) | float resultSet_getFloat(FilterChain chain, ResultSetProxy resultSet, ...
    method resultSet_getDouble (line 234) | double resultSet_getDouble(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_getBigDecimal (line 236) | BigDecimal resultSet_getBigDecimal(FilterChain chain, ResultSetProxy r...
    method resultSet_getBytes (line 239) | byte[] resultSet_getBytes(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_getDate (line 241) | java.sql.Date resultSet_getDate(FilterChain chain, ResultSetProxy resu...
    method resultSet_getTime (line 244) | java.sql.Time resultSet_getTime(FilterChain chain, ResultSetProxy resu...
    method resultSet_getTimestamp (line 247) | java.sql.Timestamp resultSet_getTimestamp(FilterChain chain, ResultSet...
    method resultSet_getAsciiStream (line 250) | java.io.InputStream resultSet_getAsciiStream(FilterChain chain, Result...
    method resultSet_getUnicodeStream (line 253) | java.io.InputStream resultSet_getUnicodeStream(FilterChain chain, Resu...
    method resultSet_getBinaryStream (line 256) | java.io.InputStream resultSet_getBinaryStream(FilterChain chain, Resul...
    method resultSet_getWarnings (line 259) | SQLWarning resultSet_getWarnings(FilterChain chain, ResultSetProxy res...
    method resultSet_clearWarnings (line 261) | void resultSet_clearWarnings(FilterChain chain, ResultSetProxy resultS...
    method resultSet_getCursorName (line 263) | String resultSet_getCursorName(FilterChain chain, ResultSetProxy resul...
    method resultSet_getMetaData (line 265) | ResultSetMetaData resultSet_getMetaData(FilterChain chain, ResultSetPr...
    method resultSet_getObject (line 267) | Object resultSet_getObject(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_getObject (line 269) | <T> T resultSet_getObject(FilterChain chain,
    method resultSet_getObject (line 274) | Object resultSet_getObject(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_getObject (line 276) | <T> T resultSet_getObject(FilterChain chain,
    method resultSet_findColumn (line 281) | int resultSet_findColumn(FilterChain chain, ResultSetProxy resultSet, ...
    method resultSet_getCharacterStream (line 283) | java.io.Reader resultSet_getCharacterStream(FilterChain chain, ResultS...
    method resultSet_getCharacterStream (line 286) | java.io.Reader resultSet_getCharacterStream(FilterChain chain, ResultS...
    method resultSet_getBigDecimal (line 289) | BigDecimal resultSet_getBigDecimal(FilterChain chain, ResultSetProxy r...
    method resultSet_getBigDecimal (line 292) | BigDecimal resultSet_getBigDecimal(FilterChain chain, ResultSetProxy r...
    method resultSet_isBeforeFirst (line 295) | boolean resultSet_isBeforeFirst(FilterChain chain, ResultSetProxy resu...
    method resultSet_isAfterLast (line 297) | boolean resultSet_isAfterLast(FilterChain chain, ResultSetProxy result...
    method resultSet_isFirst (line 299) | boolean resultSet_isFirst(FilterChain chain, ResultSetProxy resultSet)...
    method resultSet_isLast (line 301) | boolean resultSet_isLast(FilterChain chain, ResultSetProxy resultSet) ...
    method resultSet_beforeFirst (line 303) | void resultSet_beforeFirst(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_afterLast (line 305) | void resultSet_afterLast(FilterChain chain, ResultSetProxy resultSet) ...
    method resultSet_first (line 307) | boolean resultSet_first(FilterChain chain, ResultSetProxy resultSet) t...
    method resultSet_last (line 309) | boolean resultSet_last(FilterChain chain, ResultSetProxy resultSet) th...
    method resultSet_getRow (line 311) | int resultSet_getRow(FilterChain chain, ResultSetProxy resultSet) thro...
    method resultSet_absolute (line 313) | boolean resultSet_absolute(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_relative (line 315) | boolean resultSet_relative(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_previous (line 317) | boolean resultSet_previous(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_setFetchDirection (line 319) | void resultSet_setFetchDirection(FilterChain chain, ResultSetProxy res...
    method resultSet_getFetchDirection (line 321) | int resultSet_getFetchDirection(FilterChain chain, ResultSetProxy resu...
    method resultSet_setFetchSize (line 323) | void resultSet_setFetchSize(FilterChain chain, ResultSetProxy resultSe...
    method resultSet_getFetchSize (line 325) | int resultSet_getFetchSize(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_getType (line 327) | int resultSet_getType(FilterChain chain, ResultSetProxy resultSet) thr...
    method resultSet_getConcurrency (line 329) | int resultSet_getConcurrency(FilterChain chain, ResultSetProxy resultS...
    method resultSet_rowUpdated (line 331) | boolean resultSet_rowUpdated(FilterChain chain, ResultSetProxy resultS...
    method resultSet_rowInserted (line 333) | boolean resultSet_rowInserted(FilterChain chain, ResultSetProxy result...
    method resultSet_rowDeleted (line 335) | boolean resultSet_rowDeleted(FilterChain chain, ResultSetProxy resultS...
    method resultSet_updateNull (line 337) | void resultSet_updateNull(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_updateBoolean (line 339) | void resultSet_updateBoolean(FilterChain chain, ResultSetProxy resultS...
    method resultSet_updateByte (line 342) | void resultSet_updateByte(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_updateShort (line 344) | void resultSet_updateShort(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_updateInt (line 347) | void resultSet_updateInt(FilterChain chain, ResultSetProxy resultSet, ...
    method resultSet_updateLong (line 349) | void resultSet_updateLong(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_updateFloat (line 351) | void resultSet_updateFloat(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_updateDouble (line 354) | void resultSet_updateDouble(FilterChain chain, ResultSetProxy resultSe...
    method resultSet_updateBigDecimal (line 357) | void resultSet_updateBigDecimal(FilterChain chain, ResultSetProxy resu...
    method resultSet_updateString (line 360) | void resultSet_updateString(FilterChain chain, ResultSetProxy resultSe...
    method resultSet_updateBytes (line 363) | void resultSet_updateBytes(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_updateDate (line 366) | void resultSet_updateDate(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_updateTime (line 369) | void resultSet_updateTime(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_updateTimestamp (line 372) | void resultSet_updateTimestamp(FilterChain chain, ResultSetProxy resul...
    method resultSet_updateAsciiStream (line 375) | void resultSet_updateAsciiStream(FilterChain chain, ResultSetProxy res...
    method resultSet_updateBinaryStream (line 378) | void resultSet_updateBinaryStream(FilterChain chain, ResultSetProxy re...
    method resultSet_updateCharacterStream (line 381) | void resultSet_updateCharacterStream(FilterChain chain, ResultSetProxy...
    method resultSet_updateObject (line 384) | void resultSet_updateObject(FilterChain chain, ResultSetProxy resultSe...
    method resultSet_updateObject (line 387) | void resultSet_updateObject(FilterChain chain, ResultSetProxy resultSe...
    method resultSet_updateNull (line 390) | void resultSet_updateNull(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_updateBoolean (line 392) | void resultSet_updateBoolean(FilterChain chain, ResultSetProxy resultS...
    method resultSet_updateByte (line 395) | void resultSet_updateByte(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_updateShort (line 398) | void resultSet_updateShort(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_updateInt (line 401) | void resultSet_updateInt(FilterChain chain, ResultSetProxy resultSet, ...
    method resultSet_updateLong (line 404) | void resultSet_updateLong(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_updateFloat (line 407) | void resultSet_updateFloat(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_updateDouble (line 410) | void resultSet_updateDouble(FilterChain chain, ResultSetProxy resultSe...
    method resultSet_updateBigDecimal (line 413) | void resultSet_updateBigDecimal(FilterChain chain, ResultSetProxy resu...
    method resultSet_updateString (line 416) | void resultSet_updateString(FilterChain chain, ResultSetProxy resultSe...
    method resultSet_updateBytes (line 419) | void resultSet_updateBytes(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_updateDate (line 422) | void resultSet_updateDate(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_updateTime (line 425) | void resultSet_updateTime(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_updateTimestamp (line 428) | void resultSet_updateTimestamp(FilterChain chain,
    method resultSet_updateAsciiStream (line 434) | void resultSet_updateAsciiStream(FilterChain chain, ResultSetProxy res...
    method resultSet_updateBinaryStream (line 437) | void resultSet_updateBinaryStream(FilterChain chain, ResultSetProxy re...
    method resultSet_updateCharacterStream (line 440) | void resultSet_updateCharacterStream(FilterChain chain, ResultSetProxy...
    method resultSet_updateObject (line 443) | void resultSet_updateObject(FilterChain chain, ResultSetProxy resultSe...
    method resultSet_updateObject (line 446) | void resultSet_updateObject(FilterChain chain, ResultSetProxy resultSe...
    method resultSet_insertRow (line 449) | void resultSet_insertRow(FilterChain chain, ResultSetProxy resultSet) ...
    method resultSet_updateRow (line 451) | void resultSet_updateRow(FilterChain chain, ResultSetProxy resultSet) ...
    method resultSet_deleteRow (line 453) | void resultSet_deleteRow(FilterChain chain, ResultSetProxy resultSet) ...
    method resultSet_refreshRow (line 455) | void resultSet_refreshRow(FilterChain chain, ResultSetProxy resultSet)...
    method resultSet_cancelRowUpdates (line 457) | void resultSet_cancelRowUpdates(FilterChain chain, ResultSetProxy resu...
    method resultSet_moveToInsertRow (line 459) | void resultSet_moveToInsertRow(FilterChain chain, ResultSetProxy resul...
    method resultSet_moveToCurrentRow (line 461) | void resultSet_moveToCurrentRow(FilterChain chain, ResultSetProxy resu...
    method resultSet_getStatement (line 463) | Statement resultSet_getStatement(FilterChain chain, ResultSetProxy res...
    method resultSet_getObject (line 465) | Object resultSet_getObject(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_getRef (line 468) | Ref resultSet_getRef(FilterChain chain, ResultSetProxy resultSet, int ...
    method resultSet_getBlob (line 470) | Blob resultSet_getBlob(FilterChain chain, ResultSetProxy resultSet, in...
    method resultSet_getClob (line 472) | Clob resultSet_getClob(FilterChain chain, ResultSetProxy resultSet, in...
    method resultSet_getArray (line 474) | Array resultSet_getArray(FilterChain chain, ResultSetProxy resultSet, ...
    method resultSet_getObject (line 476) | Object resultSet_getObject(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_getRef (line 479) | Ref resultSet_getRef(FilterChain chain, ResultSetProxy resultSet, Stri...
    method resultSet_getBlob (line 481) | Blob resultSet_getBlob(FilterChain chain, ResultSetProxy resultSet, St...
    method resultSet_getClob (line 483) | Clob resultSet_getClob(FilterChain chain, ResultSetProxy resultSet, St...
    method resultSet_getArray (line 485) | Array resultSet_getArray(FilterChain chain, ResultSetProxy resultSet, ...
    method resultSet_getDate (line 487) | java.sql.Date resultSet_getDate(FilterChain chain, ResultSetProxy resu...
    method resultSet_getDate (line 490) | java.sql.Date resultSet_getDate(FilterChain chain, ResultSetProxy resu...
    method resultSet_getTime (line 493) | java.sql.Time resultSet_getTime(FilterChain chain, ResultSetProxy resu...
    method resultSet_getTime (line 496) | java.sql.Time resultSet_getTime(FilterChain chain, ResultSetProxy resu...
    method resultSet_getTimestamp (line 499) | java.sql.Timestamp resultSet_getTimestamp(FilterChain chain,
    method resultSet_getTimestamp (line 505) | java.sql.Timestamp resultSet_getTimestamp(FilterChain chain, ResultSet...
    method resultSet_getURL (line 508) | java.net.URL resultSet_getURL(FilterChain chain, ResultSetProxy result...
    method resultSet_getURL (line 510) | java.net.URL resultSet_getURL(FilterChain chain, ResultSetProxy result...
    method resultSet_updateRef (line 512) | void resultSet_updateRef(FilterChain chain, ResultSetProxy resultSet, ...
    method resultSet_updateRef (line 515) | void resultSet_updateRef(FilterChain chain, ResultSetProxy resultSet, ...
    method resultSet_updateBlob (line 518) | void resultSet_updateBlob(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_updateBlob (line 521) | void resultSet_updateBlob(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_updateClob (line 524) | void resultSet_updateClob(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_updateClob (line 527) | void resultSet_updateClob(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_updateArray (line 530) | void resultSet_updateArray(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_updateArray (line 533) | void resultSet_updateArray(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_getRowId (line 536) | RowId resultSet_getRowId(FilterChain chain, ResultSetProxy resultSet, ...
    method resultSet_getRowId (line 538) | RowId resultSet_getRowId(FilterChain chain, ResultSetProxy resultSet, ...
    method resultSet_updateRowId (line 540) | void resultSet_updateRowId(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_updateRowId (line 543) | void resultSet_updateRowId(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_getHoldability (line 546) | int resultSet_getHoldability(FilterChain chain, ResultSetProxy resultS...
    method resultSet_isClosed (line 548) | boolean resultSet_isClosed(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_updateNString (line 550) | void resultSet_updateNString(FilterChain chain, ResultSetProxy resultS...
    method resultSet_updateNString (line 553) | void resultSet_updateNString(FilterChain chain, ResultSetProxy resultS...
    method resultSet_updateNClob (line 556) | void resultSet_updateNClob(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_updateNClob (line 559) | void resultSet_updateNClob(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_getNClob (line 562) | NClob resultSet_getNClob(FilterChain chain, ResultSetProxy resultSet, ...
    method resultSet_getNClob (line 564) | NClob resultSet_getNClob(FilterChain chain, ResultSetProxy resultSet, ...
    method resultSet_getSQLXML (line 566) | SQLXML resultSet_getSQLXML(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_getSQLXML (line 568) | SQLXML resultSet_getSQLXML(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_updateSQLXML (line 570) | void resultSet_updateSQLXML(FilterChain chain, ResultSetProxy resultSe...
    method resultSet_updateSQLXML (line 573) | void resultSet_updateSQLXML(FilterChain chain, ResultSetProxy resultSe...
    method resultSet_getNString (line 576) | String resultSet_getNString(FilterChain chain, ResultSetProxy resultSe...
    method resultSet_getNString (line 578) | String resultSet_getNString(FilterChain chain, ResultSetProxy resultSe...
    method resultSet_getNCharacterStream (line 580) | java.io.Reader resultSet_getNCharacterStream(FilterChain chain, Result...
    method resultSet_getNCharacterStream (line 583) | java.io.Reader resultSet_getNCharacterStream(FilterChain chain, Result...
    method resultSet_updateNCharacterStream (line 586) | void resultSet_updateNCharacterStream(FilterChain chain, ResultSetProx...
    method resultSet_updateNCharacterStream (line 589) | void resultSet_updateNCharacterStream(FilterChain chain, ResultSetProx...
    method resultSet_updateAsciiStream (line 592) | void resultSet_updateAsciiStream(FilterChain chain, ResultSetProxy res...
    method resultSet_updateBinaryStream (line 595) | void resultSet_updateBinaryStream(FilterChain chain, ResultSetProxy re...
    method resultSet_updateCharacterStream (line 598) | void resultSet_updateCharacterStream(FilterChain chain, ResultSetProxy...
    method resultSet_updateAsciiStream (line 601) | void resultSet_updateAsciiStream(FilterChain chain, ResultSetProxy res...
    method resultSet_updateBinaryStream (line 604) | void resultSet_updateBinaryStream(FilterChain chain, ResultSetProxy re...
    method resultSet_updateCharacterStream (line 607) | void resultSet_updateCharacterStream(FilterChain chain, ResultSetProxy...
    method resultSet_updateBlob (line 610) | void resultSet_updateBlob(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_updateBlob (line 613) | void resultSet_updateBlob(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_updateClob (line 616) | void resultSet_updateClob(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_updateClob (line 619) | void resultSet_updateClob(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_updateNClob (line 622) | void resultSet_updateNClob(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_updateNClob (line 625) | void resultSet_updateNClob(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_updateNCharacterStream (line 628) | void resultSet_updateNCharacterStream(FilterChain chain,
    method resultSet_updateNCharacterStream (line 634) | void resultSet_updateNCharacterStream(FilterChain chain, ResultSetProx...
    method resultSet_updateAsciiStream (line 637) | void resultSet_updateAsciiStream(FilterChain chain,
    method resultSet_updateBinaryStream (line 643) | void resultSet_updateBinaryStream(FilterChain chain, ResultSetProxy re...
    method resultSet_updateCharacterStream (line 646) | void resultSet_updateCharacterStream(FilterChain chain, ResultSetProxy...
    method resultSet_updateAsciiStream (line 649) | void resultSet_updateAsciiStream(FilterChain chain, ResultSetProxy res...
    method resultSet_updateBinaryStream (line 652) | void resultSet_updateBinaryStream(FilterChain chain, ResultSetProxy re...
    method resultSet_updateCharacterStream (line 655) | void resultSet_updateCharacterStream(FilterChain chain, ResultSetProxy...
    method resultSet_updateBlob (line 658) | void resultSet_updateBlob(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_updateBlob (line 661) | void resultSet_updateBlob(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_updateClob (line 664) | void resultSet_updateClob(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_updateClob (line 667) | void resultSet_updateClob(FilterChain chain, ResultSetProxy resultSet,...
    method resultSet_updateNClob (line 670) | void resultSet_updateNClob(FilterChain chain, ResultSetProxy resultSet...
    method resultSet_updateNClob (line 673) | void resultSet_updateNClob(FilterChain chain, ResultSetProxy resultSet...
    method statement_executeQuery (line 678) | ResultSetProxy statement_executeQuery(FilterChain chain, StatementProx...
    method statement_executeUpdate (line 680) | int statement_executeUpdate(FilterChain chain, StatementProxy statemen...
    method statement_close (line 682) | void statement_close(FilterChain chain, StatementProxy statement) thro...
    method statement_getMaxFieldSize (line 684) | int statement_getMaxFieldSize(FilterChain chain, StatementProxy statem...
    method statement_setMaxFieldSize (line 686) | void statement_setMaxFieldSize(FilterChain chain, StatementProxy state...
    method statement_getMaxRows (line 688) | int statement_getMaxRows(FilterChain chain, StatementProxy statement) ...
    method statement_setMaxRows (line 690) | void statement_setMaxRows(FilterChain chain, StatementProxy statement,...
    method statement_setEscapeProcessing (line 692) | void statement_setEscapeProcessing(FilterChain chain, StatementProxy s...
    method statement_getQueryTimeout (line 694) | int statement_getQueryTimeout(FilterChain chain, StatementProxy statem...
    method statement_setQueryTimeout (line 696) | void statement_setQueryTimeout(FilterChain chain, StatementProxy state...
    method statement_cancel (line 698) | void statement_cancel(FilterChain chain, StatementProxy statement) thr...
    method statement_getWarnings (line 700) | SQLWarning statement_getWarnings(FilterChain chain, StatementProxy sta...
    method statement_clearWarnings (line 702) | void statement_clearWarnings(FilterChain chain, StatementProxy stateme...
    method statement_setCursorName (line 704) | void statement_setCursorName(FilterChain chain, StatementProxy stateme...
    method statement_execute (line 706) | boolean statement_execute(FilterChain chain, StatementProxy statement,...
    method statement_getResultSet (line 708) | ResultSetProxy statement_getResultSet(FilterChain chain, StatementProx...
    method statement_getUpdateCount (line 710) | int statement_getUpdateCount(FilterChain chain, StatementProxy stateme...
    method statement_getMoreResults (line 712) | boolean statement_getMoreResults(FilterChain chain, StatementProxy sta...
    method statement_setFetchDirection (line 714) | void statement_setFetchDirection(FilterChain chain, StatementProxy sta...
    method statement_getFetchDirection (line 716) | int statement_getFetchDirection(FilterChain chain, StatementProxy stat...
    method statement_setFetchSize (line 718) | void statement_setFetchSize(FilterChain chain, StatementProxy statemen...
    method statement_getFetchSize (line 720) | int statement_getFetchSize(FilterChain chain, StatementProxy statement...
    method statement_getResultSetConcurrency (line 722) | int statement_getResultSetConcurrency(FilterChain chain, StatementProx...
    method statement_getResultSetType (line 724) | int statement_getResultSetType(FilterChain chain, StatementProxy state...
    method statement_addBatch (line 726) | void statement_addBatch(FilterChain chain, StatementProxy statement, S...
    method statement_clearBatch (line 728) | void statement_clearBatch(FilterChain chain, StatementProxy statement)...
    method statement_executeBatch (line 730) | int[] statement_executeBatch(FilterChain chain, StatementProxy stateme...
    method statement_getConnection (line 732) | Connection statement_getConnection(FilterChain chain, StatementProxy s...
    method statement_getMoreResults (line 734) | boolean statement_getMoreResults(FilterChain chain, StatementProxy sta...
    method statement_getGeneratedKeys (line 736) | ResultSetProxy statement_getGeneratedKeys(FilterChain chain, Statement...
    method statement_executeUpdate (line 738) | int statement_executeUpdate(FilterChain chain, StatementProxy statemen...
    method statement_executeUpdate (line 741) | int statement_executeUpdate(FilterChain chain, StatementProxy statemen...
    method statement_executeUpdate (line 744) | int statement_executeUpdate(FilterChain chain, StatementProxy statemen...
    method statement_execute (line 747) | boolean statement_execute(FilterChain chain, StatementProxy statement,...
    method statement_execute (line 750) | boolean statement_execute(FilterChain chain, StatementProxy statement,...
    method statement_execute (line 753) | boolean statement_execute(FilterChain chain, StatementProxy statement,...
    method statement_getResultSetHoldability (line 756) | int statement_getResultSetHoldability(FilterChain chain, StatementProx...
    method statement_isClosed (line 758) | boolean statement_isClosed(FilterChain chain, StatementProxy statement...
    method statement_setPoolable (line 760) | void statement_setPoolable(FilterChain chain, StatementProxy statement...
    method statement_isPoolable (line 762) | boolean statement_isPoolable(FilterChain chain, StatementProxy stateme...
    method preparedStatement_executeQuery (line 766) | ResultSetProxy preparedStatement_executeQuery(FilterChain chain, Prepa...
    method preparedStatement_executeUpdate (line 769) | int preparedStatement_executeUpdate(FilterChain chain, PreparedStateme...
    method preparedStatement_setNull (line 771) | void preparedStatement_setNull(FilterChain chain, PreparedStatementPro...
    method preparedStatement_setBoolean (line 774) | void preparedStatement_setBoolean(FilterChain chain,
    method preparedStatement_setByte (line 780) | void preparedStatement_setByte(FilterChain chain, PreparedStatementPro...
    method preparedStatement_setShort (line 783) | void preparedStatement_setShort(FilterChain chain, PreparedStatementPr...
    method preparedStatement_setInt (line 786) | void preparedStatement_setInt(FilterChain chain, PreparedStatementProx...
    method preparedStatement_setLong (line 789) | void preparedStatement_setLong(FilterChain chain, PreparedStatementPro...
    method preparedStatement_setFloat (line 792) | void preparedStatement_setFloat(FilterChain chain, PreparedStatementPr...
    method preparedStatement_setDouble (line 795) | void preparedStatement_setDouble(FilterChain chain, PreparedStatementP...
    method preparedStatement_setBigDecimal (line 798) | void preparedStatement_setBigDecimal(FilterChain chain, PreparedStatem...
    method preparedStatement_setString (line 801) | void preparedStatement_setString(FilterChain chain, PreparedStatementP...
    method preparedStatement_setBytes (line 804) | void preparedStatement_setBytes(FilterChain chain, PreparedStatementPr...
    method preparedStatement_setDate (line 807) | void preparedStatement_setDate(FilterChain chain, PreparedStatementPro...
    method preparedStatement_setTime (line 810) | void preparedStatement_setTime(FilterChain chain, PreparedStatementPro...
    method preparedStatement_setTimestamp (line 813) | void preparedStatement_setTimestamp(FilterChain chain, PreparedStateme...
    method preparedStatement_setAsciiStream (line 816) | void preparedStatement_setAsciiStream(FilterChain chain, PreparedState...
    method preparedStatement_setUnicodeStream (line 819) | void preparedStatement_setUnicodeStream(FilterChain chain, PreparedSta...
    method preparedStatement_setBinaryStream (line 822) | void preparedStatement_setBinaryStream(FilterChain chain, PreparedStat...
    method preparedStatement_clearParameters (line 825) | void preparedStatement_clearParameters(FilterChain chain, PreparedStat...
    method preparedStatement_setObject (line 827) | void preparedStatement_setObject(FilterChain chain, PreparedStatementP...
    method preparedStatement_setObject (line 830) | void preparedStatement_setObject(FilterChain chain, PreparedStatementP...
    method preparedStatement_execute (line 833) | boolean preparedStatement_execute(FilterChain chain, PreparedStatement...
    method preparedStatement_addBatch (line 835) | void preparedStatement_addBatch(FilterChain chain, PreparedStatementPr...
    method preparedStatement_setCharacterStream (line 837) | void preparedStatement_setCharacterStream(FilterChain chain, PreparedS...
    method preparedStatement_setRef (line 840) | void preparedStatement_setRef(FilterChain chain, PreparedStatementProx...
    method preparedStatement_setBlob (line 843) | void preparedStatement_setBlob(FilterChain chain, PreparedStatementPro...
    method preparedStatement_setClob (line 846) | void preparedStatement_setClob(FilterChain chain, PreparedStatementPro...
    method preparedStatement_setArray (line 849) | void preparedStatement_setArray(FilterChain chain, PreparedStatementPr...
    method preparedStatement_getMetaData (line 852) | ResultSetMetaData preparedStatement_getMetaData(FilterChain chain, Pre...
    method preparedStatement_setDate (line 855) | void preparedStatement_setDate(FilterChain chain, PreparedStatementPro...
    method preparedStatement_setTime (line 858) | void preparedStatement_setTime(FilterChain chain, PreparedStatementPro...
    method preparedStatement_setTimestamp (line 861) | void preparedStatement_setTimestamp(FilterChain chain, PreparedStateme...
    method preparedStatement_setNull (line 864) | void preparedStatement_setNull(FilterChain chain, PreparedStatementPro...
    method preparedStatement_setURL (line 867) | void preparedStatement_setURL(FilterChain chain, PreparedStatementProx...
    method preparedStatement_getParameterMetaData (line 870) | ParameterMetaData preparedStatement_getParameterMetaData(FilterChain c...
    method preparedStatement_setRowId (line 873) | void preparedStatement_setRowId(FilterChain chain, PreparedStatementPr...
    method preparedStatement_setNString (line 876) | void preparedStatement_setNString(FilterChain chain, PreparedStatement...
    method preparedStatement_setNCharacterStream (line 879) | void preparedStatement_setNCharacterStream(FilterChain chain, Prepared...
    method preparedStatement_setNClob (line 882) | void preparedStatement_setNClob(FilterChain chain,
    method preparedStatement_setClob (line 888) | void preparedStatement_setClob(FilterChain chain, PreparedStatementPro...
    method preparedStatement_setBlob (line 891) | void preparedStatement_setBlob(FilterChain chain, PreparedStatementPro...
    method preparedStatement_setNClob (line 894) | void preparedStatement_setNClob(FilterChain chain, PreparedStatementPr...
    method preparedStatement_setSQLXML (line 897) | void preparedStatement_setSQLXML(FilterChain chain, PreparedStatementP...
    method preparedStatement_setObject (line 900) | void preparedStatement_setObject(FilterChain chain, PreparedStatementP...
    method preparedStatement_setAsciiStream (line 903) | void preparedStatement_setAsciiStream(FilterChain chain, PreparedState...
    method preparedStatement_setBinaryStream (line 906) | void preparedStatement_setBinaryStream(FilterChain chain, PreparedStat...
    method preparedStatement_setCharacterStream (line 909) | void preparedStatement_setCharacterStream(FilterChain chain, PreparedS...
    method preparedStatement_setAsciiStream (line 912) | void preparedStatement_setAsciiStream(FilterChain chain, PreparedState...
    method preparedStatement_setBinaryStream (line 915) | void preparedStatement_setBinaryStream(FilterChain chain, PreparedStat...
    method preparedStatement_setCharacterStream (line 918) | void preparedStatement_setCharacterStream(FilterChain chain, PreparedS...
    method preparedStatement_setNCharacterStream (line 921) | void preparedStatement_setNCharacterStream(FilterChain chain, Prepared...
    method preparedStatement_setClob (line 924) | void preparedStatement_setClob(FilterChain chain, PreparedStatementPro...
    method preparedStatement_setBlob (line 927) | void preparedStatement_setBlob(FilterChain chain, PreparedStatementPro...
    method preparedStatement_setNClob (line 930) | void preparedStatement_setNClob(FilterChain chain, PreparedStatementPr...
    method callableStatement_registerOutParameter (line 935) | void callableStatement_registerOutParameter(FilterChain chain, Callabl...
    method callableStatement_registerOutParameter (line 938) | void callableStatement_registerOutParameter(FilterChain chain, Callabl...
    method callableStatement_wasNull (line 941) | boolean callableStatement_wasNull(FilterChain chain, CallableStatement...
    method callableStatement_getString (line 943) | String callableStatement_getString(FilterChain chain, CallableStatemen...
    method callableStatement_getBoolean (line 946) | boolean callableStatement_getBoolean(FilterChain chain, CallableStatem...
    method callableStatement_getByte (line 949) | byte callableStatement_getByte(FilterChain chain, CallableStatementPro...
    method callableStatement_getShort (line 952) | short callableStatement_getShort(FilterChain chain, CallableStatementP...
    method callableStatement_getInt (line 955) | int callableStatement_getInt(FilterChain chain, CallableStatementProxy...
    method callableStatement_getLong (line 958) | long callableStatement_getLong(FilterChain chain, CallableStatementPro...
    method callableStatement_getFloat (line 961) | float callableStatement_getFloat(FilterChain chain, CallableStatementP...
    method callableStatement_getDouble (line 964) | double callableStatement_getDouble(FilterChain chain, CallableStatemen...
    method callableStatement_getBigDecimal (line 967) | BigDecimal callableStatement_getBigDecimal(FilterChain chain, Callable...
    method callableStatement_getBytes (line 970) | byte[] callableStatement_getBytes(FilterChain chain, CallableStatement...
    method callableStatement_getDate (line 973) | java.sql.Date callableStatement_getDate(FilterChain chain, CallableSta...
    method callableStatement_getTime (line 976) | java.sql.Time callableStatement_getTime(FilterChain chain, CallableSta...
    method callableStatement_getTimestamp (line 979) | java.sql.Timestamp callableStatement_getTimestamp(FilterChain chain, C...
    method callableStatement_getObject (line 982) | Object callableStatement_getObject(FilterChain chain, CallableStatemen...
    method callableStatement_getBigDecimal (line 985) | BigDecimal callableStatement_getBigDecimal(FilterChain chain, Callable...
    method callableStatement_getObject (line 988) | Object callableStatement_getObject(FilterChain chain, CallableStatemen...
    method callableStatement_getRef (line 991) | Ref callableStatement_getRef(FilterChain chain, CallableStatementProxy...
    method callableStatement_getBlob (line 994) | Blob callableStatement_getBlob(FilterChain chain, CallableStatementPro...
    method callableStatement_getClob (line 997) | Clob callableStatement_getClob(FilterChain chain, CallableStatementPro...
    method callableStatement_getArray (line 1000) | Array callableStatement_getArray(FilterChain chain, CallableStatementP...
    method callableStatement_getDate (line 1003) | java.sql.Date callableStatement_getDate(FilterChain chain, CallableSta...
    method callableStatement_getTime (line 1006) | java.sql.Time callableStatement_getTime(FilterChain chain, CallableSta...
    method callableStatement_getTimestamp (line 1009) | java.sql.Timestamp callableStatement_getTimestamp(FilterChain chain, C...
    method callableStatement_registerOutParameter (line 1012) | void callableStatement_registerOutParameter(FilterChain chain, Callabl...
    method callableStatement_registerOutParameter (line 1015) | void callableStatement_registerOutParameter(FilterChain chain, Callabl...
    method callableStatement_registerOutParameter (line 1018) | void callableStatement_registerOutParameter(FilterChain chain, Callabl...
    method callableStatement_registerOutParameter (line 1021) | void callableStatement_registerOutParameter(FilterChain chain, Callabl...
    method callableStatement_getURL (line 1024) | java.net.URL callableStatement_getURL(FilterChain chain, CallableState...
    method callableStatement_setURL (line 1027) | void callableStatement_setURL(FilterChain chain, CallableStatementProx...
    method callableStatement_setNull (line 1030) | void callableStatement_setNull(FilterChain chain, CallableStatementPro...
    method callableStatement_setBoolean (line 1033) | void callableStatement_setBoolean(FilterChain chain, CallableStatement...
    method callableStatement_setByte (line 1036) | void callableStatement_setByte(FilterChain chain, CallableStatementPro...
    method callableStatement_setShort (line 1039) | void callableStatement_setShort(FilterChain chain, CallableStatementPr...
    method callableStatement_setInt (line 1042) | void callableStatement_setInt(FilterChain chain, CallableStatementProx...
    method callableStatement_setLong (line 1045) | void callableStatement_setLong(FilterChain chain, CallableStatementPro...
    method callableStatement_setFloat (line 1048) | void callableStatement_setFloat(FilterChain chain, CallableStatementPr...
    method callableStatement_setDouble (line 1051) | void callableStatement_setDouble(FilterChain chain,
    method callableStatement_setBigDecimal (line 1057) | void callableStatement_setBigDecimal(FilterChain chain, CallableStatem...
    method callableStatement_setString (line 1060) | void callableStatement_setString(FilterChain chain,
    method callableStatement_setBytes (line 1066) | void callableStatement_setBytes(FilterChain chain, CallableStatementPr...
    method callableStatement_setDate (line 1069) | void callableStatement_setDate(FilterChain chain, CallableStatementPro...
    method callableStatement_setTime (line 1072) | void callableStatement_setTime(FilterChain chain, CallableStatementPro...
    method callableStatement_setTimestamp (line 1075) | void callableStatement_setTimestamp(FilterChain chain, CallableStateme...
    method callableStatement_setAsciiStream (line 1078) | void callableStatement_setAsciiStream(FilterChain chain, CallableState...
    method callableStatement_setBinaryStream (line 1081) | void callableStatement_setBinaryStream(FilterChain chain, CallableStat...
    method callableStatement_setObject (line 1084) | void callableStatement_setObject(FilterChain chain, CallableStatementP...
    method callableStatement_setObject (line 1087) | void callableStatement_setObject(FilterChain chain, CallableStatementP...
    method callableStatement_setObject (line 1090) | void callableStatement_setObject(FilterChain chain,
    method callableStatement_setCharacterStream (line 1096) | void callableStatement_setCharacterStream(FilterChain chain, CallableS...
    method callableStatement_setDate (line 1100) | void callableStatement_setDate(FilterChain chain, CallableStatementPro...
    method callableStatement_setTime (line 1103) | void callableStatement_setTime(FilterChain chain, CallableStatementPro...
    method callableStatement_setTimestamp (line 1106) | void callableStatement_setTimestamp(FilterChain chain, CallableStateme...
    method callableStatement_setNull (line 1109) | void callableStatement_setNull(FilterChain chain, CallableStatementPro...
    method callableStatement_getString (line 1112) | String callableStatement_getString(FilterChain chain, CallableStatemen...
    method callableStatement_getBoolean (line 1115) | boolean callableStatement_getBoolean(FilterChain chain, CallableStatem...
    method callableStatement_getByte (line 1118) | byte callableStatement_getByte(FilterChain chain, CallableStatementPro...
    method callableStatement_getShort (line 1121) | short callableStatement_getShort(FilterChain chain, CallableStatementP...
    method callableStatement_getInt (line 1124) | int callableStatement_getInt(FilterChain chain, CallableStatementProxy...
    method callableStatement_getLong (line 1127) | long callableStatement_getLong(FilterChain chain, CallableStatementPro...
    method callableStatement_getFloat (line 1130) | float callableStatement_getFloat(FilterChain chain, CallableStatementP...
    method callableStatement_getDouble (line 1133) | double callableStatement_getDouble(FilterChain chain, CallableStatemen...
    method callableStatement_getBytes (line 1136) | byte[] callableStatement_getBytes(FilterChain chain, CallableStatement...
    method callableStatement_getDate (line 1139) | java.sql.Date callableStatement_getDate(FilterChain chain, CallableSta...
    method callableStatement_getTime (line 1142) | java.sql.Time callableStatement_getTime(FilterChain chain, CallableSta...
    method callableStatement_getTimestamp (line 1145) | java.sql.Timestamp callableStatement_getTimestamp(FilterChain chain, C...
    method callableStatement_getObject (line 1148) | Object callableStatement_getObject(FilterChain chain, CallableStatemen...
    method callableStatement_getBigDecimal (line 1151) | BigDecimal callableStatement_getBigDecimal(FilterChain chain,
    method callableStatement_getObject (line 1156) | Object callableStatement_getObject(FilterChain chain, CallableStatemen...
    method callableStatement_getRef (line 1159) | Ref callableStatement_getRef(FilterChain chain, CallableStatementProxy...
    method callableStatement_getBlob (line 1162) | Blob callableStatement_getBlob(FilterChain chain, CallableStatementPro...
    method callableStatement_getClob (line 1165) | Clob callableStatement_getClob(FilterChain chain, CallableStatementPro...
    method callableStatement_getArray (line 1168) | Array callableStatement_getArray(FilterChain chain, CallableStatementP...
    method callableStatement_getDate (line 1171) | java.sql.Date callableStatement_getDate(FilterChain chain, CallableSta...
    method callableStatement_getTime (line 1174) | java.sql.Time callableStatement_getTime(FilterChain chain, CallableSta...
    method callableStatement_getTimestamp (line 1177) | java.sql.Timestamp callableStatement_getTimestamp(FilterChain chain, C...
    method callableStatement_getURL (line 1180) | java.net.URL callableStatement_getURL(FilterChain chain, CallableState...
    method callableStatement_getRowId (line 1183) | RowId callableStatement_getRowId(FilterChain chain, CallableStatementP...
    method callableStatement_getRowId (line 1186) | RowId callableStatement_getRowId(FilterChain chain, CallableStatementP...
    method callableStatement_setRowId (line 1189) | void callableStatement_setRowId(FilterChain chain, CallableStatementPr...
    method callableStatement_setNString (line 1192) | void callableStatement_setNString(FilterChain chain, CallableStatement...
    method callableStatement_setNCharacterStream (line 1195) | void callableStatement_setNCharacterStream(FilterChain chain, Callable...
    method callableStatement_setNClob (line 1198) | void callableStatement_setNClob(FilterChain chain, CallableStatementPr...
    method callableStatement_setClob (line 1201) | void callableStatement_setClob(FilterChain chain, CallableStatementPro...
    method callableStatement_setBlob (line 1204) | void callableStatement_setBlob(FilterChain chain, CallableStatementPro...
    method callableStatement_setNClob (line 1207) | void callableStatement_setNClob(FilterChain chain, CallableStatementPr...
    method callableStatement_getNClob (line 1210) | NClob callableStatement_getNClob(FilterChain chain, CallableStatementP...
    method callableStatement_getNClob (line 1213) | NClob callableStatement_getNClob(FilterChain chain, CallableStatementP...
    method callableStatement_setSQLXML (line 1216) | void callableStatement_setSQLXML(FilterChain chain, CallableStatementP...
    method callableStatement_getSQLXML (line 1219) | SQLXML callableStatement_getSQLXML(FilterChain chain, CallableStatemen...
    method callableStatement_getSQLXML (line 1222) | SQLXML callableStatement_getSQLXML(FilterChain chain, CallableStatemen...
    method callableStatement_getNString (line 1225) | String callableStatement_getNString(FilterChain chain, CallableStateme...
    method callableStatement_getNString (line 1228) | String callableStatement_getNString(FilterChain chain, CallableStateme...
    method callableStatement_getNCharacterStream (line 1231) | java.io.Reader callableStatement_getNCharacterStream(FilterChain chain...
    method callableStatement_getNCharacterStream (line 1234) | java.io.Reader callableStatement_getNCharacterStream(FilterChain chain...
    method callableStatement_getCharacterStream (line 1237) | java.io.Reader callableStatement_getCharacterStream(FilterChain chain,...
    method callableStatement_getCharacterStream (line 1240) | java.io.Reader callableStatement_getCharacterStream(FilterChain chain,...
    method callableStatement_setBlob (line 1243) | void callableStatement_setBlob(FilterChain chain, CallableStatementPro...
    method callableStatement_setClob (line 1246) | void callableStatement_setClob(FilterChain chain, CallableStatementPro...
    method callableStatement_setAsciiStream (line 1249) | void callableStatement_setAsciiStream(FilterChain chain, CallableState...
    method callableStatement_setBinaryStream (line 1252) | void callableStatement_setBinaryStream(FilterChain chain, CallableStat...
    method callableStatement_setCharacterStream (line 1255) | void callableStatement_setCharacterStream(FilterChain chain, CallableS...
    method callableStatement_setAsciiStream (line 1259) | void callableStatement_setAsciiStream(FilterChain chain, CallableState...
    method callableStatement_setBinaryStream (line 1262) | void callableStatement_setBinaryStream(FilterChain chain, CallableStat...
    method callableStatement_setCharacterStream (line 1265) | void callableStatement_setCharacterStream(FilterChain chain, CallableS...
    method callableStatement_setNCharacterStream (line 1268) | void callableStatement_setNCharacterStream(FilterChain chain, Callable...
    method callableStatement_setClob (line 1271) | void callableStatement_setClob(FilterChain chain, CallableStatementPro...
    method callableStatement_setBlob (line 1274) | void callableStatement_setBlob(FilterChain chain, CallableStatementPro...
    method callableStatement_setNClob (line 1277) | void callableStatement_setNClob(FilterChain chain, CallableStatementPr...
    method unwrap (line 1280) | <T> T unwrap(FilterChain chain, Wrapper wrapper, java.lang.Class<T> if...
    method isWrapperFor (line 1282) | boolean isWrapperFor(FilterChain chain, Wrapper wrapper, java.lang.Cla...
    method clob_free (line 1284) | void clob_free(FilterChain chain, ClobProxy wrapper) throws SQLException;
    method clob_getAsciiStream (line 1286) | InputStream clob_getAsciiStream(FilterChain chain, ClobProxy wrapper) ...
    method clob_getCharacterStream (line 1288) | Reader clob_getCharacterStream(FilterChain chain, ClobProxy wrapper) t...
    method clob_getCharacterStream (line 1290) | Reader clob_getCharacterStream(FilterChain chain, ClobProxy wrapper, l...
    method clob_getSubString (line 1292) | String clob_getSubString(FilterChain chain, ClobProxy wrapper, long po...
    method clob_length (line 1294) | long clob_length(FilterChain chain, ClobProxy wrapper) throws SQLExcep...
    method clob_position (line 1296) | long clob_position(FilterChain chain, ClobProxy wrapper, String search...
    method clob_position (line 1298) | long clob_position(FilterChain chain, ClobProxy wrapper, Clob searchst...
    method clob_setAsciiStream (line 1300) | OutputStream clob_setAsciiStream(FilterChain chain, ClobProxy wrapper,...
    method clob_setCharacterStream (line 1302) | Writer clob_setCharacterStream(FilterChain chain, ClobProxy wrapper, l...
    method clob_setString (line 1304) | int clob_setString(FilterChain chain, ClobProxy wrapper, long pos, Str...
    method clob_setString (line 1306) | int clob_setString(FilterChain chain, ClobProxy wrapper, long pos, Str...
    method clob_truncate (line 1309) | void clob_truncate(FilterChain chain, ClobProxy wrapper, long len) thr...
    method dataSource_releaseConnection (line 1311) | void dataSource_releaseConnection(FilterChain chain, DruidPooledConnec...
    method dataSource_getConnection (line 1313) | DruidPooledConnection dataSource_getConnection(FilterChain chain, Drui...
    method resultSetMetaData_getColumnCount (line 1317) | int resultSetMetaData_getColumnCount(FilterChain chain, ResultSetMetaD...
    method resultSetMetaData_isAutoIncrement (line 1319) | boolean resultSetMetaData_isAutoIncrement(FilterChain chain, ResultSet...
    method resultSetMetaData_isCaseSensitive (line 1322) | boolean resultSetMetaData_isCaseSensitive(FilterChain chain, ResultSet...
    method resultSetMetaData_isSearchable (line 1325) | boolean resultSetMetaData_isSearchable(FilterChain chain, ResultSetMet...
    method resultSetMetaData_isCurrency (line 1328) | boolean resultSetMetaData_isCurrency(FilterChain chain, ResultSetMetaD...
    method resultSetMetaData_isNullable (line 1331) | int resultSetMetaData_isNullable(FilterChain chain, ResultSetMetaDataP...
    method resultSetMetaData_isSigned (line 1334) | boolean resultSetMetaData_isSigned(FilterChain chain, ResultSetMetaDat...
    method resultSetMetaData_getColumnDisplaySize (line 1337) | int resultSetMetaData_getColumnDisplaySize(FilterChain chain, ResultSe...
    method resultSetMetaData_getColumnLabel (line 1340) | String resultSetMetaData_getColumnLabel(FilterChain chain, ResultSetMe...
    method resultSetMetaData_getColumnName (line 1343) | String resultSetMetaData_getColumnName(FilterChain chain, ResultSetMet...
    method resultSetMetaData_getSchemaName (line 1346) | String resultSetMetaData_getSchemaName(FilterChain chain, ResultSetMet...
    method resultSetMetaData_getPrecision (line 1349) | int resultSetMetaData_getPrecision(FilterChain chain, ResultSetMetaDat...
    method resultSetMetaData_getScale (line 1352) | int resultSetMetaData_getScale(FilterChain chain, ResultSetMetaDataPro...
    method resultSetMetaData_getTableName (line 1354) | String resultSetMetaData_getTableName(FilterChain chain, ResultSetMeta...
    method resultSetMetaData_getCatalogName (line 1357) | String resultSetMetaData_getCatalogName(FilterChain chain, ResultSetMe...
    method resultSetMetaData_getColumnType (line 1360) | int resultSetMetaData_getColumnType(FilterChain chain, ResultSetMetaDa...
    method resultSetMetaData_getColumnTypeName (line 1363) | String resultSetMetaData_getColumnTypeName(FilterChain chain, ResultSe...
    method resultSetMetaData_isReadOnly (line 1366) | boolean resultSetMetaData_isReadOnly(FilterChain chain, ResultSetMetaD...
    method resultSetMetaData_isWritable (line 1369) | boolean resultSetMetaData_isWritable(FilterChain chain, ResultSetMetaD...
    method resultSetMetaData_isDefinitelyWritable (line 1372) | boolean resultSetMetaData_isDefinitelyWritable(FilterChain chain, Resu...
    method resultSetMetaData_getColumnClassName (line 1375) | String resultSetMetaData_getColumnClassName(FilterChain chain, ResultS...

FILE: core/src/main/java/com/alibaba/druid/filter/FilterAdapter.java
  class FilterAdapter (line 38) | public abstract class FilterAdapter extends NotificationBroadcasterSuppo...
    method init (line 39) | @Override
    method destroy (line 43) | @Override
    method configFromProperties (line 47) | public void configFromProperties(Properties properties) {
    method isWrapperFor (line 50) | @Override
    method unwrap (line 55) | @SuppressWarnings("unchecked")
    method callableStatement_getArray (line 63) | @Override
    method callableStatement_getArray (line 69) | @Override
    method callableStatement_getBigDecimal (line 75) | @Override
    method callableStatement_getBigDecimal (line 81) | @Override
    method callableStatement_getBigDecimal (line 87) | @Override
    method callableStatement_getBlob (line 93) | @Override
    method callableStatement_getBlob (line 99) | @Override
    method callableStatement_getBoolean (line 105) | @Override
    method callableStatement_getBoolean (line 111) | @Override
    method callableStatement_getByte (line 117) | @Override
    method callableStatement_getByte (line 123) | @Override
    method callableStatement_getBytes (line 129) | @Override
    method callableStatement_getBytes (line 135) | @Override
    method callableStatement_getCharacterStream (line 141) | @Override
    method callableStatement_getCharacterStream (line 147) | @Override
    method callableStatement_getClob (line 153) | @Override
    method callableStatement_getClob (line 159) | @Override
    method callableStatement_getDate (line 165) | @Override
    method callableStatement_getDate (line 171) | @Override
    method callableStatement_getDate (line 177) | @Override
    method callableStatement_getDate (line 183) | @Override
    method callableStatement_getDouble (line 189) | @Override
    method callableStatement_getDouble (line 195) | @Override
    method callableStatement_getFloat (line 201) | @Override
    method callableStatement_getFloat (line 207) | @Override
    method callableStatement_getInt (line 213) | @Override
    method callableStatement_getInt (line 219) | @Override
    method callableStatement_getLong (line 225) | @Override
    method callableStatement_getLong (line 231) | @Override
    method callableStatement_getNCharacterStream (line 237) | @Override
    method callableStatement_getNCharacterStream (line 243) | @Override
    method callableStatement_getNClob (line 249) | @Override
    method callableStatement_getNClob (line 255) | @Override
    method callableStatement_getNString (line 261) | @Override
    method callableStatement_getNString (line 267) | @Override
    method callableStatement_getObject (line 275) | @Override
    method callableStatement_getObject (line 281) | @Override
    method callableStatement_getObject (line 287) | @Override
    method callableStatement_getObject (line 293) | @Override
    method callableStatement_getRef (line 300) | @Override
    method callableStatement_getRef (line 306) | @Override
    method callableStatement_getRowId (line 312) | @Override
    method callableStatement_getRowId (line 318) | @Override
    method callableStatement_getShort (line 324) | @Override
    method callableStatement_getShort (line 330) | @Override
    method callableStatement_getSQLXML (line 336) | @Override
    method callableStatement_getSQLXML (line 342) | @Override
    method callableStatement_getString (line 348) | @Override
    method callableStatement_getString (line 354) | @Override
    method callableStatement_getTime (line 360) | @Override
    method callableStatement_getTime (line 368) | @Override
    method callableStatement_getTime (line 374) | @Override
    method callableStatement_getTime (line 380) | @Override
    method callableStatement_getTimestamp (line 386) | @Override
    method callableStatement_getTimestamp (line 392) | @Override
    method callableStatement_getTimestamp (line 398) | @Override
    method callableStatement_getTimestamp (line 404) | @Override
    method callableStatement_getURL (line 410) | @Override
    method callableStatement_getURL (line 418) | @Override
    method callableStatement_registerOutParameter (line 425) | @Override
    method callableStatement_registerOutParameter (line 431) | @Override
    method callableStatement_registerOutParameter (line 437) | @Override
    method callableStatement_registerOutParameter (line 444) | @Override
    method callableStatement_registerOutParameter (line 450) | @Override
    method callableStatement_registerOutParameter (line 457) | @Override
    method callableStatement_setAsciiStream (line 464) | @Override
    method callableStatement_setAsciiStream (line 470) | @Override
    method callableStatement_setAsciiStream (line 477) | @Override
    method callableStatement_setBigDecimal (line 484) | @Override
    method callableStatement_setBinaryStream (line 490) | @Override
    method callableStatement_setBinaryStream (line 496) | @Override
    method callableStatement_setBinaryStream (line 503) | @Override
    method callableStatement_setBlob (line 510) | @Override
    method callableStatement_setBlob (line 516) | @Override
    method callableStatement_setBlob (line 522) | @Override
    method callableStatement_setBoolean (line 528) | @Override
    method callableStatement_setByte (line 534) | @Override
    method callableStatement_setBytes (line 540) | @Override
    method callableStatement_setCharacterStream (line 546) | @Override
    method callableStatement_setCharacterStream (line 552) | @Override
    method callableStatement_setCharacterStream (line 559) | @Override
    method callableStatement_setClob (line 566) | @Override
    method callableStatement_setClob (line 572) | @Override
    method callableStatement_setClob (line 578) | @Override
    method callableStatement_setDate (line 584) | @Override
    method callableStatement_setDate (line 590) | @Override
    method callableStatement_setDouble (line 596) | @Override
    method callableStatement_setFloat (line 602) | @Override
    method callableStatement_setInt (line 608) | @Override
    method callableStatement_setLong (line 614) | @Override
    method callableStatement_setNCharacterStream (line 620) | @Override
    method callableStatement_setNCharacterStream (line 626) | @Override
    method callableStatement_setNClob (line 633) | @Override
    method callableStatement_setNClob (line 639) | @Override
    method callableStatement_setNClob (line 645) | @Override
    method callableStatement_setNString (line 651) | @Override
    method callableStatement_setNull (line 657) | @Override
    method callableStatement_setNull (line 663) | @Override
    method callableStatement_setObject (line 669) | @Override
    method callableStatement_setObject (line 675) | @Override
    method callableStatement_setObject (line 681) | @Override
    method callableStatement_setRowId (line 687) | @Override
    method callableStatement_setShort (line 693) | @Override
    method callableStatement_setSQLXML (line 699) | @Override
    method callableStatement_setString (line 705) | @Override
    method callableStatement_setTime (line 711) | @Override
    method callableStatement_setTime (line 717) | @Override
    method callableStatement_setTimestamp (line 723) | @Override
    method callableStatement_setTimestamp (line 729) | @Override
    method callableStatement_setURL (line 736) | @Override
    method callableStatement_wasNull (line 742) | @Override
    method connection_clearWarnings (line 747) | @Override
    method connection_close (line 752) | @Override
    method connection_commit (line 757) | @Override
    method connection_connect (line 762) | @Override
    method connection_createArrayOf (line 767) | @Override
    method connection_createBlob (line 773) | @Override
    method connection_createClob (line 778) | @Override
    method connection_createNClob (line 783) | @Override
    method connection_createSQLXML (line 788) | @Override
    method connection_createStatement (line 793) | @Override
    method connection_createStatement (line 799) | @Override
    method connection_createStatement (line 805) | @Override
    method connection_createStruct (line 812) | @Override
    method connection_getAutoCommit (line 818) | @Override
    method connection_getCatalog (line 823) | @Override
    method connection_getClientInfo (line 828) | @Override
    method connection_getClientInfo (line 833) | @Override
    method connection_getHoldability (line 839) | @Override
    method connection_getMetaData (line 844) | @Override
    method connection_getTransactionIsolation (line 849) | @Override
    method connection_getTypeMap (line 854) | @Override
    method connection_getWarnings (line 860) | @Override
    method connection_isClosed (line 865) | @Override
    method connection_isReadOnly (line 870) | @Override
    method connection_isValid (line 875) | @Override
    method connection_nativeSQL (line 880) | @Override
    method connection_prepareCall (line 885) | @Override
    method connection_prepareCall (line 891) | @Override
    method connection_prepareCall (line 898) | @Override
    method connection_prepareStatement (line 905) | @Override
    method connection_prepareStatement (line 911) | @Override
    method connection_prepareStatement (line 917) | @Override
    method connection_prepareStatement (line 924) | @Override
    method connection_prepareStatement (line 932) | @Override
    method connection_prepareStatement (line 938) | @Override
    method connection_releaseSavepoint (line 944) | @Override
    method connection_rollback (line 950) | @Override
    method connection_rollback (line 955) | @Override
    method connection_setAutoCommit (line 961) | @Override
    method connection_setCatalog (line 967) | @Override
    method connection_setClientInfo (line 973) | @Override
    method connection_setClientInfo (line 979) | @Override
    method connection_setHoldability (line 985) | @Override
    method connection_setReadOnly (line 991) | @Override
    method connection_setSavepoint (line 997) | @Override
    method connection_setSavepoint (line 1002) | @Override
    method connection_setTransactionIsolation (line 1008) | @Override
    method connection_setTypeMap (line 1014) | @Override
    method connection_getSchema (line 1020) | @Override
    method connection_setSchema (line 1025) | @Override
    method connection_abort (line 1030) | public void connection_abort(FilterChain chain, ConnectionProxy connec...
    method connection_setNetworkTimeout (line 1034) | public void connection_setNetworkTimeout(FilterChain chain,
    method connection_getNetworkTimeout (line 1041) | public int connection_getNetworkTimeout(FilterChain chain, ConnectionP...
    method isWrapperFor (line 1045) | @Override
    method preparedStatement_addBatch (line 1050) | @Override
    method preparedStatement_clearParameters (line 1055) | @Override
    method preparedStatement_execute (line 1061) | @Override
    method preparedStatement_executeQuery (line 1066) | @Override
    method preparedStatement_executeUpdate (line 1072) | @Override
    method preparedStatement_getMetaData (line 1078) | @Override
    method preparedStatement_getParameterMetaData (line 1084) | @Override
    method preparedStatement_setArray (line 1090) | @Override
    method preparedStatement_setAsciiStream (line 1096) | @Override
    method preparedStatement_setAsciiStream (line 1102) | @Override
    method preparedStatement_setAsciiStream (line 1109) | @Override
    method preparedStatement_setBigDecimal (line 1116) | @Override
    method preparedStatement_setBinaryStream (line 1122) | @Override
    method preparedStatement_setBinaryStream (line 1128) | @Override
    method preparedStatement_setBinaryStream (line 1135) | @Override
    method preparedStatement_setBlob (line 1142) | @Override
    method preparedStatement_setBlob (line 1148) | @Override
    method preparedStatement_setBlob (line 1154) | @Override
    method preparedStatement_setBoolean (line 1160) | @Override
    method preparedStatement_setByte (line 1166) | @Override
    method preparedStatement_setBytes (line 1172) | @Override
    method preparedStatement_setCharacterStream (line 1178) | @Override
    method preparedStatement_setCharacterStream (line 1184) | @Override
    method preparedStatement_setCharacterStream (line 1191) | @Override
    method preparedStatement_setClob (line 1198) | @Override
    method preparedStatement_setClob (line 1204) | @Override
    method preparedStatement_setClob (line 1210) | @Override
    method preparedStatement_setDate (line 1216) | @Override
    method preparedStatement_setDate (line 1222) | @Override
    method preparedStatement_setDouble (line 1228) | @Override
    method preparedStatement_setFloat (line 1234) | @Override
    method preparedStatement_setInt (line 1240) | @Override
    method preparedStatement_setLong (line 1246) | @Override
    method preparedStatement_setNCharacterStream (line 1252) | @Override
    method preparedStatement_setNCharacterStream (line 1258) | @Override
    method preparedStatement_setNClob (line 1265) | @Override
    method preparedStatement_setNClob (line 1271) | @Override
    method preparedStatement_setNClob (line 1277) | @Override
    method preparedStatement_setNString (line 1283) | @Override
    method preparedStatement_setNull (line 1289) | @Override
    method preparedStatement_setNull (line 1295) | @Override
    method preparedStatement_setObject (line 1301) | @Override
    method preparedStatement_setObject (line 1307) | @Override
    method preparedStatement_setObject (line 1313) | @Override
    method preparedStatement_setRef (line 1319) | @Override
    method preparedStatement_setRowId (line 1325) | @Override
    method preparedStatement_setShort (line 1331) | @Override
    method preparedStatement_setSQLXML (line 1337) | @Override
    method preparedStatement_setString (line 1343) | @Override
    method preparedStatement_setTime (line 1349) | @Override
    method preparedStatement_setTime (line 1355) | @Override
    method preparedStatement_setTimestamp (line 1361) | @Override
    method preparedStatement_setTimestamp (line 1367) | @Override
    method preparedStatement_setUnicodeStream (line 1373) | @Override
    method preparedStatement_setURL (line 1380) | @Override
    method resultSet_absolute (line 1386) | @Override
    method resultSet_afterLast (line 1391) | @Override
    method resultSet_beforeFirst (line 1396) | @Override
    method resultSet_cancelRowUpdates (line 1401) | @Override
    method resultSet_clearWarnings (line 1406) | @Override
    method resultSet_close (line 1411) | @Override
    method resultSet_deleteRow (line 1416) | @Override
    method resultSet_findColumn (line 1421) | @Override
    method resultSet_first (line 1426) | @Override
    method resultSet_getArray (line 1431) | @Override
    method resultSet_getArray (line 1436) | @Override
    method resultSet_getAsciiStream (line 1441) | @Override
    method resultSet_getAsciiStream (line 1447) | @Override
    method resultSet_getBigDecimal (line 1453) | @Override
    method resultSet_getBigDecimal (line 1459) | @Override
    method resultSet_getBigDecimal (line 1465) | @Override
    method resultSet_getBigDecimal (line 1471) | @Override
    method resultSet_getBinaryStream (line 1477) | @Override
    method resultSet_getBinaryStream (line 1483) | @Override
    method resultSet_getBlob (line 1489) | @Override
    method resultSet_getBlob (line 1494) | @Override
    method resultSet_getBoolean (line 1499) | @Override
    method resultSet_getBoolean (line 1504) | @Override
    method resultSet_getByte (line 1510) | @Override
    method resultSet_getByte (line 1515) | @Override
    method resultSet_getBytes (line 1520) | @Override
    method resultSet_getBytes (line 1525) | @Override
    method resultSet_getCharacterStream (line 1530) | @Override
    method resultSet_getCharacterStream (line 1536) | @Override
    method resultSet_getClob (line 1542) | @Override
    method resultSet_getClob (line 1547) | @Override
    method resultSet_getConcurrency (line 1552) | @Override
    method resultSet_getCursorName (line 1557) | @Override
    method resultSet_getDate (line 1562) | @Override
    method resultSet_getDate (line 1568) | @Override
    method resultSet_getDate (line 1574) | @Override
    method resultSet_getDate (line 1580) | @Override
    method resultSet_getDouble (line 1586) | @Override
    method resultSet_getDouble (line 1591) | @Override
    method resultSet_getFetchDirection (line 1598) | @Override
    method resultSet_getFetchSize (line 1603) | @Override
    method resultSet_getFloat (line 1608) | @Override
    method resultSet_getFloat (line 1613) | @Override
    method resultSet_getHoldability (line 1618) | @Override
    method resultSet_getInt (line 1623) | @Override
    method resultSet_getInt (line 1628) | @Override
    method resultSet_getLong (line 1633) | @Override
    method resultSet_getLong (line 1638) | @Override
    method resultSet_getMetaData (line 1643) | @Override
    method resultSet_getNCharacterStream (line 1648) | @Override
    method resultSet_getNCharacterStream (line 1654) | @Override
    method resultSet_getNClob (line 1660) | @Override
    method resultSet_getNClob (line 1665) | @Override
    method resultSet_getNString (line 1670) | @Override
    method resultSet_getNString (line 1675) | @Override
    method resultSet_getObject (line 1681) | @Override
    method resultSet_getObject (line 1686) | @Override
    method resultSet_getObject (line 1694) | @Override
    method resultSet_getObject (line 1700) | @Override
    method resultSet_getObject (line 1707) | @Override
    method resultSet_getObject (line 1715) | @Override
    method resultSet_getRef (line 1721) | @Override
    method resultSet_getRef (line 1726) | @Override
    method resultSet_getRow (line 1731) | @Override
    method resultSet_getRowId (line 1738) | @Override
    method resultSet_getRowId (line 1743) | @Override
    method resultSet_getShort (line 1748) | @Override
    method resultSet_getShort (line 1753) | @Override
    method resultSet_getSQLXML (line 1758) | @Override
    method resultSet_getSQLXML (line 1763) | @Override
    method resultSet_getStatement (line 1770) | @Override
    method resultSet_getString (line 1775) | @Override
    method resultSet_getString (line 1780) | @Override
    method resultSet_getTime (line 1787) | @Override
    method resultSet_getTime (line 1793) | @Override
    method resultSet_getTime (line 1799) | @Override
    method resultSet_getTime (line 1805) | @Override
    method resultSet_getTimestamp (line 1811) | @Override
    method resultSet_getTimestamp (line 1817) | @Override
    method resultSet_getTimestamp (line 1823) | @Override
    method resultSet_getTimestamp (line 1829) | @Override
    method resultSet_getType (line 1835) | @Override
    method resultSet_getUnicodeStream (line 1840) | @Override
    method resultSet_getUnicodeStream (line 1846) | @Override
    method resultSet_getURL (line 1852) | @Override
    method resultSet_getURL (line 1859) | @Override
    method resultSet_getWarnings (line 1865) | @Override
    method resultSet_insertRow (line 1870) | @Override
    method resultSet_isAfterLast (line 1875) | @Override
    method resultSet_isBeforeFirst (line 1880) | @Override
    method resultSet_isClosed (line 1885) | @Override
    method resultSet_isFirst (line 1890) | @Override
    method resultSet_isLast (line 1895) | @Override
    method resultSet_last (line 1900) | @Override
    method resultSet_moveToCurrentRow (line 1905) | @Override
    method resultSet_moveToInsertRow (line 1910) | @Override
    method resultSet_next (line 1915) | @Override
    method resultSet_previous (line 1920) | @Override
    method resultSet_refreshRow (line 1925) | @Override
    method resultSet_relative (line 1930) | @Override
    method resultSet_rowDeleted (line 1935) | @Override
    method resultSet_rowInserted (line 1940) | @Override
    method resultSet_rowUpdated (line 1945) | @Override
    method resultSet_setFetchDirection (line 1950) | @Override
    method resultSet_setFetchSize (line 1956) | @Override
    method resultSet_updateArray (line 1961) | @Override
    method resultSet_updateArray (line 1967) | @Override
    method resultSet_updateAsciiStream (line 1973) | @Override
    method resultSet_updateAsciiStream (line 1979) | @Override
    method resultSet_updateAsciiStream (line 1985) | @Override
    method resultSet_updateAsciiStream (line 1991) | @Override
    method resultSet_updateAsciiStream (line 1997) | @Override
    method resultSet_updateAsciiStream (line 2003) | @Override
    method resultSet_updateBigDecimal (line 2009) | @Override
    method resultSet_updateBigDecimal (line 2015) | @Override
    method resultSet_updateBinaryStream (line 2021) | @Override
    method resultSet_updateBinaryStream (line 2027) | @Override
    method resultSet_updateBinaryStream (line 2033) | @Override
    method resultSet_updateBinaryStream (line 2039) | @Override
    method resultSet_updateBinaryStream (line 2045) | @Override
    method resultSet_updateBinaryStream (line 2051) | @Override
    method resultSet_updateBlob (line 2057) | @Override
    method resultSet_updateBlob (line 2063) | @Override
    method resultSet_updateBlob (line 2069) | @Override
    method resultSet_updateBlob (line 2075) | @Override
    method resultSet_updateBlob (line 2081) | @Override
    method resultSet_updateBlob (line 2087) | @Override
    method resultSet_updateBoolean (line 2093) | @Override
    method resultSet_updateBoolean (line 2099) | @Override
    method resultSet_updateByte (line 2105) | @Override
    method resultSet_updateByte (line 2111) | @Override
    method resultSet_updateBytes (line 2117) | @Override
    method resultSet_updateBytes (line 2123) | @Override
    method resultSet_updateCharacterStream (line 2129) | @Override
    method resultSet_updateCharacterStream (line 2135) | @Override
    method resultSet_updateCharacterStream (line 2141) | @Override
    method resultSet_updateCharacterStream (line 2147) | @Override
    method resultSet_updateCharacterStream (line 2153) | @Override
    method resultSet_updateCharacterStream (line 2159) | @Override
    method resultSet_updateClob (line 2165) | @Override
    method resultSet_updateClob (line 2171) | @Override
    method resultSet_updateClob (line 2177) | @Override
    method resultSet_updateClob (line 2183) | @Override
    method resultSet_updateClob (line 2189) | @Override
    method resultSet_updateClob (line 2195) | @Override
    method resultSet_updateDate (line 2201) | @Override
    method resultSet_updateDate (line 2207) | @Override
    method resultSet_updateDouble (line 2213) | @Override
    method resultSet_updateDouble (line 2219) | @Override
    method resultSet_updateFloat (line 2225) | @Override
    method resultSet_updateFloat (line 2231) | @Override
    method resultSet_updateInt (line 2237) | @Override
    method resultSet_updateInt (line 2243) | @Override
    method resultSet_updateLong (line 2249) | @Override
    method resultSet_updateLong (line 2255) | @Override
    method resultSet_updateNCharacterStream (line 2261) | @Override
    method resultSet_updateNCharacterStream (line 2267) | @Override
    method resultSet_updateNCharacterStream (line 2273) | @Override
    method resultSet_updateNCharacterStream (line 2279) | @Override
    method resultSet_updateNClob (line 2285) | @Override
    method resultSet_updateNClob (line 2291) | @Override
    method resultSet_updateNClob (line 2297) | @Override
    method resultSet_updateNClob (line 2303) | @Override
    method resultSet_updateNClob (line 2309) | @Override
    method resultSet_updateNClob (line 2315) | @Override
    method resultSet_updateNString (line 2321) | @Override
    method resultSet_updateNString (line 2327) | @Override
    method resultSet_updateNull (line 2333) | @Override
    method resultSet_updateNull (line 2338) | @Override
    method resultSet_updateObject (line 2343) | @Override
    method resultSet_updateObject (line 2349) | @Override
    method resultSet_updateObject (line 2355) | @Override
    method resultSet_updateObject (line 2361) | @Override
    method resultSet_updateRef (line 2367) | @Override
    method resultSet_updateRef (line 2373) | @Override
    method resultSet_updateRow (line 2379) | @Override
    method resultSet_updateRowId (line 2384) | @Override
    method resultSet_updateRowId (line 2390) | @Override
    method resultSet_updateShort (line 2396) | @Override
    method resultSet_updateShort (line 2402) | @Override
    method resultSet_updateSQLXML (line 2408) | @Override
    method resultSet_updateSQLXML (line 2414) | @Override
    method resultSet_updateString (line 2420) | @Override
    method resultSet_updateString (line 2426) | @Override
    method resultSet_updateTime (line 2432) | @Override
    method resultSet_updateTime (line 2438) | @Override
    method resultSet_updateTimestamp (line 2444) | @Override
    method resultSet_updateTimestamp (line 2450) | @Override
    method resultSet_wasNull (line 2456) | @Override
    method statement_addBatch (line 2461) | @Override
    method statement_cancel (line 2466) | @Override
    method statement_clearBatch (line 2471) | @Override
    method statement_close (line 2476) | @Override
    method statement_execute (line 2481) | @Override
    method statement_execute (line 2486) | @Override
    method statement_execute (line 2492) | @Override
    method statement_execute (line 2498) | @Override
    method statement_executeBatch (line 2504) | @Override
    method statement_executeQuery (line 2510) | @Override
    method statement_executeUpdate (line 2516) | @Override
    method statement_executeUpdate (line 2521) | @Override
    method statement_executeUpdate (line 2527) | @Override
    method statement_executeUpdate (line 2533) | @Override
    method statement_getConnection (line 2539) | @Override
    method statement_getFetchDirection (line 2544) | @Override
    method statement_getFetchSize (line 2549) | @Override
    method statement_getGeneratedKeys (line 2554) | @Override
    method statement_getMaxFieldSize (line 2559) | @Override
    method statement_getMaxRows (line 2564) | @Override
    method statement_getMoreResults (line 2569) | @Override
    method statement_getMoreResults (line 2574) | @Override
    method statement_getQueryTimeout (line 2580) | @Override
    method statement_setQueryTimeout (line 2585) | @Override
    method statement_getResultSet (line 2592) | @Override
    method statement_getResultSetConcurrency (line 2597) | @Override
    method statement_getResultSetHoldability (line 2602) | @Override
    method statement_getResultSetType (line 2607) | @Override
    method statement_getUpdateCount (line 2612) | @Override
    method statement_getWarnings (line 2617) | @Override
    method statement_clearWarnings (line 2622) | @Override
    method statement_isClosed (line 2627) | @Override
    method statement_isPoolable (line 2632) | @Override
    method statement_setCursorName (line 2637) | @Override
    method statement_setEscapeProcessing (line 2642) | @Override
    method statement_setFetchDirection (line 2648) | @Override
    method statement_setFetchSize (line 2654) | @Override
    method statement_setMaxFieldSize (line 2659) | @Override
    method statement_setMaxRows (line 2664) | @Override
    method statement_setPoolable (line 2669) | @Override
    method unwrap (line 2675) | @Override
    method clob_length (line 2680) | @Override
    method clob_getSubString (line 2685) | @Override
    method clob_getCharacterStream (line 2690) | @Override
    method clob_getAsciiStream (line 2695) | @Override
    method clob_position (line 2700) | @Override
    method clob_position (line 2705) | @Override
    method clob_setString (line 2710) | @Override
    method clob_setString (line 2715) | @Override
    method clob_setAsciiStream (line 2721) | @Override
    method clob_setCharacterStream (line 2728) | @Override
    method clob_truncate (line 2733) | @Override
    method clob_free (line 2738) | @Override
    method clob_getCharacterStream (line 2743) | @Override
    method dataSource_releaseConnection (line 2751) | @Override
    method dataSource_getConnection (line 2756) | @Override
    method resultSetMetaData_getColumnCount (line 2764) | @Override
    method resultSetMetaData_isAutoIncrement (line 2770) | @Override
    method resultSetMetaData_isCaseSensitive (line 2776) | @Override
    method resultSetMetaData_isSearchable (line 2782) | @Override
    method resultSetMetaData_isCurrency (line 2788) | @Override
    method resultSetMetaData_isNullable (line 2794) | @Override
    method resultSetMetaData_isSigned (line 2800) | @Override
    method resultSetMetaData_getColumnDisplaySize (line 2806) | @Override
    method resultSetMetaData_getColumnLabel (line 2812) | @Override
    method resultSetMetaData_getColumnName (line 2818) | @Override
    method resultSetMetaData_getSchemaName (line 2824) | @Override
    method resultSetMetaData_getPrecision (line 2830) | @Override
    method resultSetMetaData_getScale (line 2836) | @Override
    method resultSetMetaData_getTableName (line 2842) | @Override
    method resultSetMetaData_getCatalogName (line 2848) | @Override
    method resultSetMetaData_getColumnType (line 2854) | @Override
    method resultSetMetaData_getColumnTypeName (line 2860) | @Override
    method resultSetMetaData_isReadOnly (line 2866) | @Override
    method resultSetMetaData_isWritable (line 2872) | @Override
    method resultSetMetaData_isDefinitelyWritable (line 2878) | @Override
    method resultSetMetaData_getColumnClassName (line 2886) | @Override

FILE: core/src/main/java/com/alibaba/druid/filter/FilterChain.java
  type FilterChain (line 35) | public interface FilterChain {
    method getDataSource (line 36) | DataSourceProxy getDataSource();
    method getFilterSize (line 38) | int getFilterSize();
    method getPos (line 40) | int getPos();
    method cloneChain (line 42) | FilterChain cloneChain();
    method unwrap (line 44) | <T> T unwrap(Wrapper wrapper, java.lang.Class<T> iface) throws java.sq...
    method isWrapperFor (line 46) | boolean isWrapperFor(Wrapper wrapper, java.lang.Class<?> iface) throws...
    method connection_connect (line 48) | ConnectionProxy connection_connect(Properties info) throws SQLException;
    method connection_createStatement (line 50) | StatementProxy connection_createStatement(ConnectionProxy connection) ...
    method connection_prepareStatement (line 52) | PreparedStatementProxy connection_prepareStatement(ConnectionProxy con...
    method connection_prepareCall (line 54) | CallableStatementProxy connection_prepareCall(ConnectionProxy connecti...
    method connection_nativeSQL (line 56) | String connection_nativeSQL(ConnectionProxy connection, String sql) th...
    method connection_setAutoCommit (line 58) | void connection_setAutoCommit(ConnectionProxy connection, boolean auto...
    method connection_getAutoCommit (line 60) | boolean connection_getAutoCommit(ConnectionProxy connection) throws SQ...
    method connection_commit (line 62) | void connection_commit(ConnectionProxy connection) throws SQLException;
    method connection_rollback (line 64) | void connection_rollback(ConnectionProxy connection) throws SQLException;
    method connection_close (line 66) | void connection_close(ConnectionProxy connection) throws SQLException;
    method connection_isClosed (line 68) | boolean connection_isClosed(ConnectionProxy connection) throws SQLExce...
    method connection_getMetaData (line 70) | DatabaseMetaData connection_getMetaData(ConnectionProxy connection) th...
    method connection_setReadOnly (line 72) | void connection_setReadOnly(ConnectionProxy connection, boolean readOn...
    method connection_isReadOnly (line 74) | boolean connection_isReadOnly(ConnectionProxy connection) throws SQLEx...
    method connection_setCatalog (line 76) | void connection_setCatalog(ConnectionProxy connection, String catalog)...
    method connection_getCatalog (line 78) | String connection_getCatalog(ConnectionProxy connection) throws SQLExc...
    method connection_setTransactionIsolation (line 80) | void connection_setTransactionIsolation(ConnectionProxy connection, in...
    method connection_getTransactionIsolation (line 82) | int connection_getTransactionIsolation(ConnectionProxy connection) thr...
    method connection_getWarnings (line 84) | SQLWarning connection_getWarnings(ConnectionProxy connection) throws S...
    method connection_clearWarnings (line 86) | void connection_clearWarnings(ConnectionProxy connection) throws SQLEx...
    method connection_createStatement (line 88) | StatementProxy connection_createStatement(ConnectionProxy connection, ...
    method connection_prepareStatement (line 91) | PreparedStatementProxy connection_prepareStatement(ConnectionProxy con...
    method connection_prepareCall (line 94) | CallableStatementProxy connection_prepareCall(ConnectionProxy connecti...
    method connection_getTypeMap (line 97) | java.util.Map<String, Class<?>> connection_getTypeMap(ConnectionProxy ...
    method connection_setTypeMap (line 99) | void connection_setTypeMap(ConnectionProxy connection, java.util.Map<S...
    method connection_setHoldability (line 101) | void connection_setHoldability(ConnectionProxy connection, int holdabi...
    method connection_getHoldability (line 103) | int connection_getHoldability(ConnectionProxy connection) throws SQLEx...
    method connection_setSavepoint (line 105) | Savepoint connection_setSavepoint(ConnectionProxy connection) throws S...
    method connection_setSavepoint (line 107) | Savepoint connection_setSavepoint(ConnectionProxy connection, String n...
    method connection_rollback (line 109) | void connection_rollback(ConnectionProxy connection, Savepoint savepoi...
    method connection_releaseSavepoint (line 111) | void connection_releaseSavepoint(ConnectionProxy connection, Savepoint...
    method connection_createStatement (line 113) | StatementProxy connection_createStatement(ConnectionProxy connection, ...
    method connection_prepareStatement (line 116) | PreparedStatementProxy connection_prepareStatement(ConnectionProxy con...
    method connection_prepareCall (line 120) | CallableStatementProxy connection_prepareCall(ConnectionProxy connecti...
    method connection_prepareStatement (line 124) | PreparedStatementProxy connection_prepareStatement(ConnectionProxy con...
    method connection_prepareStatement (line 127) | PreparedStatementProxy connection_prepareStatement(ConnectionProxy con...
    method connection_prepareStatement (line 130) | PreparedStatementProxy connection_prepareStatement(ConnectionProxy con...
    method connection_createClob (line 133) | Clob connection_createClob(ConnectionProxy connection) throws SQLExcep...
    method connection_createBlob (line 135) | Blob connection_createBlob(ConnectionProxy connection) throws SQLExcep...
    method connection_createNClob (line 137) | NClob connection_createNClob(ConnectionProxy connection) throws SQLExc...
    method connection_createSQLXML (line 139) | SQLXML connection_createSQLXML(ConnectionProxy connection) throws SQLE...
    method connection_isValid (line 141) | boolean connection_isValid(ConnectionProxy connection, int timeout) th...
    method connection_setClientInfo (line 143) | void connection_setClientInfo(ConnectionProxy connection, String name,...
    method connection_setClientInfo (line 145) | void connection_setClientInfo(ConnectionProxy connection, Properties p...
    method connection_getClientInfo (line 147) | String connection_getClientInfo(ConnectionProxy connection, String nam...
    method connection_getClientInfo (line 149) | Properties connection_getClientInfo(ConnectionProxy connection) throws...
    method connection_createArrayOf (line 151) | Array connection_createArrayOf(ConnectionProxy connection, String type...
    method connection_createStruct (line 153) | Struct connection_createStruct(ConnectionProxy connection, String type...
    method connection_getSchema (line 156) | String connection_getSchema(ConnectionProxy connection) throws SQLExce...
    method connection_setSchema (line 158) | void connection_setSchema(ConnectionProxy connection, String schema) t...
    method connection_abort (line 160) | void connection_abort(ConnectionProxy connection, Executor executor) t...
    method connection_setNetworkTimeout (line 162) | void connection_setNetworkTimeout(ConnectionProxy connection,
    method connection_getNetworkTimeout (line 166) | int connection_getNetworkTimeout(ConnectionProxy connection) throws SQ...
    method resultSet_next (line 170) | boolean resultSet_next(ResultSetProxy resultSet) throws SQLException;
    method resultSet_close (line 172) | void resultSet_close(ResultSetProxy resultSet) throws SQLException;
    method resultSet_wasNull (line 174) | boolean resultSet_wasNull(ResultSetProxy resultSet) throws SQLException;
    method resultSet_getString (line 176) | String resultSet_getString(ResultSetProxy resultSet, int columnIndex) ...
    method resultSet_getBoolean (line 178) | boolean resultSet_getBoolean(ResultSetProxy resultSet, int columnIndex...
    method resultSet_getByte (line 180) | byte resultSet_getByte(ResultSetProxy resultSet, int columnIndex) thro...
    method resultSet_getShort (line 182) | short resultSet_getShort(ResultSetProxy resultSet, int columnIndex) th...
    method resultSet_getInt (line 184) | int resultSet_getInt(ResultSetProxy resultSet, int columnIndex) throws...
    method resultSet_getLong (line 186) | long resultSet_getLong(ResultSetProxy resultSet, int columnIndex) thro...
    method resultSet_getFloat (line 188) | float resultSet_getFloat(ResultSetProxy resultSet, int columnIndex) th...
    method resultSet_getDouble (line 190) | double resultSet_getDouble(ResultSetProxy resultSet, int columnIndex) ...
    method resultSet_getBigDecimal (line 192) | BigDecimal resultSet_getBigDecimal(ResultSetProxy resultSet, int colum...
    method resultSet_getBytes (line 194) | byte[] resultSet_getBytes(ResultSetProxy resultSet, int columnIndex) t...
    method resultSet_getDate (line 196) | java.sql.Date resultSet_getDate(ResultSetProxy resultSet, int columnIn...
    method resultSet_getTime (line 198) | java.sql.Time resultSet_getTime(ResultSetProxy resultSet, int columnIn...
    method resultSet_getTimestamp (line 200) | java.sql.Timestamp resultSet_getTimestamp(ResultSetProxy resultSet, in...
    method resultSet_getAsciiStream (line 202) | java.io.InputStream resultSet_getAsciiStream(ResultSetProxy resultSet,...
    method resultSet_getUnicodeStream (line 204) | java.io.InputStream resultSet_getUnicodeStream(ResultSetProxy resultSe...
    method resultSet_getBinaryStream (line 206) | java.io.InputStream resultSet_getBinaryStream(ResultSetProxy resultSet...
    method resultSet_getString (line 208) | String resultSet_getString(ResultSetProxy resultSet, String columnLabe...
    method resultSet_getBoolean (line 210) | boolean resultSet_getBoolean(ResultSetProxy resultSet, String columnLa...
    method resultSet_getByte (line 212) | byte resultSet_getByte(ResultSetProxy resultSet, String columnLabel) t...
    method resultSet_getShort (line 214) | short resultSet_getShort(ResultSetProxy resultSet, String columnLabel)...
    method resultSet_getInt (line 216) | int resultSet_getInt(ResultSetProxy resultSet, String columnLabel) thr...
    method resultSet_getLong (line 218) | long resultSet_getLong(ResultSetProxy resultSet, String columnLabel) t...
    method resultSet_getFloat (line 220) | float resultSet_getFloat(ResultSetProxy resultSet, String columnLabel)...
    method resultSet_getDouble (line 222) | double resultSet_getDouble(ResultSetProxy resultSet, String columnLabe...
    method resultSet_getBigDecimal (line 224) | BigDecimal resultSet_getBigDecimal(ResultSetProxy resultSet, String co...
    method resultSet_getBytes (line 226) | byte[] resultSet_getBytes(ResultSetProxy resultSet, String columnLabel...
    method resultSet_getDate (line 228) | java.sql.Date resultSet_getDate(ResultSetProxy resultSet, String colum...
    method resultSet_getTime (line 230) | java.sql.Time resultSet_getTime(ResultSetProxy resultSet, String colum...
    method resultSet_getTimestamp (line 232) | java.sql.Timestamp resultSet_getTimestamp(ResultSetProxy resultSet, St...
    method resultSet_getAsciiStream (line 234) | java.io.InputStream resultSet_getAsciiStream(ResultSetProxy resultSet,...
    method resultSet_getUnicodeStream (line 236) | java.io.InputStream resultSet_getUnicodeStream(ResultSetProxy resultSe...
    method resultSet_getBinaryStream (line 238) | java.io.InputStream resultSet_getBinaryStream(ResultSetProxy resultSet...
    method resultSet_getWarnings (line 240) | SQLWarning resultSet_getWarnings(ResultSetProxy resultSet) throws SQLE...
    method resultSet_clearWarnings (line 242) | void resultSet_clearWarnings(ResultSetProxy resultSet) throws SQLExcep...
    method resultSet_getCursorName (line 244) | String resultSet_getCursorName(ResultSetProxy resultSet) throws SQLExc...
    method resultSet_getMetaData (line 246) | ResultSetMetaData resultSet_getMetaData(ResultSetProxy resultSet) thro...
    method resultSet_getObject (line 248) | Object resultSet_getObject(ResultSetProxy resultSet, int columnIndex) ...
    method resultSet_getObject (line 250) | <T> T resultSet_getObject(ResultSetProxy resultSet, int columnIndex, C...
    method resultSet_getObject (line 252) | Object resultSet_getObject(ResultSetProxy resultSet, String columnLabe...
    method resultSet_getObject (line 254) | <T> T resultSet_getObject(ResultSetProxy resultSet, String columnLabel...
    method resultSet_findColumn (line 256) | int resultSet_findColumn(ResultSetProxy resultSet, String columnLabel)...
    method resultSet_getCharacterStream (line 258) | java.io.Reader resultSet_getCharacterStream(ResultSetProxy resultSet, ...
    method resultSet_getCharacterStream (line 260) | java.io.Reader resultSet_getCharacterStream(ResultSetProxy resultSet, ...
    method resultSet_getBigDecimal (line 262) | BigDecimal resultSet_getBigDecimal(ResultSetProxy resultSet, int colum...
    method resultSet_getBigDecimal (line 264) | BigDecimal resultSet_getBigDecimal(ResultSetProxy resultSet, String co...
    method resultSet_isBeforeFirst (line 266) | boolean resultSet_isBeforeFirst(ResultSetProxy resultSet) throws SQLEx...
    method resultSet_isAfterLast (line 268) | boolean resultSet_isAfterLast(ResultSetProxy resultSet) throws SQLExce...
    method resultSet_isFirst (line 270) | boolean resultSet_isFirst(ResultSetProxy resultSet) throws SQLException;
    method resultSet_isLast (line 272) | boolean resultSet_isLast(ResultSetProxy resultSet) throws SQLException;
    method resultSet_beforeFirst (line 274) | void resultSet_beforeFirst(ResultSetProxy resultSet) throws SQLException;
    method resultSet_afterLast (line 276) | void resultSet_afterLast(ResultSetProxy resultSet) throws SQLException;
    method resultSet_first (line 278) | boolean resultSet_first(ResultSetProxy resultSet) throws SQLException;
    method resultSet_last (line 280) | boolean resultSet_last(ResultSetProxy resultSet) throws SQLException;
    method resultSet_getRow (line 282) | int resultSet_getRow(ResultSetProxy resultSet) throws SQLException;
    method resultSet_absolute (line 284) | boolean resultSet_absolute(ResultSetProxy resultSet, int row) throws S...
    method resultSet_relative (line 286) | boolean resultSet_relative(ResultSetProxy resultSet, int rows) throws ...
    method resultSet_previous (line 288) | boolean resultSet_previous(ResultSetProxy resultSet) throws SQLException;
    method resultSet_setFetchDirection (line 290) | void resultSet_setFetchDirection(ResultSetProxy resultSet, int directi...
    method resultSet_getFetchDirection (line 292) | int resultSet_getFetchDirection(ResultSetProxy resultSet) throws SQLEx...
    method resultSet_setFetchSize (line 294) | void resultSet_setFetchSize(ResultSetProxy resultSet, int rows) throws...
    method resultSet_getFetchSize (line 296) | int resultSet_getFetchSize(ResultSetProxy resultSet) throws SQLException;
    method resultSet_getType (line 298) | int resultSet_getType(ResultSetProxy resultSet) throws SQLException;
    method resultSet_getConcurrency (line 300) | int resultSet_getConcurrency(ResultSetProxy resultSet) throws SQLExcep...
    method resultSet_rowUpdated (line 302) | boolean resultSet_rowUpdated(ResultSetProxy resultSet) throws SQLExcep...
    method resultSet_rowInserted (line 304) | boolean resultSet_rowInserted(ResultSetProxy resultSet) throws SQLExce...
    method resultSet_rowDeleted (line 306) | boolean resultSet_rowDeleted(ResultSetProxy resultSet) throws SQLExcep...
    method resultSet_updateNull (line 308) | void resultSet_updateNull(ResultSetProxy resultSet, int columnIndex) t...
    method resultSet_updateBoolean (line 310) | void resultSet_updateBoolean(ResultSetProxy resultSet, int columnIndex...
    method resultSet_updateByte (line 312) | void resultSet_updateByte(ResultSetProxy resultSet, int columnIndex, b...
    method resultSet_updateShort (line 314) | void resultSet_updateShort(ResultSetProxy resultSet, int columnIndex, ...
    method resultSet_updateInt (line 316) | void resultSet_updateInt(ResultSetProxy resultSet, int columnIndex, in...
    method resultSet_updateLong (line 318) | void resultSet_updateLong(ResultSetProxy resultSet, int columnIndex, l...
    method resultSet_updateFloat (line 320) | void resultSet_updateFloat(ResultSetProxy resultSet, int columnIndex, ...
    method resultSet_updateDouble (line 322) | void resultSet_updateDouble(ResultSetProxy resultSet, int columnIndex,...
    method resultSet_updateBigDecimal (line 324) | void resultSet_updateBigDecimal(ResultSetProxy resultSet, int columnIn...
    method resultSet_updateString (line 326) | void resultSet_updateString(ResultSetProxy resultSet, int columnIndex,...
    method resultSet_updateBytes (line 328) | void resultSet_updateBytes(ResultSetProxy resultSet, int columnIndex, ...
    method resultSet_updateDate (line 330) | void resultSet_updateDate(ResultSetProxy resultSet, int columnIndex, j...
    method resultSet_updateTime (line 332) | void resultSet_updateTime(ResultSetProxy resultSet, int columnIndex, j...
    method resultSet_updateTimestamp (line 334) | void resultSet_updateTimestamp(ResultSetProxy resultSet, int columnInd...
    method resultSet_updateAsciiStream (line 336) | void resultSet_updateAsciiStream(ResultSetProxy resultSet, int columnI...
    method resultSet_updateBinaryStream (line 339) | void resultSet_updateBinaryStream(ResultSetProxy resultSet, int column...
    method resultSet_updateCharacterStream (line 342) | void resultSet_updateCharacterStream(ResultSetProxy resultSet, int col...
    method resultSet_updateObject (line 345) | void resultSet_updateObject(ResultSetProxy resultSet, int columnIndex,...
    method resultSet_updateObject (line 348) | void resultSet_updateObject(ResultSetProxy resultSet, int columnIndex,...
    method resultSet_updateNull (line 350) | void resultSet_updateNull(ResultSetProxy resultSet, String columnLabel...
    method resultSet_updateBoolean (line 352) | void resultSet_updateBoolean(ResultSetProxy resultSet, String columnLa...
    method resultSet_updateByte (line 354) | void resultSet_updateByte(ResultSetProxy resultSet, String columnLabel...
    method resultSet_updateShort (line 356) | void resultSet_updateShort(ResultSetProxy resultSet, String columnLabe...
    method resultSet_updateInt (line 358) | void resultSet_updateInt(ResultSetProxy resultSet, String columnLabel,...
    method resultSet_updateLong (line 360) | void resultSet_updateLong(ResultSetProxy resultSet, String columnLabel...
    method resultSet_updateFloat (line 362) | void resultSet_updateFloat(ResultSetProxy resultSet, String columnLabe...
    method resultSet_updateDouble (line 364) | void resultSet_updateDouble(ResultSetProxy resultSet, String columnLab...
    method resultSet_updateBigDecimal (line 366) | void resultSet_updateBigDecimal(ResultSetProxy resultSet, String colum...
    method resultSet_updateString (line 368) | void resultSet_updateString(ResultSetProxy resultSet, String columnLab...
    method resultSet_updateBytes (line 370) | void resultSet_updateBytes(ResultSetProxy resultSet, String columnLabe...
    method resultSet_updateDate (line 372) | void resultSet_updateDate(ResultSetProxy resultSet, String columnLabel...
    method resultSet_updateTime (line 374) | void resultSet_updateTime(ResultSetProxy resultSet, String columnLabel...
    method resultSet_updateTimestamp (line 376) | void resultSet_updateTimestamp(ResultSetProxy resultSet, String column...
    method resultSet_updateAsciiStream (line 379) | void resultSet_updateAsciiStream(ResultSetProxy resultSet, String colu...
    method resultSet_updateBinaryStream (line 382) | void resultSet_updateBinaryStream(ResultSetProxy resultSet, String col...
    method resultSet_updateCharacterStream (line 385) | void resultSet_updateCharacterStream(ResultSetProxy resultSet,
    method resultSet_updateObject (line 391) | void resultSet_updateObject(ResultSetProxy resultSet, String columnLab...
    method resultSet_updateObject (line 394) | void resultSet_updateObject(ResultSetProxy resultSet, String columnLab...
    method resultSet_insertRow (line 396) | void resultSet_insertRow(ResultSetProxy resultSet) throws SQLException;
    method resultSet_updateRow (line 398) | void resultSet_updateRow(ResultSetProxy resultSet) throws SQLException;
    method resultSet_deleteRow (line 400) | void resultSet_deleteRow(ResultSetProxy resultSet) throws SQLException;
    method resultSet_refreshRow (line 402) | void resultSet_refreshRow(ResultSetProxy resultSet) throws SQLException;
    method resultSet_cancelRowUpdates (line 404) | void resultSet_cancelRowUpdates(ResultSetProxy resultSet) throws SQLEx...
    method resultSet_moveToInsertRow (line 406) | void resultSet_moveToInsertRow(ResultSetProxy resultSet) throws SQLExc...
    method resultSet_moveToCurrentRow (line 408) | void resultSet_moveToCurrentRow(ResultSetProxy resultSet) throws SQLEx...
    method resultSet_getStatement (line 410) | Statement resultSet_getStatement(ResultSetProxy resultSet) throws SQLE...
    method resultSet_getObject (line 412) | Object resultSet_getObject(ResultSetProxy resultSet, int columnIndex, ...
    method resultSet_getRef (line 415) | Ref resultSet_getRef(ResultSetProxy resultSet, int columnIndex) throws...
    method resultSet_getBlob (line 417) | Blob resultSet_getBlob(ResultSetProxy resultSet, int columnIndex) thro...
    method resultSet_getClob (line 419) | Clob resultSet_getClob(ResultSetProxy resultSet, int columnIndex) thro...
    method resultSet_getArray (line 421) | Array resultSet_getArray(ResultSetProxy resultSet, int columnIndex) th...
    method resultSet_getObject (line 423) | Object resultSet_getObject(ResultSetProxy resultSet, String columnLabe...
    method resultSet_getRef (line 426) | Ref resultSet_getRef(ResultSetProxy resultSet, String columnLabel) thr...
    method resultSet_getBlob (line 428) | Blob resultSet_getBlob(ResultSetProxy resultSet, String columnLabel) t...
    method resultSet_getClob (line 430) | Clob resultSet_getClob(ResultSetProxy resultSet, String columnLabel) t...
    method resultSet_getArray (line 432) | Array resultSet_getArray(ResultSetProxy resultSet, String columnLabel)...
    method resultSet_getDate (line 434) | java.sql.Date resultSet_getDate(ResultSetProxy resultSet, int columnIn...
    method resultSet_getDate (line 436) | java.sql.Date resultSet_getDate(ResultSetProxy resultSet, String colum...
    method resultSet_getTime (line 438) | java.sql.Time resultSet_getTime(ResultSetProxy resultSet, int columnIn...
    method resultSet_getTime (line 440) | java.sql.Time resultSet_getTime(ResultSetProxy resultSet, String colum...
    method resultSet_getTimestamp (line 442) | java.sql.Timestamp resultSet_getTimestamp(ResultSetProxy resultSet, in...
    method resultSet_getTimestamp (line 445) | java.sql.Timestamp resultSet_getTimestamp(ResultSetProxy resultSet, St...
    method resultSet_getURL (line 448) | java.net.URL resultSet_getURL(ResultSetProxy resultSet, int columnInde...
    method resultSet_getURL (line 450) | java.net.URL resultSet_getURL(ResultSetProxy resultSet, String columnL...
    method resultSet_updateRef (line 452) | void resultSet_updateRef(ResultSetProxy resultSet, int columnIndex, ja...
    method resultSet_updateRef (line 454) | void resultSet_updateRef(ResultSetProxy resultSet, String columnLabel,...
    method resultSet_updateBlob (line 456) | void resultSet_updateBlob(ResultSetProxy resultSet, int columnIndex, j...
    method resultSet_updateBlob (line 458) | void resultSet_updateBlob(ResultSetProxy resultSet, String columnLabel...
    method resultSet_updateClob (line 460) | void resultSet_updateClob(ResultSetProxy resultSet, int columnIndex, j...
    method resultSet_updateClob (line 462) | void resultSet_updateClob(ResultSetProxy resultSet, String columnLabel...
    method resultSet_updateArray (line 464) | void resultSet_updateArray(ResultSetProxy resultSet, int columnIndex, ...
    method resultSet_updateArray (line 466) | void resultSet_updateArray(ResultSetProxy resultSet, String columnLabe...
    method resultSet_getRowId (line 468) | RowId resultSet_getRowId(ResultSetProxy resultSet, int columnIndex) th...
    method resultSet_getRowId (line 470) | RowId resultSet_getRowId(ResultSetProxy resultSet, String columnLabel)...
    method resultSet_updateRowId (line 472) | void resultSet_updateRowId(ResultSetProxy resultSet, int columnIndex, ...
    method resultSet_updateRowId (line 474) | void resultSet_updateRowId(ResultSetProxy resultSet, String columnLabe...
    method resultSet_getHoldability (line 476) | int resultSet_getHoldability(ResultSetProxy resultSet) throws SQLExcep...
    method resultSet_isClosed (line 478) | boolean resultSet_isClosed(ResultSetProxy resultSet) throws SQLException;
    method resultSet_updateNString (line 480) | void resultSet_updateNString(ResultSetProxy resultSet, int columnIndex...
    method resultSet_updateNString (line 482) | void resultSet_updateNString(ResultSetProxy resultSet, String columnLa...
    method resultSet_updateNClob (line 484) | void resultSet_updateNClob(ResultSetProxy resultSet, int columnIndex, ...
    method resultSet_updateNClob (line 486) | void resultSet_updateNClob(ResultSetProxy resultSet, String columnLabe...
    method resultSet_getNClob (line 488) | NClob resultSet_getNClob(ResultSetProxy resultSet, int columnIndex) th...
    method resultSet_getNClob (line 490) | NClob resultSet_getNClob(ResultSetProxy resultSet, String columnLabel)...
    method resultSet_getSQLXML (line 492) | SQLXML resultSet_getSQLXML(ResultSetProxy resultSet, int columnIndex) ...
    method resultSet_getSQLXML (line 494) | SQLXML resultSet_getSQLXML(ResultSetProxy resultSet, String columnLabe...
    method resultSet_updateSQLXML (line 496) | void resultSet_updateSQLXML(ResultSetProxy resultSet, int columnIndex,...
    method resultSet_updateSQLXML (line 498) | void resultSet_updateSQLXML(ResultSetProxy resultSet, String columnLab...
    method resultSet_getNString (line 500) | String resultSet_getNString(ResultSetProxy resultSet, int columnIndex)...
    method resultSet_getNString (line 502) | String resultSet_getNString(ResultSetProxy resultSet, String columnLab...
    method resultSet_getNCharacterStream (line 504) | java.io.Reader resultSet_getNCharacterStream(ResultSetProxy resultSet,...
    method resultSet_getNCharacterStream (line 506) | java.io.Reader resultSet_getNCharacterStream(ResultSetProxy resultSet,...
    method resultSet_updateNCharacterStream (line 508) | void resultSet_updateNCharacterStream(ResultSetProxy resultSet, int co...
    method resultSet_updateNCharacterStream (line 511) | void resultSet_updateNCharacterStream(ResultSetProxy resultSet, String...
    method resultSet_updateAsciiStream (line 514) | void resultSet_updateAsciiStream(ResultSetProxy resultSet, int columnI...
    method resultSet_updateBinaryStream (line 517) | void resultSet_updateBinaryStream(ResultSetProxy resultSet, int column...
    method resultSet_updateCharacterStream (line 520) | void resultSet_updateCharacterStream(ResultSetProxy resultSet, int col...
    method resultSet_updateAsciiStream (line 523) | void resultSet_updateAsciiStream(ResultSetProxy resultSet, String colu...
    method resultSet_updateBinaryStream (line 526) | void resultSet_updateBinaryStream(ResultSetProxy resultSet, String col...
    method resultSet_updateCharacterStream (line 529) | void resultSet_updateCharacterStream(ResultSetProxy resultSet, String ...
    method resultSet_updateBlob (line 532) | void resultSet_updateBlob(ResultSetProxy resultSet, int columnIndex, I...
    method resultSet_updateBlob (line 535) | void resultSet_updateBlob(ResultSetProxy resultSet, String columnLabel...
    method resultSet_updateClob (line 538) | void resultSet_updateClob(ResultSetProxy resultSet, int columnIndex, R...
    method resultSet_updateClob (line 541) | void resultSet_updateClob(ResultSetProxy resultSet, String columnLabel...
    method resultSet_updateNClob (line 544) | void resultSet_updateNClob(ResultSetProxy resultSet, int columnIndex, ...
    method resultSet_updateNClob (line 547) | void resultSet_updateNClob(ResultSetProxy resultSet, String columnLabe...
    method resultSet_updateNCharacterStream (line 550) | void resultSet_updateNCharacterStream(ResultSetProxy resultSet, int co...
    method resultSet_updateNCharacterStream (line 553) | void resultSet_updateNCharacterStream(ResultSetProxy resultSet, String...
    method resultSet_updateAsciiStream (line 556) | void resultSet_updateAsciiStream(ResultSetProxy resultSet, int columnI...
    method resultSet_updateBinaryStream (line 559) | void resultSet_updateBinaryStream(ResultSetProxy resultSet, int column...
    method resultSet_updateCharacterStream (line 562) | void resultSet_updateCharacterStream(ResultSetProxy resultSet, int col...
    method resultSet_updateAsciiStream (line 565) | void resultSet_updateAsciiStream(ResultSetProxy resultSet, String colu...
    method resultSet_updateBinaryStream (line 568) | void resultSet_updateBinaryStream(ResultSetProxy resultSet, String col...
    method resultSet_updateCharacterStream (line 571) | void resultSet_updateCharacterStream(ResultSetProxy resultSet, String ...
    method resultSet_updateBlob (line 574) | void resultSet_updateBlob(ResultSetProxy resultSet, int columnIndex, I...
    method resultSet_updateBlob (line 576) | void resultSet_updateBlob(ResultSetProxy resultSet, String columnLabel...
    method resultSet_updateClob (line 579) | void resultSet_updateClob(ResultSetProxy resultSet, int columnIndex, R...
    method resultSet_updateClob (line 581) | void resultSet_updateClob(ResultSetProxy resultSet, String columnLabel...
    method resultSet_updateNClob (line 583) | void resultSet_updateNClob(ResultSetProxy resultSet, int columnIndex, ...
    method resultSet_updateNClob (line 585) | void resultSet_updateNClob(ResultSetProxy resultSet, String columnLabe...
    method statement_executeQuery (line 589) | ResultSetProxy statement_executeQuery(StatementProxy statement, String...
    method statement_executeUpdate (line 591) | int statement_executeUpdate(StatementProxy statement, String sql) thro...
    method statement_close (line 593) | void statement_close(StatementProxy statement) throws SQLException;
    method statement_getMaxFieldSize (line 595) | int statement_getMaxFieldSize(StatementProxy statement) throws SQLExce...
    method statement_setMaxFieldSize (line 597) | void statement_setMaxFieldSize(StatementProxy statement, int max) thro...
    method statement_getMaxRows (line 599) | int statement_getMaxRows(StatementProxy statement) throws SQLException;
    method statement_setMaxRows (line 601) | void statement_setMaxRows(StatementProxy statement, int max) throws SQ...
    method statement_setEscapeProcessing (line 603) | void statement_setEscapeProcessing(StatementProxy statement, boolean e...
    method statement_getQueryTimeout (line 605) | int statement_getQueryTimeout(StatementProxy statement) throws SQLExce...
    method statement_setQueryTimeout (line 607) | void statement_setQueryTimeout(StatementProxy statement, int seconds) ...
    method statement_cancel (line 609) | void statement_cancel(StatementProxy statement) throws SQLException;
    method statement_getWarnings (line 611) | SQLWarning statement_getWarnings(StatementProxy statement) throws SQLE...
    method statement_clearWarnings (line 613) | void statement_clearWarnings(StatementProxy statement) throws SQLExcep...
    method statement_setCursorName (line 615) | void statement_setCursorName(StatementProxy statement, String name) th...
    method statement_execute (line 617) | boolean statement_execute(StatementProxy statement, String sql) throws...
    method statement_getResultSet (line 619) | ResultSetProxy statement_getResultSet(StatementProxy statement) throws...
    method statement_getUpdateCount (line 621) | int statement_getUpdateCount(StatementProxy statement) throws SQLExcep...
    method statement_getMoreResults (line 623) | boolean statement_getMoreResults(StatementProxy statement) throws SQLE...
    method statement_setFetchDirection (line 625) | void statement_setFetchDirection(StatementProxy statement, int directi...
    method statement_getFetchDirection (line 627) | int statement_getFetchDirection(StatementProxy statement) throws SQLEx...
    method statement_setFetchSize (line 629) | void statement_setFetchSize(StatementProxy statement, int rows) throws...
    method statement_getFetchSize (line 631) | int statement_getFetchSize(StatementProxy statement) throws SQLException;
    method statement_getResultSetConcurrency (line 633) | int statement_getResultSetConcurrency(StatementProxy statement) throws...
    method statement_getResultSetType (line 635) | int statement_getResultSetType(StatementProxy statement) throws SQLExc...
    method statement_addBatch (line 637) | void statement_addBatch(StatementProxy statement, String sql) throws S...
    method statement_clearBatch (line 639) | void statement_clearBatch(StatementProxy statement) throws SQLException;
    method statement_executeBatch (line 641) | int[] statement_executeBatch(StatementProxy statement) throws SQLExcep...
    method statement_getConnection (line 643) | Connection statement_getConnection(StatementProxy statement) throws SQ...
    method statement_getMoreResults (line 645) | boolean statement_getMoreResults(StatementProxy statement, int current...
    method statement_getGeneratedKeys (line 647) | ResultSetProxy statement_getGeneratedKeys(StatementProxy statement) th...
    method statement_executeUpdate (line 649) | int statement_executeUpdate(StatementProxy statement, String sql, int ...
    method statement_executeUpdate (line 651) | int statement_executeUpdate(StatementProxy statement, String sql, int[...
    method statement_executeUpdate (line 653) | int statement_executeUpdate(StatementProxy statement, String sql, Stri...
    method statement_execute (line 655) | boolean statement_execute(StatementProxy statement, String sql, int au...
    method statement_execute (line 657) | boolean statement_execute(StatementProxy statement, String sql, int[] ...
    method statement_execute (line 659) | boolean statement_execute(StatementProxy statement, String sql, String...
    method statement_getResultSetHoldability (line 661) | int statement_getResultSetHoldability(StatementProxy statement) throws...
    method statement_isClosed (line 663) | boolean statement_isClosed(StatementProxy statement) throws SQLException;
    method statement_setPoolable (line 665) | void statement_setPoolable(StatementProxy statement, boolean poolable)...
    method statement_isPoolable (line 667) | boolean statement_isPoolable(StatementProxy statement) throws SQLExcep...
    method preparedStatement_executeQuery (line 671) | ResultSetProxy preparedStatement_executeQuery(PreparedStatementProxy s...
    method preparedStatement_executeUpdate (line 673) | int preparedStatement_executeUpdate(PreparedStatementProxy statement) ...
    method preparedStatement_setNull (line 675) | void preparedStatement_setNull(PreparedStatementProxy statement, int p...
    method preparedStatement_setBoolean (line 678) | void preparedStatement_setBoolean(PreparedStatementProxy statement, in...
    method preparedStatement_setByte (line 681) | void preparedStatement_setByte(PreparedStatementProxy statement, int p...
    method preparedStatement_setShort (line 683) | void preparedStatement_setShort(PreparedStatementProxy statement, int ...
    method preparedStatement_setInt (line 685) | void preparedStatement_setInt(PreparedStatementProxy statement, int pa...
    method preparedStatement_setLong (line 687) | void preparedStatement_setLong(PreparedStatementProxy statement, int p...
    method preparedStatement_setFloat (line 689) | void preparedStatement_setFloat(PreparedStatementProxy statement, int ...
    method preparedStatement_setDouble (line 691) | void preparedStatement_setDouble(PreparedStatementProxy statement, int...
    method preparedStatement_setBigDecimal (line 694) | void preparedStatement_setBigDecimal(PreparedStatementProxy statement,...
    method preparedStatement_setString (line 697) | void preparedStatement_setString(PreparedStatementProxy statement, int...
    method preparedStatement_setBytes (line 700) | void preparedStatement_setBytes(PreparedStatementProxy statement, int ...
    method preparedStatement_setDate (line 702) | void preparedStatement_setDate(PreparedStatementProxy statement, int p...
    method preparedStatement_setTime (line 705) | void preparedStatement_setTime(PreparedStatementProxy statement, int p...
    method preparedStatement_setTimestamp (line 708) | void preparedStatement_setTimestamp(PreparedStatementProxy statement, ...
    method preparedStatement_setAsciiStream (line 711) | void preparedStatement_setAsciiStream(PreparedStatementProxy statement...
    method preparedStatement_setUnicodeStream (line 714) | void preparedStatement_setUnicodeStream(PreparedStatementProxy stateme...
    method preparedStatement_setBinaryStream (line 717) | void preparedStatement_setBinaryStream(PreparedStatementProxy statemen...
    method preparedStatement_clearParameters (line 720) | void preparedStatement_clearParameters(PreparedStatementProxy statemen...
    method preparedStatement_setObject (line 722) | void preparedStatement_setObject(PreparedStatementProxy statement, int...
    method preparedStatement_setObject (line 725) | void preparedStatement_setObject(PreparedStatementProxy statement, int...
    method preparedStatement_execute (line 728) | boolean preparedStatement_execute(PreparedStatementProxy statement) th...
    method preparedStatement_addBatch (line 730) | void preparedStatement_addBatch(PreparedStatementProxy statement) thro...
    method preparedStatement_setCharacterStream (line 732) | void preparedStatement_setCharacterStream(PreparedStatementProxy state...
    method preparedStatement_setRef (line 735) | void preparedStatement_setRef(PreparedStatementProxy statement, int pa...
    method preparedStatement_setBlob (line 737) | void preparedStatement_setBlob(PreparedStatementProxy statement, int p...
    method preparedStatement_setClob (line 739) | void preparedStatement_setClob(PreparedStatementProxy statement, int p...
    method preparedStatement_setArray (line 741) | void preparedStatement_setArray(PreparedStatementProxy statement, int ...
    method preparedStatement_getMetaData (line 743) | ResultSetMetaData preparedStatement_getMetaData(PreparedStatementProxy...
    method preparedStatement_setDate (line 745) | void preparedStatement_setDate(PreparedStatementProxy statement, int p...
    method preparedStatement_setTime (line 748) | void preparedStatement_setTime(PreparedStatementProxy statement, int p...
    method preparedStatement_setTimestamp (line 751) | void preparedStatement_setTimestamp(PreparedStatementProxy statement, ...
    method preparedStatement_setNull (line 754) | void preparedStatement_setNull(PreparedStatementProxy statement, int p...
    method preparedStatement_setURL (line 757) | void preparedStatement_setURL(PreparedStatementProxy statement, int pa...
    method preparedStatement_getParameterMetaData (line 760) | ParameterMetaData preparedStatement_getParameterMetaData(PreparedState...
    method preparedStatement_setRowId (line 762) | void preparedStatement_setRowId(PreparedStatementProxy statement, int ...
    method preparedStatement_setNString (line 764) | void preparedStatement_setNString(PreparedStatementProxy statement, in...
    method preparedStatement_setNCharacterStream (line 767) | void preparedStatement_setNCharacterStream(PreparedStatementProxy stat...
    method preparedStatement_setNClob (line 770) | void preparedStatement_setNClob(PreparedStatementProxy statement, int ...
    method preparedStatement_setClob (line 773) | void preparedStatement_setClob(PreparedStatementProxy statement, int p...
    method preparedStatement_setBlob (line 776) | void preparedStatement_setBlob(PreparedStatementProxy statement, int p...
    method preparedStatement_setNClob (line 779) | void preparedStatement_setNClob(PreparedStatementProxy statement, int ...
    method preparedStatement_setSQLXML (line 782) | void preparedStatement_setSQLXML(PreparedStatementProxy statement, int...
    method preparedStatement_setObject (line 785) | void preparedStatement_setObject(PreparedStatementProxy statement, int...
    method preparedStatement_setAsciiStream (line 788) | void preparedStatement_setAsciiStream(PreparedStatementProxy statement...
    method preparedStatement_setBinaryStream (line 791) | void preparedStatement_setBinaryStream(PreparedStatementProxy statemen...
    method preparedStatement_setCharacterStream (line 794) | void preparedStatement_setCharacterStream(PreparedStatementProxy state...
    method preparedStatement_setAsciiStream (line 797) | void preparedStatement_setAsciiStream(PreparedStatementProxy statement...
    method preparedStatement_setBinaryStream (line 800) | void preparedStatement_setBinaryStream(PreparedStatementProxy statemen...
    method preparedStatement_setCharacterStream (line 803) | void preparedStatement_setCharacterStream(PreparedStatementProxy state...
    method preparedStatement_setNCharacterStream (line 806) | void preparedStatement_setNCharacterStream(PreparedStatementProxy stat...
    method preparedStatement_setClob (line 809) | void preparedStatement_setClob(PreparedStatementProxy statement, int p...
    method preparedStatement_setBlob (line 812) | void preparedStatement_setBlob(PreparedStatementProxy statement, int p...
    method preparedStatement_setNClob (line 815) | void preparedStatement_setNClob(PreparedStatementProxy statement, int ...
    method callableStatement_registerOutParameter (line 820) | void callableStatement_registerOutParameter(CallableStatementProxy sta...
    method callableStatement_registerOutParameter (line 823) | void callableStatement_registerOutParameter(CallableStatementProxy sta...
    method callableStatement_wasNull (line 826) | boolean callableStatement_wasNull(CallableStatementProxy statement) th...
    method callableStatement_getString (line 828) | String callableStatement_getString(CallableStatementProxy statement, i...
    method callableStatement_getBoolean (line 830) | boolean callableStatement_getBoolean(CallableStatementProxy statement,...
    method callableStatement_getByte (line 832) | byte callableStatement_getByte(CallableStatementProxy statement, int p...
    method callableStatement_getShort (line 834) | short callableStatement_getShort(CallableStatementProxy statement, int...
    method callableStatement_getInt (line 836) | int callableStatement_getInt(CallableStatementProxy statement, int par...
    method callableStatement_getLong (line 838) | long callableStatement_getLong(CallableStatementProxy statement, int p...
    method callableStatement_getFloat (line 840) | float callableStatement_getFloat(CallableStatementProxy statement, int...
    method callableStatement_getDouble (line 842) | double callableStatement_getDouble(CallableStatementProxy statement, i...
    method callableStatement_getBigDecimal (line 844) | BigDecimal callableStatement_getBigDecimal(CallableStatementProxy stat...
    method callableStatement_getBytes (line 847) | byte[] callableStatement_getBytes(CallableStatementProxy statement, in...
    method callableStatement_getDate (line 849) | java.sql.Date callableStatement_getDate(CallableStatementProxy stateme...
    method callableStatement_getTime (line 851) | java.sql.Time callableStatement_getTime(CallableStatementProxy stateme...
    method callableStatement_getTimestamp (line 853) | java.sql.Timestamp callableStatement_getTimestamp(CallableStatementPro...
    method callableStatement_getObject (line 856) | Object callableStatement_getObject(CallableStatementProxy statement, i...
    method callableStatement_getBigDecimal (line 858) | BigDecimal callableStatement_getBigDecimal(CallableStatementProxy stat...
    method callableStatement_getObject (line 861) | Object callableStatement_getObject(CallableStatementProxy statement, i...
    method callableStatement_getRef (line 864) | Ref callableStatement_getRef(CallableStatementProxy statement, int par...
    method callableStatement_getBlob (line 866) | Blob callableStatement_getBlob(CallableStatementProxy statement, int p...
    method callableStatement_getClob (line 868) | Clob callableStatement_getClob(CallableStatementProxy statement, int p...
    method callableStatement_getArray (line 870) | Array callableStatement_getArray(CallableStatementProxy statement, int...
    method callableStatement_getDate (line 872) | java.sql.Date callableStatement_getDate(CallableStatementProxy stateme...
    method callableStatement_getTime (line 875) | java.sql.Time callableStatement_getTime(CallableStatementProxy stateme...
    method callableStatement_getTimestamp (line 878) | java.sql.Timestamp callableStatement_getTimestamp(CallableStatementPro...
    method callableStatement_registerOutParameter (line 883) | void callableStatement_registerOutParameter(CallableStatementProxy sta...
    method callableStatement_registerOutParameter (line 886) | void callableStatement_registerOutParameter(CallableStatementProxy sta...
    method callableStatement_registerOutParameter (line 889) | void callableStatement_registerOutParameter(CallableStatementProxy sta...
    method callableStatement_registerOutParameter (line 892) | void callableStatement_registerOutParameter(CallableStatementProxy sta...
    method callableStatement_getURL (line 895) | java.net.URL callableStatement_getURL(CallableStatementProxy statement...
    method callableStatement_setURL (line 897) | void callableStatement_setURL(CallableStatementProxy statement, String...
    method callableStatement_setNull (line 900) | void callableStatement_setNull(CallableStatementProxy statement, Strin...
    method callableStatement_setBoolean (line 903) | void callableStatement_setBoolean(CallableStatementProxy statement, St...
    method callableStatement_setByte (line 906) | void callableStatement_setByte(CallableStatementProxy statement, Strin...
    method callableStatement_setShort (line 908) | void callableStatement_setShort(CallableStatementProxy statement, Stri...
    method callableStatement_setInt (line 911) | void callableStatement_setInt(CallableStatementProxy statement, String...
    method callableStatement_setLong (line 913) | void callableStatement_setLong(CallableStatementProxy statement, Strin...
    method callableStatement_setFloat (line 915) | void callableStatement_setFloat(CallableStatementProxy statement, Stri...
    method callableStatement_setDouble (line 918) | void callableStatement_setDouble(CallableStatementProxy statement, Str...
    method callableStatement_setBigDecimal (line 921) | void callableStatement_setBigDecimal(CallableStatementProxy statement,...
    method callableStatement_setString (line 924) | void callableStatement_setString(CallableStatementProxy statement, Str...
    method callableStatement_setBytes (line 927) | void callableStatement_setBytes(CallableStatementProxy statement, Stri...
    method callableStatement_setDate (line 930) | void callableStatement_setDate(CallableStatementProxy statement, Strin...
    method callableStatement_setTime (line 933) | void callableStatement_setTime(CallableStatementProxy statement, Strin...
    method callableStatement_setTimestamp (line 936) | void callableStatement_setTimestamp(CallableStatementProxy statement, ...
    method callableStatement_setAsciiStream (line 939) | void callableStatement_setAsciiStream(CallableStatementProxy statement...
    method callableStatement_setBinaryStream (line 942) | void callableStatement_setBinaryStream(CallableStatementProxy statemen...
    method callableStatement_setObject (line 945) | void callableStatement_setObject(CallableStatementProxy statement, Str...
    method callableStatement_setObject (line 948) | void callableStatement_setObject(CallableStatementProxy statement,
    method callableStatement_setObject (line 954) | void callableStatement_setObject(CallableStatementProxy statement, Str...
    method callableStatement_setCharacterStream (line 957) | void callableStatement_setCharacterStream(CallableStatementProxy state...
    method callableStatement_setDate (line 960) | void callableStatement_setDate(CallableStatementProxy statement,
    method callableStatement_setTime (line 966) | void callableStatement_setTime(CallableStatementProxy statement,
    method callableStatement_setTimestamp (line 972) | void callableStatement_setTimestamp(CallableStatementProxy statement, ...
    method callableStatement_setNull (line 975) | void callableStatement_setNull(CallableStatementProxy statement, Strin...
    method callableStatement_getString (line 978) | String callableStatement_getString(CallableStatementProxy statement, S...
    method callableStatement_getBoolean (line 980) | boolean callableStatement_getBoolean(CallableStatementProxy statement,...
    method callableStatement_getByte (line 982) | byte callableStatement_getByte(CallableStatementProxy statement, Strin...
    method callableStatement_getShort (line 984) | short callableStatement_getShort(CallableStatementProxy statement, Str...
    method callableStatement_getInt (line 986) | int callableStatement_getInt(CallableStatementProxy statement, String ...
    method callableStatement_getLong (line 988) | long callableStatement_getLong(CallableStatementProxy statement, Strin...
    method callableStatement_getFloat (line 990) | float callableStatement_getFloat(CallableStatementProxy statement, Str...
    method callableStatement_getDouble (line 992) | double callableStatement_getDouble(CallableStatementProxy statement, S...
    method callableStatement_getBytes (line 994) | byte[] callableStatement_getBytes(CallableStatementProxy statement, St...
    method callableStatement_getDate (line 996) | java.sql.Date callableStatement_getDate(CallableStatementProxy stateme...
    method callableStatement_getTime (line 998) | java.sql.Time callableStatement_getTime(CallableStatementProxy stateme...
    method callableStatement_getTimestamp (line 1000) | java.sql.Timestamp callableStatement_getTimestamp(CallableStatementPro...
    method callableStatement_getObject (line 1003) | Object callableStatement_getObject(CallableStatementProxy statement, S...
    method callableStatement_getBigDecimal (line 1005) | BigDecimal callableStatement_getBigDecimal(CallableStatementProxy stat...
    method callableStatement_getObject (line 1008) | Object callableStatement_getObject(CallableStatementProxy statement, S...
    method callableStatement_getRef (line 1011) | Ref callableStatement_getRef(CallableStatementProxy statement, String ...
    method callableStatement_getBlob (line 1013) | Blob callableStatement_getBlob(CallableStatementProxy statement, Strin...
    method callableStatement_getClob (line 1015) | Clob callableStatement_getClob(CallableStatementProxy statement, Strin...
    method callableStatement_getArray (line 1017) | Array callableStatement_getArray(CallableStatementProxy statement, Str...
    method callableStatement_getDate (line 1019) | java.sql.Date callableStatement_getDate(CallableStatementProxy stateme...
    method callableStatement_getTime (line 1022) | java.sql.Time callableStatement_getTime(CallableStatementProxy stateme...
    method callableStatement_getTimestamp (line 1025) | java.sql.Timestamp callableStatement_getTimestamp(CallableStatementPro...
    method callableStatement_getURL (line 1028) | java.net.URL callableStatement_getURL(CallableStatementProxy statement...
    method callableStatement_getRowId (line 1030) | RowId callableStatement_getRowId(CallableStatementProxy statement, int...
    method callableStatement_getRowId (line 1032) | RowId callableStatement_getRowId(CallableStatementProxy statement, Str...
    method callableStatement_setRowId (line 1034) | void callableStatement_setRowId(CallableStatementProxy statement, Stri...
    method callableStatement_setNString (line 1037) | void callableStatement_setNString(CallableStatementProxy statement, St...
    method callableStatement_setNCharacterStream (line 1040) | void callableStatement_setNCharacterStream(CallableStatementProxy stat...
    method callableStatement_setNClob (line 1043) | void callableStatement_setNClob(CallableStatementProxy statement, Stri...
    method callableStatement_setClob (line 1046) | void callableStatement_setClob(CallableStatementProxy statement, Strin...
    method callableStatement_setBlob (line 1049) | void callableStatement_setBlob(CallableStatementProxy statement, Strin...
    method callableStatement_setNClob (line 1052) | void callableStatement_setNClob(CallableStatementProxy statement, Stri...
    method callableStatement_getNClob (line 1055) | NClob callableStatement_getNClob(CallableStatementProxy statement, int...
    method callableStatement_getNClob (line 1057) | NClob callableStatement_getNClob(CallableStatementProxy statement, Str...
    method callableStatement_setSQLXML (line 1059) | void callableStatement_setSQLXML(CallableStatementProxy statement, Str...
    method callableStatement_getSQLXML (line 1062) | SQLXML callableStatement_getSQLXML(CallableStatementProxy statement, i...
    method callableStatement_getSQLXML (line 1064) | SQLXML callableStatement_getSQLXML(CallableStatementProxy statement, S...
    method callableStatement_getNString (line 1066) | String callableStatement_getNString(CallableStatementProxy statement, ...
    method callableStatement_getNString (line 1068) | String callableStatement_getNString(CallableStatementProxy statement, ...
    method callableStatement_getNCharacterStream (line 1070) | java.io.Reader callableStatement_getNCharacterStream(CallableStatement...
    method callableStatement_getNCharacterStream (line 1073) | java.io.Reader callableStatement_getNCharacterStream(CallableStatement...
    method callableStatement_getCharacterStream (line 1076) | java.io.Reader callableStatement_getCharacterStream(CallableStatementP...
    method callableStatement_getCharacterStream (line 1079) | java.io.Reader callableStatement_getCharacterStream(CallableStatementP...
    method callableStatement_setBlob (line 1082) | void callableStatement_setBlob(CallableStatementProxy statement, Strin...
    method callableStatement_setClob (line 1084) | void callableStatement_setClob(CallableStatementProxy statement, Strin...
    method callableStatement_setAsciiStream (line 1086) | void callableStatement_setAsciiStream(CallableStatementProxy statement...
    method callableStatement_setBinaryStream (line 1089) | void callableStatement_setBinaryStream(CallableStatementProxy statemen...
    method callableStatement_setCharacterStream (line 1092) | void callableStatement_setCharacterStream(CallableStatementProxy state...
    method callableStatement_setAsciiStream (line 1095) | void callableStatement_setAsciiStream(CallableStatementProxy statement...
    method callableStatement_setBinaryStream (line 1098) | void callableStatement_setBinaryStream(CallableStatementProxy statement,
    method callableStatement_setCharacterStream (line 1103) | void callableStatement_setCharacterStream(CallableStatementProxy state...
    method callableStatement_setNCharacterStream (line 1106) | void callableStatement_setNCharacterStream(CallableStatementProxy stat...
    method callableStatement_setClob (line 1109) | void callableStatement_setClob(CallableStatementProxy statement, Strin...
    method callableStatement_setBlob (line 1112) | void callableStatement_setBlob(CallableStatementProxy statement, Strin...
    method callableStatement_setNClob (line 1115) | void callableStatement_setNClob(CallableStatementProxy statement, Stri...
    method clob_free (line 1118) | void clob_free(ClobProxy wrapper) throws SQLException;
    method clob_getAsciiStream (line 1120) | InputStream clob_getAsciiStream(ClobProxy wrapper) throws SQLException;
    method clob_getCharacterStream (line 1122) | Reader clob_getCharacterStream(ClobProxy wrapper) throws SQLException;
    method clob_getCharacterStream (line 1124) | Reader clob_getCharacterStream(ClobProxy wrapper, long pos, long lengt...
    method clob_getSubString (line 1126) | String clob_getSubString(ClobProxy wrapper, long pos, int length) thro...
    method clob_length (line 1128) | long clob_length(ClobProxy wrapper) throws SQLException;
    method clob_position (line 1130) | long clob_position(ClobProxy wrapper, String searchstr, long start) th...
    method clob_position (line 1132) | long clob_position(ClobProxy wrapper, Clob searchstr, long start) thro...
    method clob_setAsciiStream (line 1134) | OutputStream clob_setAsciiStream(ClobProxy wrapper, long pos) throws S...
    method clob_setCharacterStream (line 1136) | Writer clob_setCharacterStream(ClobProxy wrapper, long pos) throws SQL...
    method clob_setString (line 1138) | int clob_setString(ClobProxy wrapper, long pos, String str) throws SQL...
    method clob_setString (line 1140) | int clob_setString(ClobProxy wrapper, long pos, String str, int offset...
    method clob_truncate (line 1142) | void clob_truncate(ClobProxy wrapper, long len) throws SQLException;
    method dataSource_recycle (line 1146) | void dataSource_recycle(DruidPooledConnection connection) throws SQLEx...
    method dataSource_connect (line 1148) | DruidPooledConnection dataSource_connect(DruidDataSource dataSource, l...
    method resultSetMetaData_getColumnCount (line 1151) | int resultSetMetaData_getColumnCount(ResultSetMetaDataProxy metaData) ...
    method resultSetMetaData_isAutoIncrement (line 1153) | boolean resultSetMetaData_isAutoIncrement(ResultSetMetaDataProxy metaD...
    method resultSetMetaData_isCaseSensitive (line 1155) | boolean resultSetMetaData_isCaseSensitive(ResultSetMetaDataProxy metaD...
    method resultSetMetaData_isSearchable (line 1157) | boolean resultSetMetaData_isSearchable(ResultSetMetaDataProxy metaData...
    method resultSetMetaData_isCurrency (line 1159) | boolean resultSetMetaData_isCurrency(ResultSetMetaDataProxy metaData, ...
    method resultSetMetaData_isNullable (line 1161) | int resultSetMetaData_isNullable(ResultSetMetaDataProxy metaData, int ...
    method resultSetMetaData_isSigned (line 1163) | boolean resultSetMetaData_isSigned(ResultSetMetaDataProxy metaData, in...
    method resultSetMetaData_getColumnDisplaySize (line 1165) | int resultSetMetaData_getColumnDisplaySize(ResultSetMetaDataProxy meta...
    method resultSetMetaData_getColumnLabel (line 1167) | String resultSetMetaData_getColumnLabel(ResultSetMetaDataProxy metaDat...
    method resultSetMetaData_getColumnName (line 1169) | String resultSetMetaData_getColumnName(ResultSetMetaDataProxy metaData...
    method resultSetMetaData_getSchemaName (line 1171) | String resultSetMetaData_getSchemaName(ResultSetMetaDataProxy metaData...
    method resultSetMetaData_getPrecision (line 1173) | int resultSetMetaData_getPrecision(ResultSetMetaDataProxy metaData, in...
    method resultSetMetaData_getScale (line 1175) | int resultSetMetaData_getScale(ResultSetMetaDataProxy metaData, int co...
    method resultSetMetaData_getTableName (line 1177) | String resultSetMetaData_getTableName(ResultSetMetaDataProxy metaData,...
    method resultSetMetaData_getCatalogName (line 1179) | String resultSetMetaData_getCatalogName(ResultSetMetaDataProxy metaDat...
    method resultSetMetaData_getColumnType (line 1181) | int resultSetMetaData_getColumnType(ResultSetMetaDataProxy metaData, i...
    method resultSetMetaData_getColumnTypeName (line 1183) | String resultSetMetaData_getColumnTypeName(ResultSetMetaDataProxy meta...
    method resultSetMetaData_isReadOnly (line 1185) | boolean resultSetMetaData_isReadOnly(ResultSetMetaDataProxy metaData, ...
    method resultSetMetaData_isWritable (line 1187) | boolean resultSetMetaData_isWritable(ResultSetMetaDataProxy metaData, ...
    method resultSetMetaData_isDefinitelyWritable (line 1189) | boolean resultSetMetaData_isDefinitelyWritable(ResultSetMetaDataProxy ...
    method resultSetMetaData_getColumnClassName (line 1191) | String resultSetMetaData_getColumnClassName(ResultSetMetaDataProxy met...

FILE: core/src/main/java/com/alibaba/druid/filter/FilterChainImpl.java
  class FilterChainImpl (line 36) | public class FilterChainImpl implements FilterChain {
    method FilterChainImpl (line 43) | public FilterChainImpl(DataSourceProxy dataSource) {
    method FilterChainImpl (line 48) | public FilterChainImpl(DataSourceProxy dataSource, int pos) {
    method getFilterSize (line 54) | public int getFilterSize() {
    method getPos (line 58) | public int getPos() {
    method reset (line 62) | public void reset() {
    method cloneChain (line 66) | @Override
    method getDataSource (line 71) | public DataSourceProxy getDataSource() {
    method isWrapperFor (line 75) | @Override
    method unwrap (line 96) | @SuppressWarnings("unchecked")
    method connection_connect (line 123) | public ConnectionProxy connection_connect(Properties info) throws SQLE...
    method connection_clearWarnings (line 143) | @Override
    method connection_close (line 155) | @Override
    method connection_commit (line 168) | @Override
    method connection_createArrayOf (line 180) | @Override
    method connection_createBlob (line 193) | @Override
    method connection_createClob (line 204) | @Override
    method connection_createNClob (line 219) | @Override
    method connection_createSQLXML (line 234) | @Override
    method connection_createStatement (line 245) | @Override
    method connection_createStatement (line 266) | @Override
    method connection_createStatement (line 286) | @Override
    method connection_createStruct (line 308) | @Override
    method connection_getAutoCommit (line 322) | @Override
    method connection_getCatalog (line 333) | @Override
    method connection_getClientInfo (line 344) | @Override
    method connection_getClientInfo (line 355) | @Override
    method getFilters (line 366) | public List<Filter> getFilters() {
    method connection_getHoldability (line 370) | @Override
    method connection_getMetaData (line 381) | @Override
    method connection_getTransactionIsolation (line 392) | @Override
    method connection_getTypeMap (line 403) | @Override
    method connection_getWarnings (line 414) | @Override
    method connection_isClosed (line 425) | @Override
    method connection_isReadOnly (line 436) | @Override
    method connection_isValid (line 447) | @Override
    method connection_nativeSQL (line 458) | @Override
    method nextFilter (line 469) | private Filter nextFilter() {
    method connection_prepareCall (line 474) | @Override
    method connection_prepareCall (line 491) | @Override
    method connection_prepareCall (line 512) | @Override
    method connection_prepareStatement (line 541) | @Override
    method connection_prepareStatement (line 560) | @Override
    method connection_prepareStatement (line 579) | @Override
    method connection_prepareStatement (line 601) | @Override
    method connection_prepareStatement (line 628) | @Override
    method connection_prepareStatement (line 653) | @Override
    method connection_releaseSavepoint (line 670) | @Override
    method connection_rollback (line 682) | @Override
    method connection_rollback (line 694) | @Override
    method connection_setAutoCommit (line 706) | @Override
    method connection_setCatalog (line 718) | @Override
    method connection_setClientInfo (line 730) | @Override
    method connection_setClientInfo (line 744) | @Override
    method connection_setHoldability (line 758) | @Override
    method connection_setReadOnly (line 770) | @Override
    method connection_setSavepoint (line 782) | @Override
    method connection_setSavepoint (line 793) | @Override
    method connection_setTransactionIsolation (line 804) | @Override
    method connection_setTypeMap (line 816) | @Override
    method connection_getSchema (line 828) | @Override
    method connection_setSchema (line 839) | @Override
    method connection_abort (line 851) | public void connection_abort(ConnectionProxy conn, Executor executor) ...
    method connection_setNetworkTimeout (line 862) | public void connection_setNetworkTimeout(ConnectionProxy conn,
    method connection_getNetworkTimeout (line 875) | public int connection_getNetworkTimeout(ConnectionProxy conn) throws S...
    method resultSet_next (line 886) | @Override
    method resultSet_close (line 897) | @Override
    method resultSet_wasNull (line 910) | @Override
    method resultSet_getString (line 920) | @Override
    method resultSet_getBoolean (line 931) | @Override
    method resultSet_getByte (line 942) | @Override
    method resultSet_getShort (line 953) | @Override
    method resultSet_getInt (line 964) | @Override
    method resultSet_getLong (line 975) | @Override
    method resultSet_getFloat (line 986) | @Override
    method resultSet_getDouble (line 997) | @Override
    method resultSet_getBigDecimal (line 1008) | @SuppressWarnings("deprecation")
    method resultSet_getBytes (line 1020) | @Override
    method resultSet_getDate (line 1031) | @Override
    method resultSet_getTime (line 1042) | @Override
    method resultSet_getTimestamp (line 1053) | @Override
    method resultSet_getAsciiStream (line 1064) | @Override
    method resultSet_getUnicodeStream (line 1075) | @SuppressWarnings("deprecation")
    method resultSet_getBinaryStream (line 1088) | @Override
    method resultSet_getString (line 1099) | @Override
    method resultSet_getBoolean (line 1109) | @Override
    method resultSet_getByte (line 1120) | @Override
    method resultSet_getShort (line 1131) | @Override
    method resultSet_getInt (line 1142) | @Override
    method resultSet_getLong (line 1153) | @Override
    method resultSet_getFloat (line 1164) | @Override
    method resultSet_getDouble (line 1174) | @Override
    method resultSet_getBigDecimal (line 1184) | @SuppressWarnings("deprecation")
    method resultSet_getBytes (line 1196) | @Override
    method resultSet_getDate (line 1205) | @Override
    method resultSet_getTime (line 1216) | @Override
    method resultSet_getTimestamp (line 1227) | @Override
    method resultSet_getAsciiStream (line 1238) | @Override
    method resultSet_getUnicodeStream (line 1249) | @SuppressWarnings("deprecation")
    method resultSet_getBinaryStream (line 1261) | @Override
    method resultSet_getWarnings (line 1272) | @Override
    method resultSet_clearWarnings (line 1283) | @Override
    method resultSet_getCursorName (line 1295) | @Override
    method resultSet_getMetaData (line 1306) | @Override
    method resultSet_getObject (line 1322) | @Override
    method resultSet_getObject (line 1349) | @Override
    method resultSet_getObject (line 1376) | @Override
    method resultSet_getObject (line 1403) | @Override
    method resultSet_findColumn (line 1430) | @Override
    method resultSet_getCharacterStream (line 1440) | @Override
    method resultSet_getCharacterStream (line 1450) | @Override
    method resultSet_getBigDecimal (line 1461) | @Override
    method resultSet_getBigDecimal (line 1472) | @Override
    method resultSet_isBeforeFirst (line 1483) | @Override
    method resultSet_isAfterLast (line 1494) | @Override
    method resultSet_isFirst (line 1505) | @Override
    method resultSet_isLast (line 1516) | @Override
    method resultSet_beforeFirst (line 1526) | @Override
    method resultSet_afterLast (line 1537) | @Override
    method resultSet_first (line 1549) | @Override
    method resultSet_last (line 1560) | @Override
    method resultSet_getRow (line 1571) | @Override
    method resultSet_absolute (line 1582) | @Override
    method resultSet_relative (line 1593) | @Override
    method resultSet_previous (line 1602) | @Override
    method resultSet_setFetchDirection (line 1613) | @Override
    method resultSet_getFetchDirection (line 1625) | @Override
    method resultSet_setFetchSize (line 1636) | @Override
    method resultSet_getFetchSize (line 1648) | @Override
    method resultSet_getType (line 1659) | @Override
    method resultSet_getConcurrency (line 1670) | @Override
    method resultSet_rowUpdated (line 1681) | @Override
    method resultSet_rowInserted (line 1692) | @Override
    method resultSet_rowDeleted (line 1703) | @Override
    method resultSet_updateNull (line 1714) | @Override
    method resultSet_updateBoolean (line 1726) | @Override
    method resultSet_updateByte (line 1737) | @Override
    method resultSet_updateShort (line 1746) | @Override
    method resultSet_updateInt (line 1755) | @Override
    method resultSet_updateLong (line 1764) | @Override
    method resultSet_updateFloat (line 1773) | @Override
    method resultSet_updateDouble (line 1782) | @Override
    method resultSet_updateBigDecimal (line 1791) | @Override
    method resultSet_updateString (line 1802) | @Override
    method resultSet_updateBytes (line 1811) | @Override
    method resultSet_updateDate (line 1820) | @Override
    method resultSet_updateTime (line 1829) | @Override
    method resultSet_updateTimestamp (line 1838) | @Override
    method resultSet_updateAsciiStream (line 1848) | @Override
    method resultSet_updateBinaryStream (line 1861) | @Override
    method resultSet_updateCharacterStream (line 1871) | @Override
    method resultSet_updateObject (line 1881) | @Override
    method resultSet_updateObject (line 1891) | @Override
    method resultSet_updateNull (line 1900) | @Override
    method resultSet_updateBoolean (line 1909) | @Override
    method resultSet_updateByte (line 1918) | @Override
    method resultSet_updateShort (line 1927) | @Override
    method resultSet_updateInt (line 1936) | @Override
    method resultSet_updateLong (line 1945) | @Override
    method resultSet_updateFloat (line 1954) | @Override
    method resultSet_updateDouble (line 1963) | @Override
    method resultSet_updateBigDecimal (line 1972) | @Override
    method resultSet_updateString (line 1982) | @Override
    method resultSet_updateBytes (line 1991) | @Override
    method resultSet_updateDate (line 2000) | @Override
    method resultSet_updateTime (line 2011) | @Override
    method resultSet_updateTimestamp (line 2022) | @Override
    method resultSet_updateAsciiStream (line 2032) | @Override
    method resultSet_updateBinaryStream (line 2042) | @Override
    method resultSet_updateCharacterStream (line 2052) | @Override
    method resultSet_updateObject (line 2062) | @Override
    method resultSet_updateObject (line 2072) | @Override
    method resultSet_insertRow (line 2081) | @Override
    method resultSet_updateRow (line 2090) | @Override
    method resultSet_deleteRow (line 2099) | @Override
    method resultSet_refreshRow (line 2108) | @Override
    method resultSet_cancelRowUpdates (line 2117) | @Override
    method resultSet_moveToInsertRow (line 2126) | @Override
    method resultSet_moveToCurrentRow (line 2135) | @Override
    method resultSet_getStatement (line 2144) | @Override
    method resultSet_getObject (line 2152) | @Override
    method resultSet_getRef (line 2174) | @Override
    method resultSet_getBlob (line 2182) | @Override
    method resultSet_getClob (line 2190) | @Override
    method resultSet_getArray (line 2201) | @Override
    method resultSet_getObject (line 2212) | @Override
    method resultSet_getRef (line 2234) | @Override
    method resultSet_getBlob (line 2242) | @Override
    method resultSet_getClob (line 2250) | @Override
    method resultSet_getArray (line 2261) | @Override
    method resultSet_getDate (line 2269) | @Override
    method resultSet_getDate (line 2279) | @Override
    method resultSet_getTime (line 2288) | @Override
    method resultSet_getTime (line 2298) | @Override
    method resultSet_getTimestamp (line 2307) | @Override
    method resultSet_getTimestamp (line 2316) | @Override
    method resultSet_getURL (line 2325) | @Override
    method resultSet_getURL (line 2333) | @Override
    method resultSet_updateRef (line 2341) | @Override
    method resultSet_updateRef (line 2350) | @Override
    method resultSet_updateBlob (line 2359) | @Override
    method resultSet_updateBlob (line 2368) | @Override
    method resultSet_updateClob (line 2377) | @Override
    method resultSet_updateClob (line 2386) | @Override
    method resultSet_updateArray (line 2395) | @Override
    method resultSet_updateArray (line 2404) | @Override
    method resultSet_getRowId (line 2414) | @Override
    method resultSet_getRowId (line 2422) | @Override
    method resultSet_updateRowId (line 2430) | @Override
    method resultSet_updateRowId (line 2439) | @Override
    method resultSet_getHoldability (line 2448) | @Override
    method resultSet_isClosed (line 2456) | @Override
    method resultSet_updateNString (line 2464) | @Override
    method resultSet_updateNString (line 2473) | @Override
    method resultSet_updateNClob (line 2483) | @Override
    method resultSet_updateNClob (line 2492) | @Override
    method resultSet_getNClob (line 2502) | @Override
    method resultSet_getNClob (line 2513) | @Override
    method resultSet_getSQLXML (line 2525) | @Override
    method resultSet_getSQLXML (line 2534) | @Override
    method resultSet_updateSQLXML (line 2542) | @Override
    method resultSet_updateSQLXML (line 2553) | @Override
    method resultSet_getNString (line 2563) | @Override
    method resultSet_getNString (line 2571) | @Override
    method resultSet_getNCharacterStream (line 2579) | @Override
    method resultSet_getNCharacterStream (line 2587) | @Override
    method resultSet_updateNCharacterStream (line 2596) | @Override
    method resultSet_updateNCharacterStream (line 2606) | @Override
    method resultSet_updateAsciiStream (line 2616) | @Override
    method resultSet_updateBinaryStream (line 2626) | @Override
    method resultSet_updateCharacterStream (line 2636) | @Override
    method resultSet_updateAsciiStream (line 2649) | @Override
    method resultSet_updateBinaryStream (line 2659) | @Override
    method resultSet_updateCharacterStream (line 2669) | @Override
    method resultSet_updateBlob (line 2679) | @Override
    method resultSet_updateBlob (line 2689) | @Override
    method resultSet_updateClob (line 2699) | @Override
    method resultSet_updateClob (line 2709) | @Override
    method resultSet_updateNClob (line 2719) | @Override
    method resultSet_updateNClob (line 2729) | @Override
    method resultSet_updateNCharacterStream (line 2739) | @Override
    method resultSet_updateNCharacterStream (line 2749) | @Override
    method resultSet_updateAsciiStream (line 2759) | @Override
    method resultSet_updateBinaryStream (line 2769) | @Override
    method resultSet_updateCharacterStream (line 2779) | @Override
    method resultSet_updateAsciiStream (line 2789) | @Override
    method resultSet_updateBinaryStream (line 2799) | @Override
    method resultSet_updateCharacterStream (line 2809) | @Override
    method resultSet_updateBlob (line 2819) | @Override
    method resultSet_updateBlob (line 2829) | @Override
    method resultSet_updateClob (line 2839) | @Override
    method resultSet_updateClob (line 2848) | @Override
    method resultSet_updateNClob (line 2857) | @Override
    method resultSet_updateNClob (line 2866) | @Override
    method statement_executeQuery (line 2876) | @Override
    method statement_executeUpdate (line 2892) | @Override
    method statement_close (line 2900) | @Override
    method statement_getMaxFieldSize (line 2909) | @Override
    method statement_setMaxFieldSize (line 2917) | @Override
    method statement_getMaxRows (line 2926) | @Override
    method statement_setMaxRows (line 2934) | @Override
    method statement_setEscapeProcessing (line 2943) | @Override
    method statement_getQueryTimeout (line 2952) | @Override
    method statement_setQueryTimeout (line 2960) | @Override
    method statement_cancel (line 2969) | @Override
    method statement_getWarnings (line 2978) | @Override
    method statement_clearWarnings (line 2986) | @Override
    method statement_setCursorName (line 2995) | @Override
    method statement_execute (line 3004) | @Override
    method statement_getResultSet (line 3012) | @Override
    method statement_getUpdateCount (line 3028) | @Override
    method statement_getMoreResults (line 3036) | @Override
    method statement_setFetchDirection (line 3044) | @Override
    method statement_getFetchDirection (line 3053) | @Override
    method statement_setFetchSize (line 3061) | @Override
    method statement_getFetchSize (line 3070) | @Override
    method statement_getResultSetConcurrency (line 3078) | @Override
    method statement_getResultSetType (line 3086) | @Override
    method statement_addBatch (line 3094) | @Override
    method statement_clearBatch (line 3103) | @Override
    method statement_executeBatch (line 3112) | @Override
    method statement_getConnection (line 3120) | @Override
    method statement_getMoreResults (line 3128) | @Override
    method statement_getGeneratedKeys (line 3136) | @Override
    method statement_executeUpdate (line 3150) | @Override
    method statement_executeUpdate (line 3160) | @Override
    method statement_executeUpdate (line 3168) | @Override
    method statement_execute (line 3176) | @Override
    method statement_execute (line 3184) | @Override
    method statement_execute (line 3192) | @Override
    method statement_getResultSetHoldability (line 3200) | @Override
    method statement_isClosed (line 3208) | @Override
    method statement_setPoolable (line 3216) | @Override
    method statement_isPoolable (line 3225) | @Override
    method preparedStatement_executeQuery (line 3235) | @Override
    method preparedStatement_executeUpdate (line 3249) | @Override
    method preparedStatement_setNull (line 3257) | @Override
    method preparedStatement_setBoolean (line 3267) | @Override
    method preparedStatement_setByte (line 3277) | @Override
    method preparedStatement_setShort (line 3287) | @Override
    method preparedStatement_setInt (line 3297) | @Override
    method preparedStatement_setLong (line 3307) | @Override
    method preparedStatement_setFloat (line 3317) | @Override
    method preparedStatement_setDouble (line 3327) | @Override
    method preparedStatement_setBigDecimal (line 3337) | @Override
    method preparedStatement_setString (line 3347) | @Override
    method preparedStatement_setBytes (line 3357) | @Override
    method preparedStatement_setDate (line 3367) | @Override
    method preparedStatement_setTime (line 3377) | @Override
    method preparedStatement_setTimestamp (line 3387) | @Override
    method preparedStatement_setAsciiStream (line 3397) | @Override
    method preparedStatement_setUnicodeStream (line 3407) | @SuppressWarnings("deprecation")
    method preparedStatement_setBinaryStream (line 3418) | @Override
    method preparedStatement_clearParameters (line 3428) | @Override
    method preparedStatement_setObject (line 3437) | @Override
    method preparedStatement_setObject (line 3447) | @Override
    method preparedStatement_execute (line 3457) | @Override
    method preparedStatement_addBatch (line 3465) | @Override
    method preparedStatement_setCharacterStream (line 3474) | @Override
    method preparedStatement_setRef (line 3484) | @Override
    method preparedStatement_setBlob (line 3494) | @Override
    method preparedStatement_setClob (line 3506) | @Override
    method preparedStatement_setArray (line 3522) | @Override
    method preparedStatement_getMetaData (line 3532) | @Override
    method preparedStatement_setDate (line 3540) | @Override
    method preparedStatement_setTime (line 3550) | @Override
    method preparedStatement_setTimestamp (line 3560) | @Override
    method preparedStatement_setNull (line 3570) | @Override
    method preparedStatement_setURL (line 3580) | @Override
    method preparedStatement_getParameterMetaData (line 3590) | @Override
    method preparedStatement_setRowId (line 3599) | @Override
    method preparedStatement_setNString (line 3609) | @Override
    method preparedStatement_setNCharacterStream (line 3619) | @Override
    method preparedStatement_setNClob (line 3629) | @Override
    method preparedStatement_setClob (line 3645) | @Override
    method preparedStatement_setBlob (line 3655) | @Override
    method preparedStatement_setNClob (line 3665) | @Override
    method preparedStatement_setSQLXML (line 3675) | @Override
    method preparedStatement_setObject (line 3685) | @Override
    method preparedStatement_setAsciiStream (line 3695) | @Override
    method preparedStatement_setBinaryStream (line 3705) | @Override
    method preparedStatement_setCharacterStream (line 3715) | @Override
    method preparedStatement_setAsciiStream (line 3725) | @Override
    method preparedStatement_setBinaryStream (line 3735) | @Override
    method preparedStatement_setCharacterStream (line 3745) | @Override
    method preparedStatement_setNCharacterStream (line 3755) | @Override
    method preparedStatement_setClob (line 3767) | @Override
    method preparedStatement_setBlob (line 3777) | @Override
    method preparedStatement_setNClob (line 3787) | @Override
    method callableStatement_registerOutParameter (line 3799) | @Override
    method callableStatement_registerOutParameter (line 3811) | @Override
    method callableStatement_wasNull (line 3821) | @Override
    method callableStatement_getString (line 3829) | @Override
    method callableStatement_getBoolean (line 3838) | @Override
    method callableStatement_getByte (line 3847) | @Override
    method callableStatement_getShort (line 3855) | @Override
    method callableStatement_getInt (line 3863) | @Override
    method callableStatement_getLong (line 3871) | @Override
    method callableStatement_getFloat (line 3879) | @Override
    method callableStatement_getDouble (line 3887) | @Override
    method callableStatement_getBigDecimal (line 3896) | @SuppressWarnings("deprecation")
    method callableStatement_getBytes (line 3906) | @Override
    method callableStatement_getDate (line 3914) | @Override
    method callableStatement_getTime (line 3923) | @Override
    method callableStatement_getTimestamp (line 3932) | @Override
    method callableStatement_getObject (line 3941) | @Override
    method callableStatement_getObject (line 3962) | @Override
    method callableStatement_getObject (line 3983) | @Override
    method callableStatement_getObject (line 4004) | @Override
    method callableStatement_getBigDecimal (line 4025) | @Override
    method callableStatement_getRef (line 4034) | @Override
    method callableStatement_getBlob (line 4042) | @Override
    method callableStatement_getClob (line 4050) | @Override
    method callableStatement_getArray (line 4062) | @Override
    method callableStatement_getDate (line 4070) | @Override
    method callableStatement_getTime (line 4079) | @Override
    method callableStatement_getTimestamp (line 4088) | @Override
    method callableStatement_registerOutParameter (line 4097) | @Override
    method callableStatement_registerOutParameter (line 4107) | @Override
    method callableStatement_registerOutParameter (line 4117) | @Override
    method callableStatement_registerOutParameter (line 4127) | @Override
    method callableStatement_getURL (line 4137) | @Override
    method callableStatement_setURL (line 4146) | @Override
    method callableStatement_setNull (line 4156) | @Override
    method callableStatement_setBoolean (line 4166) | @Override
    method callableStatement_setByte (line 4176) | @Override
    method callableStatement_setShort (line 4185) | @Override
    method callableStatement_setInt (line 4195) | @Override
    method callableStatement_setLong (line 4205) | @Override
    method callableStatement_setFloat (line 4215) | @Override
    method callableStatement_setDouble (line 4225) | @Override
    method callableStatement_setBigDecimal (line 4235) | @Override
    method callableStatement_setString (line 4245) | @Override
    method callableStatement_setBytes (line 4255) | @Override
    method callableStatement_setDate (line 4265) | @Override
    method callableStatement_setTime (line 4275) | @Override
    method callableStatement_setTimestamp (line 4285) | @Override
    method callableStatement_setAsciiStream (line 4295) | @Override
    method callableStatement_setBinaryStream (line 4305) | @Override
    method callableStatement_setObject (line 4315) | @Override
    method callableStatement_setObject (line 4325) | @Override
    method callableStatement_setObject (line 4335) | @Override
    method callableStatement_setCharacterStream (line 4345) | @Override
    method callableStatement_setDate (line 4355) | @Override
    method callableStatement_setTime (line 4365) | @Override
    method callableStatement_setTimestamp (line 4375) | @Override
    method callableStatement_setNull (line 4385) | @Override
    method callableStatement_getString (line 4395) | @Override
    method callableStatement_getBoolean (line 4404) | @Override
    method callableStatement_getByte (line 4413) | @Override
    method callableStatement_getShort (line 4421) | @Override
    method callableStatement_getInt (line 4430) | @Override
    method callableStatement_getLong (line 4438) | @Override
    method callableStatement_getFloat (line 4446) | @Override
    method callableStatement_getDouble (line 4455) | @Override
    method callableStatement_getBytes (line 4464) | @Override
    method callableStatement_getDate (line 4473) | @Override
    method callableStatement_getTime (line 4482) | @Override
    method callableStatement_getTimestamp (line 4491) | @Override
    method callableStatement_getBigDecimal (line 4500) | @Override
    method callableStatement_getRef (line 4509) | @Override
    method callableStatement_getBlob (line 4517) | @Override
    method callableStatement_getClob (line 4525) | @Override
    method callableStatement_getArray (line 4537) | @Override
    method callableStatement_getDate (line 4546) | @Override
    method callableStatement_getTime (line 4555) | @Override
    method callableStatement_getTimestamp (line 4564) | @Override
    method callableStatement_getURL (line 4573) | @Override
    method callableStatement_getRowId (line 4582) | @Override
    method callableStatement_getRowId (line 4590) | @Override
    method callableStatement_setRowId (line 4599) | @Override
    method callableStatement_setNString (line 4609) | @Override
    method callableStatement_setNCharacterStream (line 4619) | @Override
    method callableStatement_setNClob (line 4629) | @Override
    method callableStatement_setClob (line 4645) | @Override
    method callableStatement_setBlob (line 4655) | @Override
    method callableStatement_setNClob (line 4665) | @Override
    method callableStatement_getNClob (line 4675) | @Override
    method callableStatement_getNClob (line 4687) | @Override
    method callableStatement_setSQLXML (line 4700) | @Override
    method callableStatement_getSQLXML (line 4710) | @Override
    method callableStatement_getSQLXML (line 4719) | @Override
    method callableStatement_getNString (line 4728) | @Override
    method callableStatement_getNString (line 4737) | @Override
    method callableStatement_getNCharacterStream (line 4746) | @Override
    method callableStatement_getNCharacterStream (line 4755) | @Override
    method callableStatement_getCharacterStream (line 4764) | @Override
    method callableStatement_getCharacterStream (line 4773) | @Override
    method callableStatement_setBlob (line 4782) | @Override
    method callableStatement_setClob (line 4792) | @Override
    method callableStatement_setAsciiStream (line 4808) | @Override
    method callableStatement_setBinaryStream (line 4818) | @Override
    method callableStatement_setCharacterStream (line 4828) | @Override
    method callableStatement_setAsciiStream (line 4838) | @Override
    method callableStatement_setBinaryStream (line 4848) | @Override
    method callableStatement_setCharacterStream (line 4858) | @Override
    method callableStatement_setNCharacterStream (line 4868) | @Override
    method callableStatement_setClob (line 4878) | @Override
    method callableStatement_setBlob (line 4888) | @Override
    method callableStatement_setNClob (line 4898) | @Override
    method clob_length (line 4908) | @Override
    method clob_getSubString (line 4916) | @Override
    method clob_getCharacterStream (line 4924) | @Override
    method clob_getAsciiStream (line 4932) | @Override
    method clob_position (line 4940) | @Override
    method clob_position (line 4948) | @Override
    method clob_setString (line 4956) | @Override
    method clob_setString (line 4964) | @Override
    method clob_setAsciiStream (line 4972) | @Override
    method clob_setCharacterStream (line 4980) | @Override
    method clob_truncate (line 4988) | @Override
    method clob_free (line 4997) | @Override
    method clob_getCharacterStream (line 5006) | @Override
    method wrap (line 5016) | public ClobProxy wrap(ConnectionProxy conn, Clob clob) {
    method wrap (line 5028) | public NClobProxy wrap(ConnectionProxy conn, NClob clob) {
    method wrap (line 5036) | public ClobProxy wrap(StatementProxy stmt, Clob clob) {
    method wrap (line 5048) | public NClobProxy wrap(StatementProxy stmt, NClob nclob) {
    method dataSource_recycle (line 5056) | @Override
    method dataSource_connect (line 5066) | @Override
    method resultSetMetaData_getColumnCount (line 5077) | @Override
    method resultSetMetaData_isAutoIncrement (line 5086) | @Override
    method resultSetMetaData_isCaseSensitive (line 5095) | @Override
    method resultSetMetaData_isSearchable (line 5104) | @Override
    method resultSetMetaData_isCurrency (line 5113) | @Override
    method resultSetMetaData_isNullable (line 5122) | @Override
    method resultSetMetaData_isSigned (line 5131) | @Override
    method resultSetMetaData_getColumnDisplaySize (line 5140) | @Override
    method resultSetMetaData_getColumnLabel (line 5149) | @Override
    method resultSetMetaData_getColumnName (line 5158) | @Override
    method resultSetMetaData_getSchemaName (line 5167) | @Override
    method resultSetMetaData_getPrecision (line 5176) | @Override
    method resultSetMetaData_getScale (line 5186) | @Override
    method resultSetMetaData_getTableName (line 5197) | @Override
    method resultSetMetaData_getCatalogName (line 5208) | @Override
    method resultSetMetaData_getColumnType (line 5219) | @Override
    method resultSetMetaData_getColumnTypeName (line 5230) | @Override
    method resultSetMetaData_isReadOnly (line 5241) | @Override
    method resultSetMetaData_isWritable (line 5252) | @Override
    method resultSetMetaData_isDefinitelyWritable (line 5263) | @Override
    method resultSetMetaData_getColumnClassName (line 5275) | @Override

FILE: core/src/main/java/com/alibaba/druid/filter/FilterEventAdapter.java
  class FilterEventAdapter (line 26) | public abstract class FilterEventAdapter extends FilterAdapter {
    method FilterEventAdapter (line 27) | public FilterEventAdapter() {
    method connection_connect (line 30) | public ConnectionProxy connection_connect(FilterChain chain, Propertie...
    method connection_connectBefore (line 40) | public void connection_connectBefore(FilterChain chain, Properties inf...
    method connection_connectAfter (line 43) | public void connection_connectAfter(ConnectionProxy connection) {
    method connection_createStatement (line 46) | @Override
    method connection_createStatement (line 56) | @Override
    method connection_createStatement (line 67) | @Override
    method connection_prepareCall (line 79) | @Override
    method connection_prepareCall (line 89) | @Override
    method connection_prepareCall (line 101) | @Override
    method connection_prepareStatement (line 113) | @Override
    method connection_prepareStatement (line 123) | @Override
    method connection_prepareStatement (line 133) | @Override
    method connection_prepareStatement (line 145) | @Override
    method connection_prepareStatement (line 157) | @Override
    method connection_prepareStatement (line 167) | @Override
    method statement_execute (line 177) | @Override
    method statement_execute (line 199) | @Override
    method statement_execute (line 222) | @Override
    method statement_execute (line 245) | @Override
    method statement_executeBatch (line 268) | @Override
    method statement_executeQuery (line 290) | @Override
    method statement_executeUpdate (line 316) | @Override
    method statement_executeUpdate (line 338) | @Override
    method statement_executeUpdate (line 361) | @Override
    method statement_executeUpdate (line 384) | @Override
    method statement_getGeneratedKeys (line 407) | @Override
    method statement_getResultSet (line 418) | @Override
    method preparedStatement_execute (line 429) | @Override
    method preparedStatement_executeQuery (line 453) | @Override
    method preparedStatement_executeUpdate (line 480) | @Override
    method statementCreateAfter (line 503) | protected void statementCreateAfter(StatementProxy statement) {
    method statementPrepareAfter (line 506) | protected void statementPrepareAfter(PreparedStatementProxy statement) {
    method statementPrepareCallAfter (line 509) | protected void statementPrepareCallAfter(CallableStatementProxy statem...
    method resultSetOpenAfter (line 512) | protected void resultSetOpenAfter(ResultSetProxy resultSet) {
    method statementExecuteUpdateBefore (line 515) | protected void statementExecuteUpdateBefore(StatementProxy statement, ...
    method statementExecuteUpdateAfter (line 518) | protected void statementExecuteUpdateAfter(StatementProxy statement, S...
    method statementExecuteQueryBefore (line 521) | protected void statementExecuteQueryBefore(StatementProxy statement, S...
    method statementExecuteQueryAfter (line 524) | protected void statementExecuteQueryAfter(StatementProxy statement, St...
    method statementExecuteBefore (line 527) | protected void statementExecuteBefore(StatementProxy statement, String...
    method statementExecuteAfter (line 530) | protected void statementExecuteAfter(StatementProxy statement, String ...
    method statementExecuteBatchBefore (line 533) | protected void statementExecuteBatchBefore(StatementProxy statement) {
    method statementExecuteBatchAfter (line 536) | protected void statementExecuteBatchAfter(StatementProxy statement, in...
    method statement_executeErrorAfter (line 539) | protected void statement_executeErrorAfter(StatementProxy statement, S...

FILE: core/src/main/java/com/alibaba/druid/filter/FilterManager.java
  class FilterManager (line 33) | public class FilterManager {
    method getFilter (line 53) | public static final String getFilter(String alias) {
    method loadFilterConfig (line 67) | public static Properties loadFilterConfig() throws IOException {
    method loadFilterConfig (line 77) | private static void loadFilterConfig(Properties filterProperties, Clas...
    method loadFilter (line 99) | public static void loadFilter(List<Filter> filters, String filterName)...
    method existsFilter (line 161) | private static boolean existsFilter(List<Filter> filterList, String fi...

FILE: core/src/main/java/com/alibaba/druid/filter/config/ConfigFilter.java
  class ConfigFilter (line 93) | public class ConfigFilter extends FilterAdapter {
    method ConfigFilter (line 104) | public ConfigFilter() {
    method init (line 107) | public void init(DataSourceProxy dataSourceProxy) {
    method isDecrypt (line 138) | public boolean isDecrypt(Properties connectionProperties, Properties c...
    method loadPropertyFromConfigFile (line 153) | Properties loadPropertyFromConfigFile(Properties connectionProperties) {
    method decrypt (line 178) | public void decrypt(DruidDataSource dataSource, Properties info) {
    method getPublicKey (line 207) | public PublicKey getPublicKey(Properties connectionProperties, Propert...
    method loadConfig (line 224) | public Properties loadConfig(String filePath) {
    method getFileAsStream (line 268) | private InputStream getFileAsStream(String filePath) throws FileNotFou...

FILE: core/src/main/java/com/alibaba/druid/filter/config/ConfigTools.java
  class ConfigTools (line 35) | @Deprecated
    method main (line 42) | public static void main(String[] args) throws Exception {
    method decrypt (line 50) | public static String decrypt(String cipherText) throws Exception {
    method decrypt (line 54) | public static String decrypt(String publicKeyText, String cipherText)
    method getPublicKeyByX509 (line 61) | public static PublicKey getPublicKeyByX509(String x509File) {
    method getPublicKey (line 81) | public static PublicKey getPublicKey(String publicKeyText) {
    method getPublicKeyByPublicKeyFile (line 98) | public static PublicKey getPublicKeyByPublicKeyFile(String publicKeyFi...
    method decrypt (line 124) | public static String decrypt(PublicKey publicKey, String cipherText)
    method encrypt (line 149) | public static String encrypt(String plainText) throws Exception {
    method encrypt (line 153) | public static String encrypt(String key, String plainText) throws Exce...
    method encrypt (line 162) | public static String encrypt(byte[] keyBytes, String plainText)
    method genKeyPairBytes (line 185) | public static byte[][] genKeyPairBytes(int keySize)
    method genKeyPair (line 199) | public static String[] genKeyPair(int keySize)

FILE: core/src/main/java/com/alibaba/druid/filter/encoding/CharsetConvert.java
  class CharsetConvert (line 25) | public class CharsetConvert {
    method CharsetConvert (line 32) | public CharsetConvert(String clientEncoding, String serverEncoding) {
    method encode (line 46) | public String encode(String s) throws UnsupportedEncodingException {
    method decode (line 61) | public String decode(String s) throws UnsupportedEncodingException {
    method isEmpty (line 74) | public boolean isEmpty(String s) {

FILE: core/src/main/java/com/alibaba/druid/filter/encoding/CharsetParameter.java
  class CharsetParameter (line 21) | @Deprecated
    method getClientEncoding (line 39) | public String getClientEncoding() {
    method setClientEncoding (line 43) | public void setClientEncoding(String clientEncoding) {
    method getServerEncoding (line 47) | public String getServerEncoding() {
    method setServerEncoding (line 51) | public void setServerEncoding(String serverEncoding) {

FILE: core/src/main/java/com/alibaba/druid/filter/encoding/EncodingConvertFilter.java
  class EncodingConvertFilter (line 35) | public class EncodingConvertFilter extends FilterAdapter {
    method connection_connect (line 42) | @Override
    method resultSet_getString (line 54) | @Override
    method resultSet_getString (line 60) | @Override
    method resultSet_getObject (line 68) | @Override
    method resultSet_getObject (line 89) | @Override
    method resultSet_getObject (line 113) | @Override
    method resultSet_getObject (line 135) | @Override
    method resultSet_getObject (line 158) | @Override
    method resultSet_getObject (line 182) | @Override
    method decodeObject (line 213) | public Object decodeObject(ConnectionProxy connection, Object object) ...
    method decodeObject (line 227) | public Object decodeObject(CallableStatementProxy stmt, Object object)...
    method encode (line 241) | public String encode(ConnectionProxy connection, String s) throws SQLE...
    method decode (line 251) | public String decode(ConnectionProxy connection, String s) throws SQLE...
    method connection_prepareStatement (line 262) | @Override
    method connection_prepareStatement (line 268) | @Override
    method connection_prepareStatement (line 274) | @Override
    method connection_prepareStatement (line 282) | @Override
    method connection_prepareStatement (line 290) | @Override
    method connection_prepareStatement (line 296) | @Override
    method connection_prepareCall (line 304) | @Override
    method connection_prepareCall (line 310) | @Override
    method connection_prepareCall (line 318) | @Override
    method connection_nativeSQL (line 328) | @Override
    method statement_addBatch (line 336) | @Override
    method statement_execute (line 341) | @Override
    method statement_execute (line 346) | @Override
    method statement_execute (line 352) | @Override
    method statement_execute (line 358) | @Override
    method statement_executeQuery (line 364) | @Override
    method statement_executeUpdate (line 370) | @Override
    method statement_executeUpdate (line 375) | @Override
    method statement_executeUpdate (line 382) | @Override
    method statement_executeUpdate (line 389) | @Override
    method preparedStatement_setString (line 397) | @Override
    method preparedStatement_setCharacterStream (line 403) | @Override
    method preparedStatement_setCharacterStream (line 411) | @Override
    method preparedStatement_setCharacterStream (line 421) | @Override
    method preparedStatement_setObject (line 431) | @Override
    method preparedStatement_setObject (line 446) | @Override
    method preparedStatement_setObject (line 462) | @Override
    method clob_position (line 481) | @Override
    method clob_getSubString (line 486) | @Override
    method clob_getCharacterStream (line 492) | @Override
    method clob_getCharacterStream (line 499) | @Override
    method clob_setString (line 507) | @Override
    method clob_setString (line 512) | @Override
    method callableStatement_setCharacterStream (line 520) | @Override
    method callableStatement_setCharacterStream (line 528) | @Override
    method callableStatement_setCharacterStream (line 538) | @Override
    method callableStatement_setString (line 549) | @Override
    method callableStatement_setObject (line 555) | @Override
    method callableStatement_setObject (line 570) | @Override
    method callableStatement_setObject (line 586) | @Override
    method callableStatement_getString (line 602) | @Override
    method callableStatement_getString (line 609) | @Override
    method callableStatement_getObject (line 616) | @Override
    method callableStatement_getObject (line 623) | @Override
    method callableStatement_getObject (line 630) | @Override
    method callableStatement_getObject (line 637) | @Override

FILE: core/src/main/java/com/alibaba/druid/filter/logging/CommonsLogFilter.java
  class CommonsLogFilter (line 25) | public class CommonsLogFilter extends LogFilter {
    method setDataSourceLogger (line 31) | public void setDataSourceLogger(Log dataSourceLogger) {
    method getDataSourceLoggerName (line 38) | @Override
    method setDataSourceLoggerName (line 43) | @Override
    method getConnectionLoggerName (line 49) | @Override
    method setConnectionLoggerName (line 54) | @Override
    method setConnectionLogger (line 60) | public void setConnectionLogger(Log connectionLogger) {
    method getStatementLoggerName (line 67) | @Override
    method setStatementLoggerName (line 72) | @Override
    method setStatementLogger (line 78) | public void setStatementLogger(Log statementLogger) {
    method getResultSetLoggerName (line 85) | @Override
    method setResultSetLoggerName (line 90) | @Override
    method setResultSetLogger (line 96) | public void setResultSetLogger(Log resultSetLogger) {
    method isDataSourceLogEnabled (line 103) | @Override
    method isConnectionLogErrorEnabled (line 108) | public boolean isConnectionLogErrorEnabled() {
    method isConnectionLogEnabled (line 112) | @Override
    method isStatementLogEnabled (line 117) | @Override
    method isResultSetLogEnabled (line 122) | @Override
    method isResultSetLogErrorEnabled (line 127) | @Override
    method isStatementLogErrorEnabled (line 132) | @Override
    method connectionLog (line 137) | @Override
    method statementLog (line 142) | @Override
    method resultSetLog (line 147) | @Override
    method resultSetLogError (line 152) | @Override
    method statementLogError (line 157) | @Override

FILE: core/src/main/java/com/alibaba/druid/filter/logging/CommonsLogFilterMBean.java
  type CommonsLogFilterMBean (line 21) | public interface CommonsLogFilterMBean extends LogFilterMBean {

FILE: core/src/main/java/com/alibaba/druid/filter/logging/Log4j2Filter.java
  class Log4j2Filter (line 24) | public class Log4j2Filter extends LogFilter implements Log4j2FilterMBean {
    method getDataSourceLoggerName (line 30) | @Override
    method setDataSourceLoggerName (line 35) | @Override
    method setDataSourceLogger (line 41) | public void setDataSourceLogger(Logger dataSourceLogger) {
    method getConnectionLoggerName (line 46) | @Override
    method setConnectionLoggerName (line 51) | @Override
    method setConnectionLogger (line 57) | public void setConnectionLogger(Logger connectionLogger) {
    method getStatementLoggerName (line 62) | @Override
    method setStatementLoggerName (line 67) | @Override
    method setStatementLogger (line 73) | public void setStatementLogger(Logger statementLogger) {
    method getResultSetLoggerName (line 78) | @Override
    method setResultSetLoggerName (line 83) | @Override
    method setResultSetLogger (line 89) | public void setResultSetLogger(Logger resultSetLogger) {
    method isConnectionLogErrorEnabled (line 94) | @Override
    method isDataSourceLogEnabled (line 99) | @Override
    method isConnectionLogEnabled (line 104) | @Override
    method isStatementLogEnabled (line 109) | @Override
    method isResultSetLogEnabled (line 114) | @Override
    method isResultSetLogErrorEnabled (line 119) | @Override
    method isStatementLogErrorEnabled (line 124) | @Override
    method connectionLog (line 129) | @Override
    method statementLog (line 134) | @Override
    method resultSetLog (line 139) | @Override
    method resultSetLogError (line 144) | @Override
    method statementLogError (line 149) | @Override

FILE: core/src/main/java/com/alibaba/druid/filter/logging/Log4j2FilterMBean.java
  type Log4j2FilterMBean (line 18) | public interface Log4j2FilterMBean extends LogFilterMBean {

FILE: core/src/main/java/com/alibaba/druid/filter/logging/Log4jFilter.java
  class Log4jFilter (line 24) | public class Log4jFilter extends LogFilter implements Log4jFilterMBean {
    method getDataSourceLoggerName (line 30) | @Override
    method setDataSourceLoggerName (line 35) | @Override
    method setDataSourceLogger (line 41) | public void setDataSourceLogger(Logger dataSourceLogger) {
    method getConnectionLoggerName (line 46) | @Override
    method setConnectionLoggerName (line 51) | @Override
    method setConnectionLogger (line 57) | public void setConnectionLogger(Logger connectionLogger) {
    method getStatementLoggerName (line 62) | @Override
    method setStatementLoggerName (line 67) | @Override
    method setStatementLogger (line 73) | public void setStatementLogger(Logger statementLogger) {
    method getResultSetLoggerName (line 78) | @Override
    method setResultSetLoggerName (line 83) | @Override
    method setResultSetLogger (line 89) | public void setResultSetLogger(Logger resultSetLogger) {
    method isConnectionLogErrorEnabled (line 94) | @Override
    method 
Copy disabled (too large) Download .json
Condensed preview — 6550 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (16,705K chars).
[
  {
    "path": ".cursor/commands/opsx-apply.md",
    "chars": 4503,
    "preview": "---\nname: /opsx-apply\nid: opsx-apply\ncategory: Workflow\ndescription: Implement tasks from an OpenSpec change (Experiment"
  },
  {
    "path": ".cursor/commands/opsx-archive.md",
    "chars": 4799,
    "preview": "---\nname: /opsx-archive\nid: opsx-archive\ncategory: Workflow\ndescription: Archive a completed change in the experimental "
  },
  {
    "path": ".cursor/commands/opsx-bulk-archive.md",
    "chars": 7530,
    "preview": "---\nname: /opsx-bulk-archive\nid: opsx-bulk-archive\ncategory: Workflow\ndescription: Archive multiple completed changes at"
  },
  {
    "path": ".cursor/commands/opsx-continue.md",
    "chars": 4928,
    "preview": "---\nname: /opsx-continue\nid: opsx-continue\ncategory: Workflow\ndescription: Continue working on a change - create the nex"
  },
  {
    "path": ".cursor/commands/opsx-explore.md",
    "chars": 6195,
    "preview": "---\nname: /opsx-explore\nid: opsx-explore\ncategory: Workflow\ndescription: \"Enter explore mode - think through ideas, inve"
  },
  {
    "path": ".cursor/commands/opsx-ff.md",
    "chars": 3957,
    "preview": "---\nname: /opsx-ff\nid: opsx-ff\ncategory: Workflow\ndescription: Create a change and generate all artifacts needed for imp"
  },
  {
    "path": ".cursor/commands/opsx-new.md",
    "chars": 2627,
    "preview": "---\nname: /opsx-new\nid: opsx-new\ncategory: Workflow\ndescription: Start a new change using the experimental artifact work"
  },
  {
    "path": ".cursor/commands/opsx-onboard.md",
    "chars": 12501,
    "preview": "---\nname: /opsx-onboard\nid: opsx-onboard\ncategory: Workflow\ndescription: Guided onboarding - walk through a complete Ope"
  },
  {
    "path": ".cursor/commands/opsx-sync.md",
    "chars": 4326,
    "preview": "---\nname: /opsx-sync\nid: opsx-sync\ncategory: Workflow\ndescription: Sync delta specs from a change to main specs\n---\n\nSyn"
  },
  {
    "path": ".cursor/commands/opsx-verify.md",
    "chars": 6406,
    "preview": "---\nname: /opsx-verify\nid: opsx-verify\ncategory: Workflow\ndescription: Verify implementation matches change artifacts be"
  },
  {
    "path": ".cursor/skills/openspec-apply-change/SKILL.md",
    "chars": 4712,
    "preview": "zh---\nname: openspec-apply-change\ndescription: Implement tasks from an OpenSpec change. Use when the user wants to start"
  },
  {
    "path": ".cursor/skills/openspec-archive-change/SKILL.md",
    "chars": 4027,
    "preview": "---\nname: openspec-archive-change\ndescription: Archive a completed change in the experimental workflow. Use when the use"
  },
  {
    "path": ".cursor/skills/openspec-bulk-archive-change/SKILL.md",
    "chars": 7665,
    "preview": "---\nname: openspec-bulk-archive-change\ndescription: Archive multiple completed changes at once. Use when archiving sever"
  },
  {
    "path": ".cursor/skills/openspec-continue-change/SKILL.md",
    "chars": 5048,
    "preview": "---\nname: openspec-continue-change\ndescription: Continue working on an OpenSpec change by creating the next artifact. Us"
  },
  {
    "path": ".cursor/skills/openspec-explore/SKILL.md",
    "chars": 9169,
    "preview": "---\nname: openspec-explore\ndescription: Enter explore mode - a thinking partner for exploring ideas, investigating probl"
  },
  {
    "path": ".cursor/skills/openspec-ff-change/SKILL.md",
    "chars": 4434,
    "preview": "---\nname: openspec-ff-change\ndescription: Fast-forward through OpenSpec artifact creation. Use when the user wants to qu"
  },
  {
    "path": ".cursor/skills/openspec-new-change/SKILL.md",
    "chars": 2874,
    "preview": "---\nname: openspec-new-change\ndescription: Start a new OpenSpec change using the experimental artifact workflow. Use whe"
  },
  {
    "path": ".cursor/skills/openspec-onboard/SKILL.md",
    "chars": 12616,
    "preview": "---\nname: openspec-onboard\ndescription: Guided onboarding for OpenSpec - walk through a complete workflow cycle with nar"
  },
  {
    "path": ".cursor/skills/openspec-sync-specs/SKILL.md",
    "chars": 4481,
    "preview": "---\nname: openspec-sync-specs\ndescription: Sync delta specs from a change to main specs. Use when the user wants to upda"
  },
  {
    "path": ".cursor/skills/openspec-verify-change/SKILL.md",
    "chars": 6541,
    "preview": "---\nname: openspec-verify-change\ndescription: Verify implementation matches change artifacts. Use when the user wants to"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "chars": 2160,
    "preview": "name: Bug report\ndescription: Create a report to help us improve\ntitle: \"[BUG] \"\nlabels: [\"bug\", \"triage\"]\nassignees: []"
  },
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "chars": 847,
    "preview": "<!--\nplease follow the issue template below for bug reports and feature requests\nfor example, if you are reporting a bug"
  },
  {
    "path": ".github/workflows/ci.yaml",
    "chars": 1366,
    "preview": "---\nname: Java CI\n\non:\n  push:\n    # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actio"
  },
  {
    "path": ".gitignore",
    "chars": 441,
    "preview": "target\r\n.settings\r\n.project\r\n.classpath\r\n.DS_Store\r\n/1\r\n/derby.log\r\n/src/test/resources/pool_config\r\n/src/test/java/com/"
  },
  {
    "path": ".mvn/wrapper/MavenWrapperDownloader.java",
    "chars": 4940,
    "preview": "/*\n * Copyright 2007-present the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \""
  },
  {
    "path": ".mvn/wrapper/maven-wrapper.properties",
    "chars": 218,
    "preview": "distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.5/apache-maven-3.8.5-bin.zip\nwrap"
  },
  {
    "path": ".qoder/commands/opsx/apply.md",
    "chars": 4530,
    "preview": "---\nname: OPSX: Apply\ndescription: Implement tasks from an OpenSpec change (Experimental)\ncategory: Workflow\ntags: [work"
  },
  {
    "path": ".qoder/commands/opsx/archive.md",
    "chars": 4822,
    "preview": "---\nname: OPSX: Archive\ndescription: Archive a completed change in the experimental workflow\ncategory: Workflow\ntags: [w"
  },
  {
    "path": ".qoder/commands/opsx/bulk-archive.md",
    "chars": 7554,
    "preview": "---\nname: OPSX: Bulk Archive\ndescription: Archive multiple completed changes at once\ncategory: Workflow\ntags: [workflow,"
  },
  {
    "path": ".qoder/commands/opsx/continue.md",
    "chars": 4952,
    "preview": "---\nname: OPSX: Continue\ndescription: Continue working on a change - create the next artifact (Experimental)\ncategory: W"
  },
  {
    "path": ".qoder/commands/opsx/explore.md",
    "chars": 6226,
    "preview": "---\nname: OPSX: Explore\ndescription: Enter explore mode - think through ideas, investigate problems, clarify requirement"
  },
  {
    "path": ".qoder/commands/opsx/ff.md",
    "chars": 3997,
    "preview": "---\nname: OPSX: Fast Forward\ndescription: Create a change and generate all artifacts needed for implementation in one go"
  },
  {
    "path": ".qoder/commands/opsx/new.md",
    "chars": 2656,
    "preview": "---\nname: OPSX: New\ndescription: Start a new change using the experimental artifact workflow (OPSX)\ncategory: Workflow\nt"
  },
  {
    "path": ".qoder/commands/opsx/onboard.md",
    "chars": 12533,
    "preview": "---\nname: OPSX: Onboard\ndescription: Guided onboarding - walk through a complete OpenSpec workflow cycle with narration\n"
  },
  {
    "path": ".qoder/commands/opsx/sync.md",
    "chars": 4350,
    "preview": "---\nname: OPSX: Sync\ndescription: Sync delta specs from a change to main specs\ncategory: Workflow\ntags: [workflow, specs"
  },
  {
    "path": ".qoder/commands/opsx/verify.md",
    "chars": 6429,
    "preview": "---\nname: OPSX: Verify\ndescription: Verify implementation matches change artifacts before archiving\ncategory: Workflow\nt"
  },
  {
    "path": ".qoder/skills/openspec-apply-change/SKILL.md",
    "chars": 4710,
    "preview": "---\nname: openspec-apply-change\ndescription: Implement tasks from an OpenSpec change. Use when the user wants to start i"
  },
  {
    "path": ".qoder/skills/openspec-archive-change/SKILL.md",
    "chars": 4027,
    "preview": "---\nname: openspec-archive-change\ndescription: Archive a completed change in the experimental workflow. Use when the use"
  },
  {
    "path": ".qoder/skills/openspec-bulk-archive-change/SKILL.md",
    "chars": 7665,
    "preview": "---\nname: openspec-bulk-archive-change\ndescription: Archive multiple completed changes at once. Use when archiving sever"
  },
  {
    "path": ".qoder/skills/openspec-continue-change/SKILL.md",
    "chars": 5048,
    "preview": "---\nname: openspec-continue-change\ndescription: Continue working on an OpenSpec change by creating the next artifact. Us"
  },
  {
    "path": ".qoder/skills/openspec-explore/SKILL.md",
    "chars": 9169,
    "preview": "---\nname: openspec-explore\ndescription: Enter explore mode - a thinking partner for exploring ideas, investigating probl"
  },
  {
    "path": ".qoder/skills/openspec-ff-change/SKILL.md",
    "chars": 4434,
    "preview": "---\nname: openspec-ff-change\ndescription: Fast-forward through OpenSpec artifact creation. Use when the user wants to qu"
  },
  {
    "path": ".qoder/skills/openspec-new-change/SKILL.md",
    "chars": 2874,
    "preview": "---\nname: openspec-new-change\ndescription: Start a new OpenSpec change using the experimental artifact workflow. Use whe"
  },
  {
    "path": ".qoder/skills/openspec-onboard/SKILL.md",
    "chars": 12616,
    "preview": "---\nname: openspec-onboard\ndescription: Guided onboarding for OpenSpec - walk through a complete workflow cycle with nar"
  },
  {
    "path": ".qoder/skills/openspec-sync-specs/SKILL.md",
    "chars": 4481,
    "preview": "---\nname: openspec-sync-specs\ndescription: Sync delta specs from a change to main specs. Use when the user wants to upda"
  },
  {
    "path": ".qoder/skills/openspec-verify-change/SKILL.md",
    "chars": 6541,
    "preview": "---\nname: openspec-verify-change\ndescription: Verify implementation matches change artifacts. Use when the user wants to"
  },
  {
    "path": ".travis.yml",
    "chars": 181,
    "preview": "language: java\njdk:\n  - oraclejdk8\nbefore_install:\n  - pip install --user codecov\nafter_success:\n  - codecov\nbranches:\n "
  },
  {
    "path": "AGENTS.md",
    "chars": 2405,
    "preview": "# AGENTS.md — Druid Project Context\n\n## Project Overview\n\nDruid is Alibaba's open-source high-performance JDBC connectio"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 5585,
    "preview": "# Contributing to Druid | 贡献指南\n\n[English](#english) | [中文](#中文)\n\n---\n\n## English\n\nThank you for your interest in contrib"
  },
  {
    "path": "NOTICE",
    "chars": 61,
    "preview": "Alibaba Druid\nCopyright 1999-2021 Alibaba Group Holding Ltd.\n"
  },
  {
    "path": "QWEN.md",
    "chars": 2914,
    "preview": "# Qwen Code Context for Druid Project\n\nThis document provides essential context for Qwen Code to understand and assist w"
  },
  {
    "path": "README.md",
    "chars": 5801,
    "preview": "# Alibaba Druid\r\n\r\n[![Java CI](https://img.shields.io/github/actions/workflow/status/alibaba/druid/ci.yaml?branch=master"
  },
  {
    "path": "README_EN.md",
    "chars": 7007,
    "preview": "# Alibaba Druid\n\n[![Java CI](https://img.shields.io/github/actions/workflow/status/alibaba/druid/ci.yaml?branch=master&l"
  },
  {
    "path": "SECURITY.md",
    "chars": 4181,
    "preview": "# 漏洞奖励计划 \n## 报告\n如果您认为自己在本程序中发现了任何安全(技术)漏洞,欢迎您通过 https://security.alibaba.com 向我们提交漏洞报告。\n如果您报告任何安全漏洞,请注意您可能包含以下信息(合格报告):\n"
  },
  {
    "path": "codecov.yml",
    "chars": 98,
    "preview": "comment:\r\n  behavior: default\r\n  layout: reach,diff,flags,files,footer\r\n  require_changes: false\r\n"
  },
  {
    "path": "core/.gitignore",
    "chars": 79,
    "preview": "/target\n/src/test/java/com/alibaba/druid/bvt/inc/\n/src/test/resources/bvt/inc/\n"
  },
  {
    "path": "core/pom.xml",
    "chars": 14126,
    "preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\t\t xsi:schemaLo"
  },
  {
    "path": "core/src/main/java/META-INF/MANIFEST.MF",
    "chars": 36,
    "preview": "Manifest-Version: 1.0\nClass-Path: \n\n"
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/Constants.java",
    "chars": 863,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/DbType.java",
    "chars": 3093,
    "preview": "package com.alibaba.druid;\n\nimport com.alibaba.druid.util.FnvHash;\n\npublic enum DbType {\n    other(1 << 0),\n    jtds(1 <"
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/DruidRuntimeException.java",
    "chars": 1092,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/FastsqlColumnAmbiguousException.java",
    "chars": 239,
    "preview": "package com.alibaba.druid;\n\npublic class FastsqlColumnAmbiguousException extends FastsqlException {\n    public FastsqlCo"
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/FastsqlException.java",
    "chars": 1067,
    "preview": "/*\n * Copyright 1999-2017 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/TransactionTimeoutException.java",
    "chars": 795,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/VERSION.java",
    "chars": 968,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/AutoLoad.java",
    "chars": 995,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/Filter.java",
    "chars": 74041,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/FilterAdapter.java",
    "chars": 123854,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/FilterChain.java",
    "chars": 59642,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/FilterChainImpl.java",
    "chars": 194013,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/FilterEventAdapter.java",
    "chars": 19821,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/FilterManager.java",
    "chars": 5840,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/config/ConfigFilter.java",
    "chars": 9828,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/config/ConfigTools.java",
    "chars": 8555,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/encoding/CharsetConvert.java",
    "chars": 2884,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/encoding/CharsetParameter.java",
    "chars": 1537,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/encoding/EncodingConvertFilter.java",
    "chars": 29880,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/logging/CommonsLogFilter.java",
    "chars": 5244,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/logging/CommonsLogFilterMBean.java",
    "chars": 774,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/logging/Log4j2Filter.java",
    "chars": 4892,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/logging/Log4j2FilterMBean.java",
    "chars": 721,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/logging/Log4jFilter.java",
    "chars": 4864,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/logging/Log4jFilterMBean.java",
    "chars": 769,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/logging/LogFilter.java",
    "chars": 37094,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/logging/LogFilterMBean.java",
    "chars": 4433,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/logging/Slf4jLogFilter.java",
    "chars": 4972,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/mysql8datetime/MySQL8DateTimeResultSetMetaData.java",
    "chars": 4592,
    "preview": "package com.alibaba.druid.filter.mysql8datetime;\n\nimport java.sql.ResultSetMetaData;\nimport java.sql.SQLException;\nimpor"
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/mysql8datetime/MySQL8DateTimeSqlTypeFilter.java",
    "chars": 3878,
    "preview": "package com.alibaba.druid.filter.mysql8datetime;\n\nimport com.alibaba.druid.filter.FilterAdapter;\nimport com.alibaba.drui"
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/stat/MergeStatFilter.java",
    "chars": 1144,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java",
    "chars": 40927,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/stat/StatFilterContext.java",
    "chars": 4562,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/stat/StatFilterContextListener.java",
    "chars": 1225,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/stat/StatFilterContextListenerAdapter.java",
    "chars": 1658,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/filter/stat/StatFilterMBean.java",
    "chars": 1010,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/mock/MockArray.java",
    "chars": 2154,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/mock/MockBlob.java",
    "chars": 2311,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/mock/MockCallableStatement.java",
    "chars": 18839,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/mock/MockClob.java",
    "chars": 2531,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/mock/MockConnection.java",
    "chars": 12782,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/mock/MockConnectionClosedException.java",
    "chars": 870,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/mock/MockDriver.java",
    "chars": 9564,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/mock/MockDriverMBean.java",
    "chars": 1165,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/mock/MockNClob.java",
    "chars": 734,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/mock/MockParameterMetaData.java",
    "chars": 4090,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/mock/MockPreparedStatement.java",
    "chars": 2369,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/mock/MockRef.java",
    "chars": 1365,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/mock/MockResultSet.java",
    "chars": 2605,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/mock/MockResultSetMetaData.java",
    "chars": 886,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/mock/MockRowId.java",
    "chars": 998,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/mock/MockSQLXML.java",
    "chars": 1840,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/mock/MockSavepoint.java",
    "chars": 1143,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/mock/MockStatement.java",
    "chars": 2709,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/mock/MockStatementBase.java",
    "chars": 820,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/mock/MockStruct.java",
    "chars": 1096,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/mock/handler/MockExecuteHandler.java",
    "chars": 894,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/mock/handler/MySqlMockExecuteHandlerImpl.java",
    "chars": 6393,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/DataSourceClosedException.java",
    "chars": 882,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/DataSourceDisableException.java",
    "chars": 1036,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/DataSourceNotAvailableException.java",
    "chars": 895,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java",
    "chars": 83928,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSourceMBean.java",
    "chars": 3696,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/DruidConnectionHolder.java",
    "chars": 15659,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/DruidDataSource.java",
    "chars": 139973,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/DruidDataSourceC3P0Adapter.java",
    "chars": 14010,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/DruidDataSourceC3P0AdapterMBean.java",
    "chars": 1484,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/DruidDataSourceFactory.java",
    "chars": 16420,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/DruidDataSourceMBean.java",
    "chars": 2071,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/DruidDataSourceStatLogger.java",
    "chars": 1127,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/DruidDataSourceStatLoggerAdapter.java",
    "chars": 1174,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/DruidDataSourceStatLoggerImpl.java",
    "chars": 8790,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/DruidDataSourceStatValue.java",
    "chars": 14928,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/DruidPooledCallableStatement.java",
    "chars": 30345,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/DruidPooledConnection.java",
    "chars": 37889,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/DruidPooledPreparedStatement.java",
    "chars": 29603,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/DruidPooledResultSet.java",
    "chars": 46739,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/DruidPooledStatement.java",
    "chars": 23277,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/DruidStatementConnection.java",
    "chars": 9569,
    "preview": "/*\r\n * Copyright 1999-2023 Alibaba Group Holding Ltd.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"Licen"
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ExceptionSorter.java",
    "chars": 1083,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/GetConnectionTimeoutException.java",
    "chars": 1004,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/JDBC4ValidConnectionChecker.java",
    "chars": 1377,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ManagedDataSource.java",
    "chars": 914,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/PoolableWrapper.java",
    "chars": 2718,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/PreparedStatementHolder.java",
    "chars": 2761,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/PreparedStatementPool.java",
    "chars": 6921,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ValidConnectionChecker.java",
    "chars": 1016,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ValidConnectionCheckerAdapter.java",
    "chars": 2816,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/WrapperAdapter.java",
    "chars": 1153,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ha/DataSourceCreator.java",
    "chars": 3608,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ha/HighAvailableDataSource.java",
    "chars": 17445,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ha/PropertiesUtils.java",
    "chars": 3622,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ha/node/FileNodeListener.java",
    "chars": 5045,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ha/node/NodeEvent.java",
    "chars": 3861,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ha/node/NodeEventTypeEnum.java",
    "chars": 790,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ha/node/NodeListener.java",
    "chars": 3049,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ha/node/PoolUpdater.java",
    "chars": 9588,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ha/node/ZookeeperNodeInfo.java",
    "chars": 2165,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ha/node/ZookeeperNodeListener.java",
    "chars": 11710,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ha/node/ZookeeperNodeRegister.java",
    "chars": 5792,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ha/selector/DataSourceSelector.java",
    "chars": 1397,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ha/selector/DataSourceSelectorEnum.java",
    "chars": 2350,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ha/selector/DataSourceSelectorFactory.java",
    "chars": 1352,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ha/selector/NamedDataSourceSelector.java",
    "chars": 2771,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ha/selector/RandomDataSourceRecoverThread.java",
    "chars": 4158,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ha/selector/RandomDataSourceSelector.java",
    "chars": 10841,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ha/selector/RandomDataSourceValidateFilter.java",
    "chars": 1952,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ha/selector/RandomDataSourceValidateThread.java",
    "chars": 11920,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ha/selector/StickyDataSourceHolder.java",
    "chars": 1528,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/ha/selector/StickyRandomDataSourceSelector.java",
    "chars": 3379,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/vendor/AbstractOracleExceptionSorter.java",
    "chars": 1300,
    "preview": "package com.alibaba.druid.pool.vendor;\n\nimport com.alibaba.druid.pool.ExceptionSorter;\nimport com.alibaba.druid.support."
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/vendor/DB2ExceptionSorter.java",
    "chars": 2217,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/vendor/InformixExceptionSorter.java",
    "chars": 2292,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/vendor/MSSQLValidConnectionChecker.java",
    "chars": 1720,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/vendor/MockExceptionSorter.java",
    "chars": 1267,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/vendor/MySqlExceptionSorter.java",
    "chars": 4142,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/vendor/MySqlValidConnectionChecker.java",
    "chars": 3280,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/vendor/NullExceptionSorter.java",
    "chars": 1169,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/vendor/OceanBaseOracleExceptionSorter.java",
    "chars": 5907,
    "preview": "package com.alibaba.druid.pool.vendor;\n\nimport java.io.Serializable;\nimport java.sql.SQLException;\nimport java.sql.SQLRe"
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/vendor/OceanBaseValidConnectionChecker.java",
    "chars": 2489,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/vendor/OracleExceptionSorter.java",
    "chars": 6007,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/vendor/OracleValidConnectionChecker.java",
    "chars": 2341,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/vendor/PGExceptionSorter.java",
    "chars": 1365,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/vendor/PGValidConnectionChecker.java",
    "chars": 1825,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/vendor/PhoenixExceptionSorter.java",
    "chars": 1521,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/vendor/SybaseExceptionSorter.java",
    "chars": 1713,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/xa/DruidPooledXAConnection.java",
    "chars": 2280,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/xa/DruidXADataSource.java",
    "chars": 3613,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/xa/JtdsXAConnection.java",
    "chars": 2313,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/pool/xa/JtdsXAResource.java",
    "chars": 3700,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/proxy/DruidDriver.java",
    "chars": 10633,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/proxy/DruidDriverMBean.java",
    "chars": 971,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/proxy/jdbc/CallableStatementProxy.java",
    "chars": 872,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/proxy/jdbc/CallableStatementProxyImpl.java",
    "chars": 32597,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/proxy/jdbc/ClobProxy.java",
    "chars": 839,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/proxy/jdbc/ClobProxyImpl.java",
    "chars": 3711,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/proxy/jdbc/ConnectionProxy.java",
    "chars": 1101,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/proxy/jdbc/ConnectionProxyImpl.java",
    "chars": 18002,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxy.java",
    "chars": 1342,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyConfig.java",
    "chars": 2597,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyImpl.java",
    "chars": 14943,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "core/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyImplMBean.java",
    "chars": 1045,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  }
]

// ... and 6350 more files (download for full content)

About this extraction

This page contains the full source code of the alibaba/druid GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 6550 files (24.6 MB), approximately 4.4M tokens, and a symbol index with 35432 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.

Copied to clipboard!