├── .gitignore ├── README.md ├── pom.xml ├── tddl-atom ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── taobao │ │ │ └── tddl │ │ │ └── atom │ │ │ ├── AbstractTAtomDataSource.java │ │ │ ├── StaticTAtomDataSource.java │ │ │ ├── TAtomDataSource.java │ │ │ ├── TAtomDbStatusEnum.java │ │ │ ├── TAtomDbTypeEnum.java │ │ │ ├── TAtomDsStandard.java │ │ │ ├── common │ │ │ ├── TAtomConURLTools.java │ │ │ └── TAtomConstants.java │ │ │ ├── config │ │ │ ├── AtomConfigHolder.java │ │ │ ├── AtomConfigManager.java │ │ │ ├── AtomPasswdManager.java │ │ │ ├── DbConfManager.java │ │ │ ├── DbPasswdManager.java │ │ │ ├── TAtomConfParser.java │ │ │ ├── TAtomDsConfDO.java │ │ │ ├── TAtomDsConfHandle.java │ │ │ └── listener │ │ │ │ ├── AppDbConfListener.java │ │ │ │ ├── AtomDbStatusListener.java │ │ │ │ ├── GlobalDbConfListener.java │ │ │ │ └── PasswdDbConfListener.java │ │ │ ├── exception │ │ │ └── AtomNotAvailableException.java │ │ │ ├── jdbc │ │ │ ├── CallableStatementWrapper.java │ │ │ ├── DataChannel.java │ │ │ ├── DatabaseMetaDataWrapper.java │ │ │ ├── TConnectionWrapper.java │ │ │ ├── TDataSourceWrapper.java │ │ │ ├── TPreparedStatement.java │ │ │ ├── TPreparedStatementWrapper.java │ │ │ ├── TResultSetWrapper.java │ │ │ ├── TStatement.java │ │ │ └── TStatementWrapper.java │ │ │ ├── securety │ │ │ ├── TPasswordCoder.java │ │ │ └── impl │ │ │ │ ├── DefaultPasswordCoder.java │ │ │ │ └── PasswordCoder.java │ │ │ └── utils │ │ │ ├── AtomDataSourceHelper.java │ │ │ ├── ConnRestrictEntry.java │ │ │ ├── ConnRestrictSlot.java │ │ │ ├── ConnRestrictor.java │ │ │ ├── CountPunisher.java │ │ │ ├── EncodingUtils.java │ │ │ ├── LoadFileUtils.java │ │ │ ├── SmoothValve.java │ │ │ └── TimesliceFlowControl.java │ └── resources │ │ └── META-INF │ │ └── services │ │ ├── com.taobao.tddl.atom.TAtomDsStandard │ │ └── com.taobao.tddl.atom.securety.TPasswordCoder │ └── test │ ├── java │ └── com │ │ └── taobao │ │ └── tddl │ │ └── atom │ │ ├── BaseAtomTest.java │ │ ├── common │ │ ├── ConnRestrictorUnitTest.java │ │ ├── PropLoadTestUtil.java │ │ ├── StaticPasswordCoder.java │ │ ├── TAtomConURLToolsUnitTest.java │ │ ├── TAtomConfParserUnitTest.java │ │ └── TAtomDataSourceTest.java │ │ └── utils │ │ ├── StaticTAtomDataSourceTest.java │ │ └── TimesliceFlowControlTest.java │ └── resources │ ├── META-INF │ └── services │ │ └── com.taobao.tddl.atom.securety.TPasswordCoder │ └── conf │ ├── mysql │ ├── app.properties │ ├── globa.properties │ └── passwd.properties │ └── oracle │ ├── app.properties │ ├── globa.properties │ └── passwd.properties ├── tddl-common ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── taobao │ │ │ └── tddl │ │ │ ├── client │ │ │ └── RouteCondition.java │ │ │ ├── common │ │ │ ├── GroupDataSourceRouteHelper.java │ │ │ ├── TddlConstants.java │ │ │ ├── client │ │ │ │ └── util │ │ │ │ │ └── ThreadLocalMap.java │ │ │ ├── exception │ │ │ │ ├── NotSupportException.java │ │ │ │ ├── TddlException.java │ │ │ │ ├── TddlNestableRuntimeException.java │ │ │ │ ├── TddlRuntimeException.java │ │ │ │ └── code │ │ │ │ │ ├── ErrorCode.java │ │ │ │ │ └── ResourceBundleUtil.java │ │ │ ├── jdbc │ │ │ │ ├── IConnection.java │ │ │ │ ├── IDataSource.java │ │ │ │ ├── IStatement.java │ │ │ │ ├── ITransactionPolicy.java │ │ │ │ ├── ParameterContext.java │ │ │ │ ├── ParameterMethod.java │ │ │ │ ├── Parameters.java │ │ │ │ ├── SQLPreParser.java │ │ │ │ ├── SqlTypeParser.java │ │ │ │ ├── TExceptionUtils.java │ │ │ │ └── sorter │ │ │ │ │ ├── ExceptionSorter.java │ │ │ │ │ ├── MySQLExceptionSorter.java │ │ │ │ │ └── OracleExceptionSorter.java │ │ │ ├── mock │ │ │ │ ├── ExecuteHandler.java │ │ │ │ ├── MockConnection.java │ │ │ │ ├── MockDataBaseMetaData.java │ │ │ │ ├── MockDataSource.java │ │ │ │ ├── MockPreparedStatement.java │ │ │ │ ├── MockResultSet.java │ │ │ │ ├── MockResultSetMetaData.java │ │ │ │ └── MockStatement.java │ │ │ ├── model │ │ │ │ ├── App.java │ │ │ │ ├── Atom.java │ │ │ │ ├── BaseRowSet.java │ │ │ │ ├── DBType.java │ │ │ │ ├── DataSourceType.java │ │ │ │ ├── Group.java │ │ │ │ ├── Matrix.java │ │ │ │ ├── SqlMetaData.java │ │ │ │ ├── SqlType.java │ │ │ │ ├── ThreadLocalString.java │ │ │ │ ├── hint │ │ │ │ │ ├── DirectlyRouteCondition.java │ │ │ │ │ ├── ExtraCmdRouteCondition.java │ │ │ │ │ └── RuleRouteCondition.java │ │ │ │ ├── lifecycle │ │ │ │ │ ├── AbstractLifecycle.java │ │ │ │ │ └── Lifecycle.java │ │ │ │ └── sqljep │ │ │ │ │ ├── Comparative.java │ │ │ │ │ ├── ComparativeAND.java │ │ │ │ │ ├── ComparativeBaseList.java │ │ │ │ │ ├── ComparativeMapChoicer.java │ │ │ │ │ └── ComparativeOR.java │ │ │ ├── plugin │ │ │ │ └── PreSqlPlugin.java │ │ │ ├── properties │ │ │ │ ├── BooleanConfigParam.java │ │ │ │ ├── ConfigParam.java │ │ │ │ ├── ConnectionParams.java │ │ │ │ ├── ConnectionProperties.java │ │ │ │ ├── DurationConfigParam.java │ │ │ │ ├── IntConfigParam.java │ │ │ │ ├── LongConfigParam.java │ │ │ │ ├── ParamManager.java │ │ │ │ ├── PropUtil.java │ │ │ │ ├── ShortConfigParam.java │ │ │ │ └── StringConfigParam.java │ │ │ └── utils │ │ │ │ ├── AddressUtils.java │ │ │ │ ├── Assert.java │ │ │ │ ├── BooleanMutex.java │ │ │ │ ├── DateUtils.java │ │ │ │ ├── GeneralUtil.java │ │ │ │ ├── RuntimeConfigHolder.java │ │ │ │ ├── TStringUtil.java │ │ │ │ ├── TddlToStringStyle.java │ │ │ │ ├── XmlHelper.java │ │ │ │ ├── convertor │ │ │ │ ├── AbastactConvertor.java │ │ │ │ ├── BlobAndBytesConvertor.java │ │ │ │ ├── CollectionAndCollectionConvertor.java │ │ │ │ ├── CommonAndCommonConvertor.java │ │ │ │ ├── Convertor.java │ │ │ │ ├── ConvertorException.java │ │ │ │ ├── ConvertorHelper.java │ │ │ │ ├── ConvertorRepository.java │ │ │ │ ├── LongAndDateConvertor.java │ │ │ │ ├── SqlDateAndDateConvertor.java │ │ │ │ ├── StringAndCommonConvertor.java │ │ │ │ ├── StringAndDateConvertor.java │ │ │ │ ├── StringAndEnumConvertor.java │ │ │ │ └── StringAndObjectConvertor.java │ │ │ │ ├── extension │ │ │ │ ├── Activate.java │ │ │ │ ├── ExtensionLoader.java │ │ │ │ └── ExtensionNotFoundException.java │ │ │ │ ├── logger │ │ │ │ ├── Level.java │ │ │ │ ├── Logger.java │ │ │ │ ├── LoggerAdapter.java │ │ │ │ ├── LoggerFactory.java │ │ │ │ ├── MDC.java │ │ │ │ ├── MDCAdapter.java │ │ │ │ ├── jcl │ │ │ │ │ ├── JclLogger.java │ │ │ │ │ ├── JclLoggerAdapter.java │ │ │ │ │ └── JclMDC.java │ │ │ │ ├── jdk │ │ │ │ │ ├── JdkLogger.java │ │ │ │ │ ├── JdkLoggerAdapter.java │ │ │ │ │ └── JdkMDC.java │ │ │ │ ├── log4j │ │ │ │ │ ├── Log4jLogger.java │ │ │ │ │ ├── Log4jLoggerAdapter.java │ │ │ │ │ └── Log4jMDC.java │ │ │ │ ├── slf4j │ │ │ │ │ ├── Slf4jLogger.java │ │ │ │ │ ├── Slf4jLoggerAdapter.java │ │ │ │ │ └── Slf4jMDC.java │ │ │ │ └── support │ │ │ │ │ └── FailsafeLogger.java │ │ │ │ ├── mbean │ │ │ │ ├── TddlMBean.java │ │ │ │ └── TddlMBeanServer.java │ │ │ │ ├── thread │ │ │ │ ├── CallerRunExecutorService.java │ │ │ │ ├── ExecutorTemplate.java │ │ │ │ └── NamedThreadFactory.java │ │ │ │ └── version │ │ │ │ ├── Version.java │ │ │ │ └── VersionAnnotation.java │ │ │ └── util │ │ │ ├── DBTypeHelper.java │ │ │ └── RouteHelper.java │ └── resources │ │ ├── DUAL_TABLE.xml │ │ ├── META-INF │ │ ├── matrix.xsd │ │ ├── stat.xsd │ │ └── table.xsd │ │ └── res │ │ └── ErrorCode.properties │ └── test │ ├── java │ └── com │ │ └── taobao │ │ └── tddl │ │ └── common │ │ ├── extension │ │ ├── AbstractPluginService.java │ │ ├── ExamplePlugin.java │ │ ├── ExtensionLoaderTest.java │ │ ├── OrderedPlugin.java │ │ └── PluginService.java │ │ ├── sorter │ │ ├── MySQLExceptionSorterUnitTest.java │ │ └── OracleExceptionSorterUnitTest.java │ │ └── utils │ │ ├── DateUtilsTest.java │ │ ├── ErrorCodeTest.java │ │ ├── TStringUtilTest.java │ │ ├── VersionTest.java │ │ └── convertor │ │ ├── CollectionAndCollectionTest.java │ │ ├── CommonAndCommonTest.java │ │ ├── DateAndSqlDateTest.java │ │ ├── StringAndEnumTest.java │ │ └── StringConvertorTest.java │ └── resources │ └── META-INF │ └── services │ └── com.taobao.tddl.common.extension.AbstractPluginService ├── tddl-config-diamond ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── taobao │ │ └── tddl │ │ └── config │ │ └── diamond │ │ ├── DiamondConfigDataHandler.java │ │ └── DiamondConfigHolder.java │ └── resources │ └── META-INF │ └── tddl │ ├── com.taobao.tddl.config.impl.UnitConfigDataHandler │ └── com.taobao.tddl.config.impl.holder.AbstractConfigDataHolder ├── tddl-config ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── taobao │ │ └── tddl │ │ └── config │ │ ├── ConfigDataHandler.java │ │ ├── ConfigDataHandlerFactory.java │ │ ├── ConfigDataListener.java │ │ ├── ConfigDataMode.java │ │ └── impl │ │ ├── ConfigDataHandlerCity.java │ │ ├── FileConfigDataHandler.java │ │ ├── FileConfigDataHandlerFactory.java │ │ ├── LocalFirstConfigDataHandlerFactory.java │ │ ├── PreheatDataHandler.java │ │ ├── StaticConfigDataHandler.java │ │ ├── UnitConfigDataHandler.java │ │ ├── UnitConfigDataHandlerFactory.java │ │ ├── holder │ │ ├── AbstractConfigDataHolder.java │ │ ├── ConfigDataHolder.java │ │ └── ConfigHolderFactory.java │ │ └── mock │ │ ├── MockConfigHolder.java │ │ └── MockUnitConfigDataHandler.java │ └── resources │ └── META-INF │ └── services │ ├── com.taobao.tddl.config.impl.UnitConfigDataHandler │ └── com.taobao.tddl.config.impl.holder.AbstractConfigDataHolder ├── tddl-executor ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── taobao │ │ └── tddl │ │ ├── executor │ │ ├── AbstractGroupExecutor.java │ │ ├── CommunicateExecutor.java │ │ ├── IExecutor.java │ │ ├── MatrixExecutor.java │ │ ├── TopologyExecutor.java │ │ ├── codec │ │ │ ├── CodecFactory.java │ │ │ ├── FixedLengthCodec.java │ │ │ └── RecordCodec.java │ │ ├── common │ │ │ ├── AbstractSequenceManager.java │ │ │ ├── AtomicNumberCreator.java │ │ │ ├── DuplicateKVPair.java │ │ │ ├── Durability.java │ │ │ ├── ExecutionContext.java │ │ │ ├── ExecutorContext.java │ │ │ ├── IConnectionHolder.java │ │ │ ├── IRecord.java │ │ │ ├── IRowsValueScaner.java │ │ │ ├── KVPair.java │ │ │ ├── OptimizerSequenceManager.java │ │ │ ├── RowsValueScanerImp.java │ │ │ ├── SequenceLoadFromDBManager.java │ │ │ ├── SequenceManager.java │ │ │ ├── TopologyHandler.java │ │ │ └── TransactionConfig.java │ │ ├── cursor │ │ │ ├── AbstractCursor.java │ │ │ ├── Cursor.java │ │ │ ├── IAffectRowCursor.java │ │ │ ├── IAggregateCursor.java │ │ │ ├── IBlockNestedLoopCursor.java │ │ │ ├── IColumnAliasCursor.java │ │ │ ├── ICursorMeta.java │ │ │ ├── IInCursor.java │ │ │ ├── IIndexNestLoopCursor.java │ │ │ ├── ILimitFromToCursor.java │ │ │ ├── IMergeCursor.java │ │ │ ├── IMergeSortJoinCursor.java │ │ │ ├── IRangeCursor.java │ │ │ ├── IResultSetCursor.java │ │ │ ├── IReverseOrderCursor.java │ │ │ ├── ISchematicCursor.java │ │ │ ├── ISetOrderCursor.java │ │ │ ├── ITempTableSortCursor.java │ │ │ ├── IValueFilterCursor.java │ │ │ ├── MockArrayCursor.java │ │ │ ├── RangeMaker.java │ │ │ ├── ResultCursor.java │ │ │ ├── SchematicCursor.java │ │ │ └── impl │ │ │ │ ├── AffectRowCursor.java │ │ │ │ ├── AggregateCursor.java │ │ │ │ ├── ArrayResultCursor.java │ │ │ │ ├── BlockNestedtLoopCursor.java │ │ │ │ ├── ColMetaAndIndex.java │ │ │ │ ├── ColumnAliasCursor.java │ │ │ │ ├── ConcurrentMergeCursor.java │ │ │ │ ├── CursorMetaImp.java │ │ │ │ ├── DistinctCursor.java │ │ │ │ ├── InCursor.java │ │ │ │ ├── IndexNestLoopCursor.java │ │ │ │ ├── IndexNestedLoopMgetImpCursor.java │ │ │ │ ├── JoinSchematicCursor.java │ │ │ │ ├── LimitFromToCursor.java │ │ │ │ ├── MergeCursor.java │ │ │ │ ├── MergeSortedCursors.java │ │ │ │ ├── RangeCursor.java │ │ │ │ ├── ReverseOrderCursor.java │ │ │ │ ├── SetOrderByCursor.java │ │ │ │ ├── SortCursor.java │ │ │ │ ├── SortMergeJoinCursor.java │ │ │ │ ├── TempTableCursor.java │ │ │ │ ├── TempTableSortCursor.java │ │ │ │ ├── ValueFilterCursor.java │ │ │ │ ├── ValueMappingCursor.java │ │ │ │ ├── ValueMappingIRowSetConvertor.java │ │ │ │ └── ValueMappingRowSet.java │ │ ├── exception │ │ │ ├── ExecutorException.java │ │ │ └── FunctionException.java │ │ ├── function │ │ │ ├── AggregateFunction.java │ │ │ ├── Dummy.java │ │ │ ├── ExtraFunction.java │ │ │ ├── ScalarFunction.java │ │ │ ├── aggregate │ │ │ │ ├── Avg.java │ │ │ │ ├── Count.java │ │ │ │ ├── Max.java │ │ │ │ ├── Min.java │ │ │ │ └── Sum.java │ │ │ ├── scalar │ │ │ │ ├── Constant.java │ │ │ │ ├── LastInsertId.java │ │ │ │ ├── bit │ │ │ │ │ ├── BitAnd.java │ │ │ │ │ ├── BitCount.java │ │ │ │ │ ├── BitLShift.java │ │ │ │ │ ├── BitNot.java │ │ │ │ │ ├── BitOr.java │ │ │ │ │ ├── BitRShift.java │ │ │ │ │ └── BitXor.java │ │ │ │ ├── cast │ │ │ │ │ ├── Binary.java │ │ │ │ │ ├── Cast.java │ │ │ │ │ └── Convert.java │ │ │ │ ├── control │ │ │ │ │ ├── Case.java │ │ │ │ │ ├── If.java │ │ │ │ │ ├── IfNull.java │ │ │ │ │ └── NullIf.java │ │ │ │ ├── datatime │ │ │ │ │ ├── AddTime.java │ │ │ │ │ ├── Curdate.java │ │ │ │ │ ├── Curtime.java │ │ │ │ │ ├── Date.java │ │ │ │ │ ├── DateAdd.java │ │ │ │ │ ├── DateDiff.java │ │ │ │ │ ├── DateFormat.java │ │ │ │ │ ├── DateSub.java │ │ │ │ │ ├── Dayname.java │ │ │ │ │ ├── Dayofmonth.java │ │ │ │ │ ├── Dayofweek.java │ │ │ │ │ ├── Dayofyear.java │ │ │ │ │ ├── Extract.java │ │ │ │ │ ├── FromDays.java │ │ │ │ │ ├── FromUnixtime.java │ │ │ │ │ ├── GetFormat.java │ │ │ │ │ ├── Hour.java │ │ │ │ │ ├── Interval.java │ │ │ │ │ ├── LastDay.java │ │ │ │ │ ├── Makedate.java │ │ │ │ │ ├── Maketime.java │ │ │ │ │ ├── Minute.java │ │ │ │ │ ├── Month.java │ │ │ │ │ ├── Monthname.java │ │ │ │ │ ├── Now.java │ │ │ │ │ ├── PeroidAdd.java │ │ │ │ │ ├── PeroidDiff.java │ │ │ │ │ ├── Quarter.java │ │ │ │ │ ├── SecToTime.java │ │ │ │ │ ├── Second.java │ │ │ │ │ ├── StrToDate.java │ │ │ │ │ ├── SubTime.java │ │ │ │ │ ├── Time.java │ │ │ │ │ ├── TimeFormat.java │ │ │ │ │ ├── TimeToSec.java │ │ │ │ │ ├── Timestamp.java │ │ │ │ │ ├── Timestampadd.java │ │ │ │ │ ├── UnixTimestamp.java │ │ │ │ │ ├── UtcDate.java │ │ │ │ │ ├── UtcTime.java │ │ │ │ │ ├── UtcTimestamp.java │ │ │ │ │ ├── Weekday.java │ │ │ │ │ ├── Weekofyear.java │ │ │ │ │ └── Year.java │ │ │ │ ├── filter │ │ │ │ │ ├── And.java │ │ │ │ │ ├── Equal.java │ │ │ │ │ ├── Filter.java │ │ │ │ │ ├── Greater.java │ │ │ │ │ ├── GreaterEqual.java │ │ │ │ │ ├── In.java │ │ │ │ │ ├── IsFalse.java │ │ │ │ │ ├── IsNotFalse.java │ │ │ │ │ ├── IsNotNull.java │ │ │ │ │ ├── IsNotTrue.java │ │ │ │ │ ├── IsNull.java │ │ │ │ │ ├── IsTrue.java │ │ │ │ │ ├── Less.java │ │ │ │ │ ├── LessEqual.java │ │ │ │ │ ├── Like.java │ │ │ │ │ ├── NotEqual.java │ │ │ │ │ ├── Or.java │ │ │ │ │ ├── Row.java │ │ │ │ │ ├── all │ │ │ │ │ │ ├── EqualAll.java │ │ │ │ │ │ ├── GreaterAll.java │ │ │ │ │ │ ├── GreaterEqualAll.java │ │ │ │ │ │ ├── LessAll.java │ │ │ │ │ │ ├── LessEqualAll.java │ │ │ │ │ │ └── NotEqualAll.java │ │ │ │ │ └── any │ │ │ │ │ │ ├── EqualAny.java │ │ │ │ │ │ ├── GreaterAny.java │ │ │ │ │ │ ├── GreaterEqualAny.java │ │ │ │ │ │ ├── LessAny.java │ │ │ │ │ │ ├── LessEqualAny.java │ │ │ │ │ │ └── NotEqualAny.java │ │ │ │ ├── math │ │ │ │ │ ├── Abs.java │ │ │ │ │ ├── Acos.java │ │ │ │ │ ├── Asin.java │ │ │ │ │ ├── Atan.java │ │ │ │ │ ├── Ceil.java │ │ │ │ │ ├── Conv.java │ │ │ │ │ ├── Cos.java │ │ │ │ │ ├── Cot.java │ │ │ │ │ ├── Crc32.java │ │ │ │ │ ├── Degrees.java │ │ │ │ │ ├── Exp.java │ │ │ │ │ ├── Floor.java │ │ │ │ │ ├── Ln.java │ │ │ │ │ ├── Log.java │ │ │ │ │ ├── Log10.java │ │ │ │ │ ├── Log2.java │ │ │ │ │ ├── Mod.java │ │ │ │ │ ├── Pi.java │ │ │ │ │ ├── Pow.java │ │ │ │ │ ├── Radians.java │ │ │ │ │ ├── Rand.java │ │ │ │ │ ├── Round.java │ │ │ │ │ ├── Sign.java │ │ │ │ │ ├── Sin.java │ │ │ │ │ ├── Sqrt.java │ │ │ │ │ ├── Tan.java │ │ │ │ │ └── Truncate.java │ │ │ │ ├── operator │ │ │ │ │ ├── Add.java │ │ │ │ │ ├── Coalesce.java │ │ │ │ │ ├── Div.java │ │ │ │ │ ├── Division.java │ │ │ │ │ ├── Greatest.java │ │ │ │ │ ├── Interval.java │ │ │ │ │ ├── Least.java │ │ │ │ │ ├── Minus.java │ │ │ │ │ ├── Multiply.java │ │ │ │ │ ├── Not.java │ │ │ │ │ └── Sub.java │ │ │ │ └── string │ │ │ │ │ ├── Ascii.java │ │ │ │ │ ├── Bin.java │ │ │ │ │ ├── BitLength.java │ │ │ │ │ ├── Char.java │ │ │ │ │ ├── CharLength.java │ │ │ │ │ ├── Concat.java │ │ │ │ │ ├── ConcatWS.java │ │ │ │ │ ├── Elt.java │ │ │ │ │ ├── ExportSet.java │ │ │ │ │ ├── Field.java │ │ │ │ │ ├── FindInSet.java │ │ │ │ │ ├── Format.java │ │ │ │ │ ├── Hex.java │ │ │ │ │ ├── Insert.java │ │ │ │ │ ├── Instr.java │ │ │ │ │ ├── Lcase.java │ │ │ │ │ ├── Left.java │ │ │ │ │ ├── Length.java │ │ │ │ │ ├── Locate.java │ │ │ │ │ ├── Lower.java │ │ │ │ │ ├── Lpad.java │ │ │ │ │ ├── Ltrim.java │ │ │ │ │ ├── MakeSet.java │ │ │ │ │ ├── Match.java │ │ │ │ │ ├── Mid.java │ │ │ │ │ ├── Oct.java │ │ │ │ │ ├── Ord.java │ │ │ │ │ ├── Position.java │ │ │ │ │ ├── Quote.java │ │ │ │ │ ├── Regexp.java │ │ │ │ │ ├── Repeat.java │ │ │ │ │ ├── Replace.java │ │ │ │ │ ├── Reverse.java │ │ │ │ │ ├── Right.java │ │ │ │ │ ├── Rlike.java │ │ │ │ │ ├── Rpad.java │ │ │ │ │ ├── Rtrim.java │ │ │ │ │ ├── Soundex.java │ │ │ │ │ ├── SoundsLike.java │ │ │ │ │ ├── Space.java │ │ │ │ │ ├── StrCmp.java │ │ │ │ │ ├── SubStr.java │ │ │ │ │ ├── SubString.java │ │ │ │ │ ├── SubStringIndex.java │ │ │ │ │ ├── Trim.java │ │ │ │ │ ├── Ucase.java │ │ │ │ │ ├── Unhex.java │ │ │ │ │ └── Upper.java │ │ │ └── subquery │ │ │ │ ├── AbstractSubQueryFunction.java │ │ │ │ ├── Exists.java │ │ │ │ ├── SubqueryList.java │ │ │ │ └── SubqueryScalar.java │ │ ├── handler │ │ │ ├── BaseShowHandler.java │ │ │ ├── DeleteHandler.java │ │ │ ├── ExplainHandler.java │ │ │ ├── GetSequenceHandler.java │ │ │ ├── HandlerCommon.java │ │ │ ├── IndexNestedLoopJoinHandler.java │ │ │ ├── InsertHandler.java │ │ │ ├── MergeHandler.java │ │ │ ├── NestedLoopJoinHandler.java │ │ │ ├── PutHandlerCommon.java │ │ │ ├── QueryHandler.java │ │ │ ├── QueryHandlerCommon.java │ │ │ ├── ReloadSchemaHandler.java │ │ │ ├── ReplaceHandler.java │ │ │ ├── ShowBroadcastsHandler.java │ │ │ ├── ShowDatasourcesHandler.java │ │ │ ├── ShowPartitionsHandler.java │ │ │ ├── ShowRuleHandler.java │ │ │ ├── ShowTablesHandler.java │ │ │ ├── ShowTopologyHandler.java │ │ │ ├── ShowTraceHandler.java │ │ │ ├── SortMergeJoinHandler.java │ │ │ ├── SubQueryHandler.java │ │ │ └── UpdateHandler.java │ │ ├── local │ │ │ └── LocalCommunicateExecutor.java │ │ ├── record │ │ │ ├── CloneableRecord.java │ │ │ ├── FixedLengthBaseRecord.java │ │ │ ├── FixedLengthRecord.java │ │ │ └── NamedRecord.java │ │ ├── repo │ │ │ ├── RepositoryConfig.java │ │ │ ├── RepositoryDefault.java │ │ │ └── RepositoryHolder.java │ │ ├── rowset │ │ │ ├── AbstractRowSet.java │ │ │ ├── ArrayRowSet.java │ │ │ ├── IRowSet.java │ │ │ ├── JoinRowSet.java │ │ │ ├── ResultSetRowSet.java │ │ │ └── RowSetWrapper.java │ │ ├── rpc │ │ │ └── RpcCommunicateExecutor.java │ │ ├── spi │ │ │ ├── AbstractTable.java │ │ │ ├── CursorFactoryDefaultImpl.java │ │ │ ├── IAtomExecutor.java │ │ │ ├── ICommandHandler.java │ │ │ ├── ICommandHandlerFactory.java │ │ │ ├── ICursorFactory.java │ │ │ ├── IDataSourceGetter.java │ │ │ ├── IGroupExecutor.java │ │ │ ├── IRepository.java │ │ │ ├── IRepositoryFactory.java │ │ │ ├── ITHLog.java │ │ │ ├── ITable.java │ │ │ ├── ITempTable.java │ │ │ ├── ITopologyExecutor.java │ │ │ └── ITransaction.java │ │ ├── transaction │ │ │ ├── AllowReadTransaction.java │ │ │ ├── AutoCommitConnectionHolder.java │ │ │ ├── AutoCommitTransaction.java │ │ │ ├── BaseConnectionHolder.java │ │ │ ├── BaseTransaction.java │ │ │ ├── CobarStyleConnectionHolder.java │ │ │ ├── CobarStyleTransaction.java │ │ │ ├── ConnectionHolderCombiner.java │ │ │ ├── StrictConnectionHolder.java │ │ │ └── StrictlTransaction.java │ │ └── utils │ │ │ └── ExecUtils.java │ │ ├── repo │ │ └── mysql │ │ │ ├── function │ │ │ ├── CaseWhen.java │ │ │ ├── Cast.java │ │ │ ├── Char.java │ │ │ ├── Convert.java │ │ │ ├── DateIntervalFunction.java │ │ │ ├── Extract.java │ │ │ ├── FunctionStringConstructor.java │ │ │ ├── FunctionStringConstructorManager.java │ │ │ ├── GetFormat.java │ │ │ ├── TimestampAdd.java │ │ │ ├── TimestampDiff.java │ │ │ ├── Trim.java │ │ │ ├── all │ │ │ │ ├── EqualAll.java │ │ │ │ ├── GreaterAll.java │ │ │ │ ├── GreaterEqualAll.java │ │ │ │ ├── LessAll.java │ │ │ │ ├── LessEqualAll.java │ │ │ │ └── NotEqualAll.java │ │ │ └── any │ │ │ │ ├── EqualAny.java │ │ │ │ ├── GreaterAny.java │ │ │ │ ├── GreaterEqualAny.java │ │ │ │ ├── LessAny.java │ │ │ │ ├── LessEqualAny.java │ │ │ │ └── NotEqualAny.java │ │ │ └── sqlconvertor │ │ │ ├── MyParamSqlContext.java │ │ │ ├── MysqlPlanVisitorImpl.java │ │ │ ├── Sql.java │ │ │ ├── SqlAndParam.java │ │ │ ├── SqlConvertor.java │ │ │ ├── SqlMergeNode.java │ │ │ └── Sqls.java │ │ └── statistics │ │ ├── AbstractSQLOperation.java │ │ ├── ExecuteSQLOperation.java │ │ ├── FetchFromLeftOperation.java │ │ ├── JoinNextOperation.java │ │ ├── NextOperation.java │ │ ├── OrignSQLOperation.java │ │ ├── QueryFromLeftOperation.java │ │ ├── SQLOperation.java │ │ ├── SQLRecord.java │ │ ├── SQLRecorder.java │ │ ├── SQLRecorderLogger.java │ │ └── SQLTracer.java │ └── resources │ └── META-INF │ └── services │ └── com.taobao.tddl.optimizer.sequence.ISequenceManager ├── tddl-group ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── taobao │ │ └── tddl │ │ └── group │ │ ├── config │ │ ├── GroupConfigHolder.java │ │ ├── GroupConfigManager.java │ │ ├── GroupExtraConfig.java │ │ ├── GroupIndex.java │ │ └── Weight.java │ │ ├── dbselector │ │ ├── AbstractDBSelector.java │ │ ├── DBSelector.java │ │ ├── EquityDbManager.java │ │ ├── OneDBSelector.java │ │ ├── PriorityDbGroupSelector.java │ │ └── RuntimeWritableAtomDBSelector.java │ │ ├── exception │ │ └── GroupNotAvaliableException.java │ │ ├── jdbc │ │ ├── DataSourceFetcher.java │ │ ├── DataSourceWrapper.java │ │ ├── TGroupCallableStatement.java │ │ ├── TGroupConnection.java │ │ ├── TGroupDataSource.java │ │ ├── TGroupDatabaseMetaData.java │ │ ├── TGroupPreparedStatement.java │ │ ├── TGroupStatement.java │ │ └── ThreadLocalDataSourceIndex.java │ │ ├── listener │ │ └── DataSourceChangeListener.java │ │ └── utils │ │ ├── GroupHintParser.java │ │ └── WeightRandom.java │ └── test │ ├── java │ └── com │ │ └── taobao │ │ └── tddl │ │ └── group │ │ ├── BaseGroupTest.java │ │ ├── CrudTest.java │ │ ├── DataSourceIndexTest.java │ │ ├── TransactionTest.java │ │ ├── config │ │ └── WeightUnitTest.java │ │ ├── exchange │ │ └── ExchangeInTranslation.java │ │ ├── jdbc │ │ ├── SelectorTest.java │ │ ├── TGroupConnectionTest.java │ │ ├── TGroupDataSourceTest.java │ │ ├── TGroupStatementTest.java │ │ └── ThreadLocalDataSourceIndexTest.java │ │ └── utils │ │ ├── GroupHintParserTest.java │ │ └── PropLoadTestUtil.java │ └── resources │ └── conf │ ├── group0 │ ├── app.properties │ ├── globa.properties │ └── passwd.properties │ ├── group1 │ ├── app.properties │ ├── globa.properties │ └── passwd.properties │ └── group2 │ ├── app.properties │ ├── globa.properties │ └── passwd.properties ├── tddl-hbase-sample ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ ├── alibaba │ │ ├── asc │ │ │ └── xuanwu │ │ │ │ └── framework │ │ │ │ └── common │ │ │ │ └── tddl │ │ │ │ └── util │ │ │ │ └── TddlPartition.java │ │ └── china │ │ │ └── dw │ │ │ └── dataopen │ │ │ └── andor │ │ │ ├── columncoder │ │ │ └── Date10ColumnCoder.java │ │ │ └── rowcoder │ │ │ ├── BoltRowCoder.java │ │ │ └── IPageRowCoder.java │ │ └── taobao │ │ └── tddl │ │ ├── client │ │ └── user │ │ │ └── method │ │ │ └── B2BDWCBUPartitionMethod.java │ │ └── sample │ │ └── CBU_IPAGE_HBASE.java │ └── resources │ ├── hbase_mapping.xml │ ├── hbase_rule.xml │ ├── hbase_schema.xml │ ├── log4j.properties │ ├── logback.xml │ └── test_schema.xml ├── tddl-manager ├── pom.xml └── src │ ├── main │ ├── assembly │ │ ├── component.xml │ │ ├── dev.xml │ │ └── release.xml │ ├── java │ │ └── com │ │ │ ├── alibaba │ │ │ └── cobar │ │ │ │ └── manager │ │ │ │ ├── dao │ │ │ │ ├── AbstrcatDAO.java │ │ │ │ ├── ClusterDAO.java │ │ │ │ ├── CobarAdapterDAO.java │ │ │ │ ├── CobarDAO.java │ │ │ │ ├── PropertyDAO.java │ │ │ │ ├── UserDAO.java │ │ │ │ ├── VipDAO.java │ │ │ │ ├── delegate │ │ │ │ │ ├── AdapterDelegate.java │ │ │ │ │ ├── CobarAdapter.java │ │ │ │ │ ├── CobarAdapterKey.java │ │ │ │ │ ├── DataSourceCreator.java │ │ │ │ │ └── DataSourceFactory.java │ │ │ │ └── xml │ │ │ │ │ ├── AbstractDAOImple.java │ │ │ │ │ ├── ClusterDAOImple.java │ │ │ │ │ ├── CobarDAOImple.java │ │ │ │ │ ├── PropertyDAOImple.java │ │ │ │ │ ├── UserDAOImple.java │ │ │ │ │ ├── VipDAOImple.java │ │ │ │ │ ├── XMLFileLoader.java │ │ │ │ │ └── XMLFileLoaderPath.java │ │ │ │ ├── dataobject │ │ │ │ ├── cobarnode │ │ │ │ │ ├── CommandStatus.java │ │ │ │ │ ├── ConnectionStatus.java │ │ │ │ │ ├── DataNodesStatus.java │ │ │ │ │ ├── DataSources.java │ │ │ │ │ ├── ProcessorStatus.java │ │ │ │ │ ├── ServerStatus.java │ │ │ │ │ ├── ThreadPoolStatus.java │ │ │ │ │ ├── TimeStamp.java │ │ │ │ │ └── TimeStampedVO.java │ │ │ │ └── xml │ │ │ │ │ ├── AppDO.java │ │ │ │ │ ├── ClusterDO.java │ │ │ │ │ ├── CobarDO.java │ │ │ │ │ ├── PropertyDO.java │ │ │ │ │ ├── UserDO.java │ │ │ │ │ └── VipDO.java │ │ │ │ ├── service │ │ │ │ ├── CobarAccesser.java │ │ │ │ └── XmlAccesser.java │ │ │ │ ├── util │ │ │ │ ├── CobarStringUtil.java │ │ │ │ ├── ConstantDefine.java │ │ │ │ ├── EncryptUtil.java │ │ │ │ ├── FluenceArrayList.java │ │ │ │ ├── FluenceHashMap.java │ │ │ │ ├── FluenceHashSet.java │ │ │ │ ├── FormatUtil.java │ │ │ │ ├── ListSortUtil.java │ │ │ │ ├── MathUtil.java │ │ │ │ ├── Pair.java │ │ │ │ ├── SQLDefine.java │ │ │ │ ├── SortUtil.java │ │ │ │ └── Tuple.java │ │ │ │ └── web │ │ │ │ ├── AuthenticationInterceptor.java │ │ │ │ ├── LogbackConfiguratorListener.java │ │ │ │ ├── PermissionInterceptor.java │ │ │ │ ├── URLBroker.java │ │ │ │ ├── action │ │ │ │ ├── AddApp.java │ │ │ │ ├── AddCluster.java │ │ │ │ ├── AddCobar.java │ │ │ │ ├── AddStopTime.java │ │ │ │ ├── AddUser.java │ │ │ │ ├── KillConnection.java │ │ │ │ ├── LoginAction.java │ │ │ │ ├── LogoutAction.java │ │ │ │ ├── ModifyCluster.java │ │ │ │ ├── ModifyCobar.java │ │ │ │ ├── ModifyPassword.java │ │ │ │ ├── ModifyUser.java │ │ │ │ ├── PropertyReload.java │ │ │ │ ├── StopHeartbeat.java │ │ │ │ └── SwitchDatanodes.java │ │ │ │ ├── ajax │ │ │ │ ├── AbstractAjaxParams.java │ │ │ │ ├── AjaxParams.java │ │ │ │ ├── AjaxResult.java │ │ │ │ ├── ClusterInstantPerfValueAjax.java │ │ │ │ ├── CobarControlAjax.java │ │ │ │ ├── CobarNodeInstantPerfValueAjax.java │ │ │ │ ├── CobarStatusQuery.java │ │ │ │ └── XmlManagerAjax.java │ │ │ │ └── screen │ │ │ │ ├── AddAppPage.java │ │ │ │ ├── AddClusterPage.java │ │ │ │ ├── AddCobarPage.java │ │ │ │ ├── AddUserPage.java │ │ │ │ ├── Alert.java │ │ │ │ ├── AppControlScreen.java │ │ │ │ ├── ChooseIndexPage.java │ │ │ │ ├── ChooseStoptimePage.java │ │ │ │ ├── ClusterListScreen.java │ │ │ │ ├── CobarDetailScreen.java │ │ │ │ ├── CobarListScreen.java │ │ │ │ ├── ConnectionControlScreen.java │ │ │ │ ├── DatanodesControlScreen.java │ │ │ │ ├── EditClusterPage.java │ │ │ │ ├── EditCobarPage.java │ │ │ │ ├── EditStopTimesPage.java │ │ │ │ ├── EditUserPage.java │ │ │ │ ├── ForbiddenScreen.java │ │ │ │ ├── Index.java │ │ │ │ ├── KillConfirm.java │ │ │ │ ├── LogIn.java │ │ │ │ ├── LogInFail.java │ │ │ │ ├── LogInPage.java │ │ │ │ ├── MClusterListScreen.java │ │ │ │ ├── MCobarListScreen.java │ │ │ │ ├── MModifyPwdConfirm.java │ │ │ │ ├── MPropertyListScreen.java │ │ │ │ ├── MUserListScreen.java │ │ │ │ ├── MUserModifyPwd.java │ │ │ │ ├── MVipCobarManager.java │ │ │ │ ├── MVipListScreen.java │ │ │ │ ├── MVipManager.java │ │ │ │ ├── PropertyConfirm.java │ │ │ │ ├── PropertyReloadScreen.java │ │ │ │ └── RecoveryConfirm.java │ │ │ └── taobao │ │ │ └── tddl │ │ │ └── manager │ │ │ ├── JettyEmbedServer.java │ │ │ └── TddlManagerLauncher.java │ └── resources │ │ ├── data │ │ ├── cluster.xml │ │ ├── cluster.xml-2014-06-25 │ │ ├── cobar.xml │ │ ├── cobar.xml-2014-06-25 │ │ ├── env.xml │ │ ├── property.xml │ │ ├── user.xml │ │ └── vip.xml │ │ ├── jetty.xml │ │ ├── log4j.properties │ │ ├── logback.xml │ │ ├── tddl.properties │ │ └── webapp │ │ ├── WEB-INF │ │ ├── cobarManager-servlet.xml │ │ └── web.xml │ │ ├── css │ │ ├── calendar.css │ │ ├── cobar.css │ │ ├── common.css │ │ └── skin.css │ │ ├── flash │ │ ├── amcharts_key.txt │ │ ├── amline.swf │ │ ├── amline.swf.tmp │ │ ├── ampie.swf │ │ ├── ampie.swf.tmp │ │ ├── cluster_data.txt │ │ ├── cluster_settings.xml │ │ ├── cobar_data.txt │ │ ├── cobar_settings.xml │ │ ├── expressInstall.swf │ │ ├── expressInstall.swf.tmp │ │ ├── jvm_data.txt │ │ ├── jvm_settings.xml │ │ ├── network_data.txt │ │ ├── network_settings.xml │ │ ├── pro_buffer_data.txt │ │ ├── pro_buffer_settings.xml │ │ ├── processor_data.txt │ │ ├── processor_settings.xml │ │ ├── threadpool_data.txt │ │ └── threadpool_settings.xml │ │ ├── images │ │ ├── 404.png │ │ ├── 404.png.tmp │ │ ├── Thumbs.db │ │ ├── Thumbs.db.tmp │ │ ├── btn3_1.png │ │ ├── btn3_1.png.tmp │ │ ├── btn3_2.png │ │ ├── btn3_2.png.tmp │ │ ├── button_hover.png │ │ ├── button_hover.png.tmp │ │ ├── button_normal.png │ │ ├── button_normal.png.tmp │ │ ├── close.gif │ │ ├── close.gif.tmp │ │ ├── close_over.gif │ │ ├── close_over.gif.tmp │ │ ├── down.gif │ │ ├── down.gif.tmp │ │ ├── down_over.gif │ │ ├── down_over.gif.tmp │ │ ├── down_time.gif │ │ ├── down_time.gif.tmp │ │ ├── down_time_over.gif │ │ ├── down_time_over.gif.tmp │ │ ├── exit.png │ │ ├── exit.png.tmp │ │ ├── forbidden.png │ │ ├── forbidden.png.tmp │ │ ├── head_bg.png │ │ ├── head_bg.png.tmp │ │ ├── ico_add.png │ │ ├── ico_add.png.tmp │ │ ├── ico_del.png │ │ ├── ico_del.png.tmp │ │ ├── k_bg.png │ │ ├── k_bg.png.tmp │ │ ├── k_bg2.png │ │ ├── k_bg2.png.tmp │ │ ├── k_bg3.png │ │ ├── k_bg3.png.tmp │ │ ├── left.gif │ │ ├── left.gif.tmp │ │ ├── left_over.gif │ │ ├── left_over.gif.tmp │ │ ├── line_dot.png │ │ ├── line_dot.png.tmp │ │ ├── login_bg.png │ │ ├── login_bg.png.tmp │ │ ├── login_box.png │ │ ├── login_box.png.tmp │ │ ├── login_btn_hover.png │ │ ├── login_btn_hover.png.tmp │ │ ├── login_btn_normal.png │ │ ├── login_btn_normal.png.tmp │ │ ├── login_logo.png │ │ ├── login_logo.png.tmp │ │ ├── login_shadow.png │ │ ├── login_shadow.png.tmp │ │ ├── login_top_bg.png │ │ ├── login_top_bg.png.tmp │ │ ├── logo.png │ │ ├── logo.png.tmp │ │ ├── main_bg.png │ │ ├── main_bg.png.tmp │ │ ├── nav_bg.png │ │ ├── nav_bg.png.tmp │ │ ├── nav_btn_bg22.png │ │ ├── nav_btn_bg22.png.tmp │ │ ├── nav_btn_bg3.png │ │ ├── nav_btn_bg3.png.tmp │ │ ├── nav_btn_bg33.png │ │ ├── nav_btn_bg33.png.tmp │ │ ├── nav_btn_bg44.png │ │ ├── nav_btn_bg44.png.tmp │ │ ├── nav_pass.png │ │ ├── nav_pass.png.tmp │ │ ├── nav_selected.png │ │ ├── nav_selected.png.tmp │ │ ├── pop_close.png │ │ ├── pop_close.png.tmp │ │ ├── pop_left.png │ │ ├── pop_left.png.tmp │ │ ├── pop_leftbottom.png │ │ ├── pop_leftbottom.png.tmp │ │ ├── pop_lefttop_small.png │ │ ├── pop_lefttop_small.png.tmp │ │ ├── pop_midbottom.png │ │ ├── pop_midbottom.png.tmp │ │ ├── pop_midtop_small.png │ │ ├── pop_midtop_small.png.tmp │ │ ├── pop_right.png │ │ ├── pop_right.png.tmp │ │ ├── pop_rightbottom.png │ │ ├── pop_rightbottom.png.tmp │ │ ├── pop_righttop_small.png │ │ ├── pop_righttop_small.png.tmp │ │ ├── pop_tips_bottom.png │ │ ├── pop_tips_bottom.png.tmp │ │ ├── pop_tips_mid.png │ │ ├── pop_tips_mid.png.tmp │ │ ├── pop_tips_top.png │ │ ├── pop_tips_top.png.tmp │ │ ├── right.gif │ │ ├── right.gif.tmp │ │ ├── right_over.gif │ │ ├── right_over.gif.tmp │ │ ├── search_global_l.png │ │ ├── search_global_l.png.tmp │ │ ├── search_global_m.png │ │ ├── search_global_m.png.tmp │ │ ├── search_global_r.png │ │ ├── search_global_r.png.tmp │ │ ├── search_global_r2.png │ │ ├── search_global_r2.png.tmp │ │ ├── search_global_r3.png │ │ ├── search_global_r3.png.tmp │ │ ├── search_go.png │ │ ├── search_go.png.tmp │ │ ├── search_m.png │ │ ├── search_m.png.tmp │ │ ├── tab_active.png │ │ ├── tab_active.png.tmp │ │ ├── tab_bg2.png │ │ ├── tab_bg2.png.tmp │ │ ├── table_title_bg.png │ │ ├── table_title_bg.png.tmp │ │ ├── tip_choose.png │ │ ├── tip_choose.png.tmp │ │ ├── tip_del.png │ │ ├── tip_del.png.tmp │ │ ├── tip_s.png │ │ ├── tip_s.png.tmp │ │ ├── tip_succeed.png │ │ ├── tip_succeed.png.tmp │ │ ├── tip_warning.png │ │ └── tip_warning.png.tmp │ │ ├── js │ │ ├── FormValidate.js │ │ ├── PopupCalendar.js │ │ ├── calendar.js │ │ ├── calendar.js.tmp │ │ ├── cobarList.js │ │ ├── common.js │ │ ├── index.js │ │ ├── jquery-1.4.2.min.js │ │ ├── jquery.simplemodal-1.4.js │ │ ├── pop.js │ │ ├── serverstatus.js │ │ ├── solo.js │ │ ├── swfobject.js │ │ └── trcolor.js │ │ └── template │ │ ├── c_app.vm │ │ ├── c_connection.vm │ │ ├── c_datanodeIndex.vm │ │ ├── c_datanodes.vm │ │ ├── c_failure.vm │ │ ├── c_killConfirm.vm │ │ ├── c_propertyConfirm.vm │ │ ├── c_propertyReload.vm │ │ ├── c_recoveryConfirm.vm │ │ ├── c_result.vm │ │ ├── c_stoptime.vm │ │ ├── c_success.vm │ │ ├── failure.vm │ │ ├── footer.vm │ │ ├── forbidden.vm │ │ ├── index.vm │ │ ├── logInFail.vm │ │ ├── logInPage.vm │ │ ├── login.vm │ │ ├── m_addApp.vm │ │ ├── m_addCluster.vm │ │ ├── m_addCobar.vm │ │ ├── m_addUser.vm │ │ ├── m_clusterList.vm │ │ ├── m_cobarList.vm │ │ ├── m_editCluster.vm │ │ ├── m_editCobar.vm │ │ ├── m_editStopTimes.vm │ │ ├── m_editUser.vm │ │ ├── m_modifyPwd.vm │ │ ├── m_modifyPwdConfirm.vm │ │ ├── m_propertyList.vm │ │ ├── m_success.vm │ │ ├── m_userList.vm │ │ ├── m_vipCobarList.vm │ │ ├── m_vipList.vm │ │ ├── m_vipManager.vm │ │ ├── menu_c.vm │ │ ├── menu_m.vm │ │ ├── menu_v.vm │ │ ├── propertyReload.vm │ │ ├── return.vm │ │ ├── selectIndex.vm │ │ ├── selectStoptime.vm │ │ ├── success.vm │ │ ├── v_clusterList.vm │ │ ├── v_cobarDetail.vm │ │ └── v_cobarList.vm │ └── test │ ├── java │ └── com │ │ └── alibaba │ │ └── cobar │ │ └── manager │ │ ├── jdbcmock │ │ ├── domain │ │ │ ├── DBUtility.java │ │ │ ├── SalesOrder.java │ │ │ └── SalesOrderImpl.java │ │ ├── macher │ │ │ └── SQLEquals.java │ │ └── testcase │ │ │ └── JdbcTest.java │ │ ├── qa │ │ ├── modle │ │ │ ├── CobarFactory.java │ │ │ ├── SimpleCobarNode.java │ │ │ └── SimpleMySqlNode.java │ │ ├── monitor │ │ │ ├── TestCobarAdapter.java │ │ │ ├── TestCobarNode.java │ │ │ ├── TestCommands.java │ │ │ ├── TestConnection.java │ │ │ ├── TestDataBases.java │ │ │ ├── TestDataNodes.java │ │ │ ├── TestDataSources.java │ │ │ ├── TestProcessor.java │ │ │ ├── TestReloadTime.java │ │ │ ├── TestRollbackTime.java │ │ │ ├── TestServerStatus.java │ │ │ └── TestTimeStamp.java │ │ ├── sysadmin │ │ │ ├── ClusterDaoTest.java │ │ │ ├── CobarDaoTest.java │ │ │ ├── DOFactory.java │ │ │ ├── PropertyDaoTest.java │ │ │ ├── SysAdminTest.java │ │ │ ├── UserDaoTest.java │ │ │ └── XmlFile.java │ │ └── util │ │ │ └── TestUtils.java │ │ ├── test │ │ ├── CobarAccessTest.java │ │ ├── ConnectionTest.java │ │ ├── MixTest.java │ │ └── TestXMLFileLoader.java │ │ └── web │ │ └── commons │ │ ├── EncryptTest.java │ │ ├── PermissionInterceptorTest.java │ │ ├── TestAddCobar.java │ │ ├── TestDataNodeControl.java │ │ ├── XMLFileLoaderCreator.java │ │ └── XmlFile.java │ └── resources │ ├── WEB-INF │ ├── cobarManager-servlet.xml │ └── velocity.properties │ └── cobarNode.properties ├── tddl-matrix ├── pom.xml └── src │ └── main │ └── java │ └── com │ └── taobao │ └── tddl │ └── matrix │ ├── config │ └── MatrixConfigHolder.java │ └── jdbc │ ├── TCallableStatement.java │ ├── TConnection.java │ ├── TDataSource.java │ ├── TDatabaseMetaData.java │ ├── TPreparedStatement.java │ ├── TResultSet.java │ ├── TResultSetMetaData.java │ ├── TStatement.java │ └── utils │ └── ExceptionUtils.java ├── tddl-monitor ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── taobao │ │ │ └── tddl │ │ │ └── monitor │ │ │ ├── Monitor.java │ │ │ ├── MonitorConfig.java │ │ │ ├── SnapshotValuesOutputCallBack.java │ │ │ ├── StatMonitor.java │ │ │ ├── StatMonitorMBean.java │ │ │ ├── eagleeye │ │ │ ├── EagleeyeHelper.java │ │ │ ├── MockTddlEagleeye.java │ │ │ └── TddlEagleeye.java │ │ │ ├── logger │ │ │ ├── DynamicLogger.java │ │ │ ├── LoggerInit.java │ │ │ ├── log4j │ │ │ │ ├── DailyMaxRollingFileAppender.java │ │ │ │ ├── DynamicLog4jAdapterLogger.java │ │ │ │ └── DynamicLog4jLogger.java │ │ │ └── logback │ │ │ │ ├── DynamicLogback918Logger.java │ │ │ │ └── DynamicLogbackLogger.java │ │ │ ├── stat │ │ │ ├── AbstractStatLogWriter.java │ │ │ ├── BufferedLogWriter.java │ │ │ ├── LoggerLogWriter.java │ │ │ ├── MinMaxAvgLogWriter.java │ │ │ ├── SoftRefLogWriter.java │ │ │ └── StatLogWriter.java │ │ │ └── unit │ │ │ ├── MockTddlRouter.java │ │ │ ├── RouterUnitsHelper.java │ │ │ ├── TddlRouter.java │ │ │ ├── TddlRouterUnitsListener.java │ │ │ └── UnitDeployInvalidException.java │ └── resources │ │ └── META-INF │ │ └── services │ │ ├── com.taobao.tddl.monitor.eagleeye.TddlEagleeye │ │ └── com.taobao.tddl.monitor.unit.TddlRouter │ └── test │ └── java │ └── com │ └── tddl │ └── tddl │ └── monitor │ ├── logger │ └── DynamicLoggerTest.java │ └── stat │ ├── BufferedLogWriterTest.java │ └── SoftRefLogWriterTest.java ├── tddl-net ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── alibaba │ │ └── cobar │ │ ├── Capabilities.java │ │ ├── Commands.java │ │ ├── ErrorCode.java │ │ ├── Fields.java │ │ ├── Isolations.java │ │ ├── Versions.java │ │ └── net │ │ ├── AbstractConnection.java │ │ ├── BackendConnection.java │ │ ├── FrontendConnection.java │ │ ├── NIOAcceptor.java │ │ ├── NIOConnection.java │ │ ├── NIOConnector.java │ │ ├── NIOProcessor.java │ │ ├── NIOReactor.java │ │ ├── buffer │ │ ├── BufferPool.java │ │ └── BufferQueue.java │ │ ├── factory │ │ ├── BackendConnectionFactory.java │ │ └── FrontendConnectionFactory.java │ │ ├── handler │ │ ├── CommandCount.java │ │ ├── FrontendAuthenticator.java │ │ ├── FrontendCommandHandler.java │ │ ├── NIOHandler.java │ │ ├── Privileges.java │ │ └── QueryHandler.java │ │ ├── packet │ │ ├── AuthPacket.java │ │ ├── BinaryPacket.java │ │ ├── CommandPacket.java │ │ ├── EOFPacket.java │ │ ├── ErrorPacket.java │ │ ├── FieldPacket.java │ │ ├── HandshakePacket.java │ │ ├── MySQLPacket.java │ │ ├── MysqlResultSetPacket.java │ │ ├── OkPacket.java │ │ ├── PingPacket.java │ │ ├── QuitPacket.java │ │ ├── Reply323Packet.java │ │ ├── ResultSetHeaderPacket.java │ │ └── RowDataPacket.java │ │ └── util │ │ ├── BufferUtil.java │ │ ├── CharsetUtil.java │ │ ├── ExecutorUtil.java │ │ ├── MySQLMessage.java │ │ ├── NameableExecutor.java │ │ ├── RandomUtil.java │ │ ├── SecurityUtil.java │ │ ├── StreamUtil.java │ │ └── TimeUtil.java │ └── test │ └── resources │ └── logback.xml ├── tddl-optimizer ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── taobao │ │ └── tddl │ │ └── optimizer │ │ ├── Optimizer.java │ │ ├── OptimizerContext.java │ │ ├── config │ │ └── table │ │ │ ├── ColumnMessage.java │ │ │ ├── ColumnMeta.java │ │ │ ├── HBaseColumnCoder.java │ │ │ ├── IndexManager.java │ │ │ ├── IndexMeta.java │ │ │ ├── IndexType.java │ │ │ ├── Relationship.java │ │ │ ├── RepoSchemaManager.java │ │ │ ├── SchemaManager.java │ │ │ ├── StaticSchemaManager.java │ │ │ ├── TableMeta.java │ │ │ └── parse │ │ │ ├── MatrixParser.java │ │ │ └── TableMetaParser.java │ │ ├── core │ │ ├── ASTNodeFactory.java │ │ ├── CanVisit.java │ │ ├── PlanVisitor.java │ │ ├── ast │ │ │ ├── ASTNode.java │ │ │ ├── DMLNode.java │ │ │ ├── QueryTreeNode.java │ │ │ ├── build │ │ │ │ ├── JoinNodeBuilder.java │ │ │ │ ├── KVIndexNodeBuilder.java │ │ │ │ ├── MergeNodeBuilder.java │ │ │ │ ├── QueryNodeBuilder.java │ │ │ │ ├── QueryTreeNodeBuilder.java │ │ │ │ └── TableNodeBuilder.java │ │ │ ├── dal │ │ │ │ ├── BaseShowNode.java │ │ │ │ ├── GetSequenceNode.java │ │ │ │ ├── ShowWithTableNode.java │ │ │ │ └── ShowWithoutTableNode.java │ │ │ ├── delegate │ │ │ │ ├── NodeDelegate.java │ │ │ │ └── ShareDelegate.java │ │ │ ├── dml │ │ │ │ ├── DeleteNode.java │ │ │ │ ├── InsertNode.java │ │ │ │ ├── LoadDataNode.java │ │ │ │ ├── PutNode.java │ │ │ │ └── UpdateNode.java │ │ │ ├── query │ │ │ │ ├── JoinNode.java │ │ │ │ ├── KVIndexNode.java │ │ │ │ ├── MergeNode.java │ │ │ │ ├── QueryNode.java │ │ │ │ └── TableNode.java │ │ │ └── reload │ │ │ │ └── ReloadNode.java │ │ ├── datatype │ │ │ ├── AbstractCalculator.java │ │ │ ├── AbstractDataType.java │ │ │ ├── BigBitType.java │ │ │ ├── BigDecimalType.java │ │ │ ├── BigIntegerType.java │ │ │ ├── BitType.java │ │ │ ├── BlobType.java │ │ │ ├── BooleanType.java │ │ │ ├── ByteType.java │ │ │ ├── BytesType.java │ │ │ ├── Calculator.java │ │ │ ├── ClobType.java │ │ │ ├── CommonType.java │ │ │ ├── CorruptEncodingException.java │ │ │ ├── DataDecoder.java │ │ │ ├── DataEncoder.java │ │ │ ├── DataType.java │ │ │ ├── DataTypeUtil.java │ │ │ ├── DateType.java │ │ │ ├── DoubleType.java │ │ │ ├── EncodingConstants.java │ │ │ ├── FloatType.java │ │ │ ├── IntegerType.java │ │ │ ├── IntervalType.java │ │ │ ├── KeyDecoder.java │ │ │ ├── KeyEncoder.java │ │ │ ├── LongType.java │ │ │ ├── ShortType.java │ │ │ ├── StringType.java │ │ │ ├── TimeType.java │ │ │ ├── TimestampType.java │ │ │ ├── UndecidedType.java │ │ │ └── YearType.java │ │ ├── expression │ │ │ ├── ExtraFunctionManager.java │ │ │ ├── IBindVal.java │ │ │ ├── IBooleanFilter.java │ │ │ ├── IColumn.java │ │ │ ├── IExtraFunction.java │ │ │ ├── IFilter.java │ │ │ ├── IFunction.java │ │ │ ├── IGroupFilter.java │ │ │ ├── ILogicalFilter.java │ │ │ ├── IOrderBy.java │ │ │ ├── ISelectable.java │ │ │ ├── ISequenceVal.java │ │ │ └── bean │ │ │ │ ├── BindVal.java │ │ │ │ ├── BooleanFilter.java │ │ │ │ ├── Column.java │ │ │ │ ├── Function.java │ │ │ │ ├── GroupFilter.java │ │ │ │ ├── LobVal.java │ │ │ │ ├── LogicalFilter.java │ │ │ │ ├── NullValue.java │ │ │ │ ├── OrderBy.java │ │ │ │ └── SequenceVal.java │ │ └── plan │ │ │ ├── IDataNodeExecutor.java │ │ │ ├── IPut.java │ │ │ ├── IQueryTree.java │ │ │ ├── bean │ │ │ ├── DataNodeExecutor.java │ │ │ ├── Delete.java │ │ │ ├── GetSequence.java │ │ │ ├── Insert.java │ │ │ ├── Join.java │ │ │ ├── Merge.java │ │ │ ├── Put.java │ │ │ ├── Query.java │ │ │ ├── QueryTree.java │ │ │ ├── Reload.java │ │ │ ├── Replace.java │ │ │ ├── Show.java │ │ │ ├── ShowWithTable.java │ │ │ ├── ShowWithoutTable.java │ │ │ └── Update.java │ │ │ ├── dml │ │ │ ├── IDelete.java │ │ │ ├── IInsert.java │ │ │ ├── IReplace.java │ │ │ └── IUpdate.java │ │ │ └── query │ │ │ ├── IGetSequence.java │ │ │ ├── IJoin.java │ │ │ ├── IMerge.java │ │ │ ├── IQuery.java │ │ │ ├── IReload.java │ │ │ ├── IShow.java │ │ │ ├── IShowWithTable.java │ │ │ └── IShowWithoutTable.java │ │ ├── costbased │ │ ├── CostBasedOptimizer.java │ │ ├── FilterPreProcessor.java │ │ ├── FilterSpliter.java │ │ ├── JoinPreProcessor.java │ │ ├── SequencePreProcessor.java │ │ ├── SubQueryPreProcessor.java │ │ ├── after │ │ │ ├── ChooseTreadOptimizer.java │ │ │ ├── FillLastSequenceValOptimizer.java │ │ │ ├── FillRequestIDAndSubRequestID.java │ │ │ ├── FuckAvgOptimizer.java │ │ │ ├── MergeConcurrentOptimizer.java │ │ │ ├── MergeJoinMergeOptimizer.java │ │ │ ├── QueryPlanOptimizer.java │ │ │ └── StreamingOptimizer.java │ │ ├── chooser │ │ │ ├── DataNodeChooser.java │ │ │ ├── IndexChooser.java │ │ │ ├── JoinChooser.java │ │ │ └── JoinPermutationGenerator.java │ │ ├── esitimater │ │ │ ├── Cost.java │ │ │ ├── CostEsitimaterFactory.java │ │ │ ├── JoinNodeCostEstimater.java │ │ │ ├── MergeNodeCostEstimater.java │ │ │ ├── QueryNodeCostEstimater.java │ │ │ ├── QueryTreeCostEstimater.java │ │ │ └── stat │ │ │ │ ├── KVColumnStat.java │ │ │ │ ├── KVIndexStat.java │ │ │ │ ├── LocalStatManager.java │ │ │ │ ├── RepoStatManager.java │ │ │ │ ├── StatManager.java │ │ │ │ ├── TableColumnStat.java │ │ │ │ ├── TableIndexStat.java │ │ │ │ ├── TableStat.java │ │ │ │ └── parse │ │ │ │ ├── TableIndexStatParser.java │ │ │ │ └── TableStatParser.java │ │ └── pusher │ │ │ ├── FilterPusher.java │ │ │ └── OrderByPusher.java │ │ ├── exception │ │ ├── EmptyResultFilterException.java │ │ ├── OptimizerException.java │ │ └── SqlParserException.java │ │ ├── parse │ │ ├── SqlAnalysisResult.java │ │ ├── SqlParseManager.java │ │ ├── cobar │ │ │ ├── CobarSqlAnalysisResult.java │ │ │ ├── CobarSqlParseManager.java │ │ │ ├── CoronaSequenceProcessor.java │ │ │ └── visitor │ │ │ │ ├── MySqlDeleteVisitor.java │ │ │ │ ├── MySqlExprVisitor.java │ │ │ │ ├── MySqlInsertVisitor.java │ │ │ │ ├── MySqlLoadDataVisitor.java │ │ │ │ ├── MySqlReplaceVisitor.java │ │ │ │ ├── MySqlSelectVisitor.java │ │ │ │ ├── MySqlShowVisitor.java │ │ │ │ ├── MySqlUpdateVisitor.java │ │ │ │ ├── MysqlParameterizedSqlVistor.java │ │ │ │ ├── MysqlSqlVisitor.java │ │ │ │ ├── MysqlTableVisitor.java │ │ │ │ ├── ReloadVisitor.java │ │ │ │ └── SequenceVisitor.java │ │ └── hint │ │ │ ├── OldHintParser.java │ │ │ └── SimpleHintParser.java │ │ ├── rule │ │ ├── OptimizerRule.java │ │ ├── RuleIndexManager.java │ │ ├── RuleSchemaManager.java │ │ └── RuleStatManager.java │ │ ├── sequence │ │ ├── ISequenceManager.java │ │ ├── MemorySequenceManager.java │ │ └── SequenceManagerProxy.java │ │ └── utils │ │ ├── FilterUtils.java │ │ ├── IdWorker.java │ │ ├── OptimizerToString.java │ │ ├── OptimizerUtils.java │ │ ├── PackageUtils.java │ │ ├── PermutationGenerator.java │ │ ├── UniqIdGen.java │ │ └── range │ │ ├── AbstractRangeProcessor.java │ │ ├── AndRangeProcessor.java │ │ ├── OrRangeProcessor.java │ │ └── Range.java │ └── test │ ├── java │ └── com │ │ └── taobao │ │ └── tddl │ │ └── optimizer │ │ ├── BaseOptimizerTest.java │ │ ├── config │ │ ├── MatrixParserTest.java │ │ ├── MockRepoSchemaManager.java │ │ ├── TableMetaParserTest.java │ │ └── TableStatParserTest.java │ │ ├── core │ │ ├── datatype │ │ │ └── DataTypeTest.java │ │ └── function │ │ │ ├── DummyTest.java │ │ │ └── ExtraFunctionManagerTest.java │ │ ├── costbased │ │ ├── BatchTest.java │ │ ├── DMLNodeChooserTest.java │ │ ├── DataNodeChooserTest.java │ │ ├── FilterPreProcessorTest.java │ │ ├── FilterPusherTest.java │ │ ├── FilterSpliterTest.java │ │ ├── IndexChooserTest.java │ │ ├── JoinChooserTest.java │ │ ├── JoinPreProcessorTest.java │ │ ├── KVIndexNodeTest.java │ │ ├── MergeJoinMergeOptimizerTest.java │ │ ├── OptimizerTest.java │ │ ├── OrderByPusherTest.java │ │ ├── PermutationGeneratorTest.java │ │ ├── RuleTest.java │ │ ├── StreamingTest.java │ │ └── SubQueryPreProcessorTest.java │ │ ├── parse │ │ ├── OldHintParserTest.java │ │ ├── SimpleHintParserTest.java │ │ ├── SqlParserTest.java │ │ └── TableParserTest.java │ │ └── utils │ │ ├── FilterUtilsTest.java │ │ ├── PackageUtilsTest.java │ │ └── RangeTest.java │ └── resources │ ├── META-INF │ └── services │ │ ├── com.taobao.tddl.optimizer.config.table.RepoSchemaManager │ │ ├── com.taobao.tddl.optimizer.core.expression.IExtraFunction │ │ └── com.taobao.tddl.optimizer.sequence.ISequenceManager │ └── config │ ├── kvIndex_stat.xml │ ├── table_stat.xml │ ├── test_matrix.xml │ ├── test_rule.xml │ └── test_table.xml ├── tddl-parser ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── alibaba │ │ └── cobar │ │ └── parser │ │ ├── ast │ │ ├── ASTNode.java │ │ ├── expression │ │ │ ├── AbstractExpression.java │ │ │ ├── BinaryOperatorExpression.java │ │ │ ├── Expression.java │ │ │ ├── PolyadicOperatorExpression.java │ │ │ ├── ReplacableExpression.java │ │ │ ├── TernaryOperatorExpression.java │ │ │ ├── UnaryOperatorExpression.java │ │ │ ├── arithmeic │ │ │ │ ├── ArithmeticAddExpression.java │ │ │ │ ├── ArithmeticBinaryOperatorExpression.java │ │ │ │ ├── ArithmeticDivideExpression.java │ │ │ │ ├── ArithmeticIntegerDivideExpression.java │ │ │ │ ├── ArithmeticModExpression.java │ │ │ │ ├── ArithmeticMultiplyExpression.java │ │ │ │ ├── ArithmeticSubtractExpression.java │ │ │ │ └── MinusExpression.java │ │ │ ├── bit │ │ │ │ ├── BitAndExpression.java │ │ │ │ ├── BitInvertExpression.java │ │ │ │ ├── BitOrExpression.java │ │ │ │ ├── BitShiftExpression.java │ │ │ │ └── BitXORExpression.java │ │ │ ├── comparison │ │ │ │ ├── BetweenAndExpression.java │ │ │ │ ├── ComparisionEqualsExpression.java │ │ │ │ ├── ComparisionGreaterThanExpression.java │ │ │ │ ├── ComparisionGreaterThanOrEqualsExpression.java │ │ │ │ ├── ComparisionIsExpression.java │ │ │ │ ├── ComparisionLessOrGreaterThanExpression.java │ │ │ │ ├── ComparisionLessThanExpression.java │ │ │ │ ├── ComparisionLessThanOrEqualsExpression.java │ │ │ │ ├── ComparisionNotEqualsExpression.java │ │ │ │ ├── ComparisionNullSafeEqualsExpression.java │ │ │ │ └── InExpression.java │ │ │ ├── logical │ │ │ │ ├── LogicalAndExpression.java │ │ │ │ ├── LogicalNotExpression.java │ │ │ │ ├── LogicalOrExpression.java │ │ │ │ ├── LogicalXORExpression.java │ │ │ │ └── NegativeValueExpression.java │ │ │ ├── misc │ │ │ │ ├── AssignmentExpression.java │ │ │ │ ├── InExpressionList.java │ │ │ │ ├── QueryExpression.java │ │ │ │ ├── SubqueryAllExpression.java │ │ │ │ ├── SubqueryAnyExpression.java │ │ │ │ └── UserExpression.java │ │ │ ├── primary │ │ │ │ ├── CaseWhenOperatorExpression.java │ │ │ │ ├── DefaultValue.java │ │ │ │ ├── ExistsPrimary.java │ │ │ │ ├── Identifier.java │ │ │ │ ├── MatchExpression.java │ │ │ │ ├── ParamMarker.java │ │ │ │ ├── PlaceHolder.java │ │ │ │ ├── PrimaryExpression.java │ │ │ │ ├── RowExpression.java │ │ │ │ ├── SysVarPrimary.java │ │ │ │ ├── UsrDefVarPrimary.java │ │ │ │ ├── VariableExpression.java │ │ │ │ ├── Wildcard.java │ │ │ │ ├── function │ │ │ │ │ ├── FunctionExpression.java │ │ │ │ │ ├── arithmetic │ │ │ │ │ │ ├── Abs.java │ │ │ │ │ │ ├── Acos.java │ │ │ │ │ │ ├── Asin.java │ │ │ │ │ │ ├── Atan.java │ │ │ │ │ │ ├── Atan2.java │ │ │ │ │ │ ├── Ceiling.java │ │ │ │ │ │ ├── Conv.java │ │ │ │ │ │ ├── Cos.java │ │ │ │ │ │ ├── Cot.java │ │ │ │ │ │ ├── Crc32.java │ │ │ │ │ │ ├── Degrees.java │ │ │ │ │ │ ├── Exp.java │ │ │ │ │ │ ├── Floor.java │ │ │ │ │ │ ├── Log.java │ │ │ │ │ │ ├── Log10.java │ │ │ │ │ │ ├── Log2.java │ │ │ │ │ │ ├── Oct.java │ │ │ │ │ │ ├── Pi.java │ │ │ │ │ │ ├── Pow.java │ │ │ │ │ │ ├── Radians.java │ │ │ │ │ │ ├── Rand.java │ │ │ │ │ │ ├── Round.java │ │ │ │ │ │ ├── Sign.java │ │ │ │ │ │ ├── Sin.java │ │ │ │ │ │ ├── Sqrt.java │ │ │ │ │ │ ├── Tan.java │ │ │ │ │ │ └── Truncate.java │ │ │ │ │ ├── bit │ │ │ │ │ │ └── BitCount.java │ │ │ │ │ ├── cast │ │ │ │ │ │ ├── Cast.java │ │ │ │ │ │ └── Convert.java │ │ │ │ │ ├── comparison │ │ │ │ │ │ ├── Coalesce.java │ │ │ │ │ │ ├── Greatest.java │ │ │ │ │ │ ├── Interval.java │ │ │ │ │ │ ├── Isnull.java │ │ │ │ │ │ └── Least.java │ │ │ │ │ ├── datetime │ │ │ │ │ │ ├── Adddate.java │ │ │ │ │ │ ├── Addtime.java │ │ │ │ │ │ ├── ConvertTz.java │ │ │ │ │ │ ├── Curdate.java │ │ │ │ │ │ ├── Curtime.java │ │ │ │ │ │ ├── Date.java │ │ │ │ │ │ ├── DateAdd.java │ │ │ │ │ │ ├── DateFormat.java │ │ │ │ │ │ ├── DateSub.java │ │ │ │ │ │ ├── Datediff.java │ │ │ │ │ │ ├── Dayname.java │ │ │ │ │ │ ├── Dayofmonth.java │ │ │ │ │ │ ├── Dayofweek.java │ │ │ │ │ │ ├── Dayofyear.java │ │ │ │ │ │ ├── Extract.java │ │ │ │ │ │ ├── FromDays.java │ │ │ │ │ │ ├── FromUnixtime.java │ │ │ │ │ │ ├── GetFormat.java │ │ │ │ │ │ ├── Hour.java │ │ │ │ │ │ ├── LastDay.java │ │ │ │ │ │ ├── Makedate.java │ │ │ │ │ │ ├── Maketime.java │ │ │ │ │ │ ├── Microsecond.java │ │ │ │ │ │ ├── Minute.java │ │ │ │ │ │ ├── Month.java │ │ │ │ │ │ ├── Monthname.java │ │ │ │ │ │ ├── Now.java │ │ │ │ │ │ ├── PeriodAdd.java │ │ │ │ │ │ ├── PeriodDiff.java │ │ │ │ │ │ ├── Quarter.java │ │ │ │ │ │ ├── SecToTime.java │ │ │ │ │ │ ├── Second.java │ │ │ │ │ │ ├── StrToDate.java │ │ │ │ │ │ ├── Subdate.java │ │ │ │ │ │ ├── Subtime.java │ │ │ │ │ │ ├── Sysdate.java │ │ │ │ │ │ ├── Time.java │ │ │ │ │ │ ├── TimeFormat.java │ │ │ │ │ │ ├── TimeToSec.java │ │ │ │ │ │ ├── Timediff.java │ │ │ │ │ │ ├── Timestamp.java │ │ │ │ │ │ ├── Timestampadd.java │ │ │ │ │ │ ├── Timestampdiff.java │ │ │ │ │ │ ├── ToDays.java │ │ │ │ │ │ ├── ToSeconds.java │ │ │ │ │ │ ├── UnixTimestamp.java │ │ │ │ │ │ ├── UtcDate.java │ │ │ │ │ │ ├── UtcTime.java │ │ │ │ │ │ ├── UtcTimestamp.java │ │ │ │ │ │ ├── Week.java │ │ │ │ │ │ ├── Weekday.java │ │ │ │ │ │ ├── Weekofyear.java │ │ │ │ │ │ ├── Year.java │ │ │ │ │ │ └── Yearweek.java │ │ │ │ │ ├── encryption │ │ │ │ │ │ ├── AesDecrypt.java │ │ │ │ │ │ ├── AesEncrypt.java │ │ │ │ │ │ ├── Compress.java │ │ │ │ │ │ ├── Decode.java │ │ │ │ │ │ ├── DesDecrypt.java │ │ │ │ │ │ ├── DesEncrypt.java │ │ │ │ │ │ ├── Encode.java │ │ │ │ │ │ ├── Encrypt.java │ │ │ │ │ │ ├── Md5.java │ │ │ │ │ │ ├── OldPassword.java │ │ │ │ │ │ ├── Password.java │ │ │ │ │ │ ├── Sha1.java │ │ │ │ │ │ ├── Sha2.java │ │ │ │ │ │ ├── Uncompress.java │ │ │ │ │ │ └── UncompressedLength.java │ │ │ │ │ ├── flowctrl │ │ │ │ │ │ ├── If.java │ │ │ │ │ │ ├── Ifnull.java │ │ │ │ │ │ └── Nullif.java │ │ │ │ │ ├── groupby │ │ │ │ │ │ ├── Avg.java │ │ │ │ │ │ ├── BitAnd.java │ │ │ │ │ │ ├── BitOr.java │ │ │ │ │ │ ├── BitXor.java │ │ │ │ │ │ ├── Count.java │ │ │ │ │ │ ├── GroupConcat.java │ │ │ │ │ │ ├── Max.java │ │ │ │ │ │ ├── Min.java │ │ │ │ │ │ ├── Std.java │ │ │ │ │ │ ├── Stddev.java │ │ │ │ │ │ ├── StddevPop.java │ │ │ │ │ │ ├── StddevSamp.java │ │ │ │ │ │ ├── Sum.java │ │ │ │ │ │ ├── VarPop.java │ │ │ │ │ │ ├── VarSamp.java │ │ │ │ │ │ └── Variance.java │ │ │ │ │ ├── info │ │ │ │ │ │ ├── Benchmark.java │ │ │ │ │ │ ├── Charset.java │ │ │ │ │ │ ├── Coercibility.java │ │ │ │ │ │ ├── Collation.java │ │ │ │ │ │ ├── ConnectionId.java │ │ │ │ │ │ ├── CurrentUser.java │ │ │ │ │ │ ├── Database.java │ │ │ │ │ │ ├── FoundRows.java │ │ │ │ │ │ ├── LastInsertId.java │ │ │ │ │ │ ├── RowCount.java │ │ │ │ │ │ ├── User.java │ │ │ │ │ │ └── Version.java │ │ │ │ │ ├── misc │ │ │ │ │ │ ├── Analyse.java │ │ │ │ │ │ ├── Default.java │ │ │ │ │ │ ├── GetLock.java │ │ │ │ │ │ ├── InetAton.java │ │ │ │ │ │ ├── InetNtoa.java │ │ │ │ │ │ ├── IsFreeLock.java │ │ │ │ │ │ ├── IsUsedLock.java │ │ │ │ │ │ ├── MasterPosWait.java │ │ │ │ │ │ ├── NameConst.java │ │ │ │ │ │ ├── ReleaseLock.java │ │ │ │ │ │ ├── Sleep.java │ │ │ │ │ │ ├── Uuid.java │ │ │ │ │ │ ├── UuidShort.java │ │ │ │ │ │ └── Values.java │ │ │ │ │ ├── string │ │ │ │ │ │ ├── Ascii.java │ │ │ │ │ │ ├── Bin.java │ │ │ │ │ │ ├── BitLength.java │ │ │ │ │ │ ├── Char.java │ │ │ │ │ │ ├── CharLength.java │ │ │ │ │ │ ├── Concat.java │ │ │ │ │ │ ├── ConcatWs.java │ │ │ │ │ │ ├── Elt.java │ │ │ │ │ │ ├── ExportSet.java │ │ │ │ │ │ ├── Field.java │ │ │ │ │ │ ├── FindInSet.java │ │ │ │ │ │ ├── Format.java │ │ │ │ │ │ ├── Hex.java │ │ │ │ │ │ ├── Insert.java │ │ │ │ │ │ ├── Instr.java │ │ │ │ │ │ ├── Left.java │ │ │ │ │ │ ├── Length.java │ │ │ │ │ │ ├── LoadFile.java │ │ │ │ │ │ ├── Locate.java │ │ │ │ │ │ ├── Lower.java │ │ │ │ │ │ ├── Lpad.java │ │ │ │ │ │ ├── Ltrim.java │ │ │ │ │ │ ├── MakeSet.java │ │ │ │ │ │ ├── Ord.java │ │ │ │ │ │ ├── Quote.java │ │ │ │ │ │ ├── Repeat.java │ │ │ │ │ │ ├── Replace.java │ │ │ │ │ │ ├── Reverse.java │ │ │ │ │ │ ├── Right.java │ │ │ │ │ │ ├── Rpad.java │ │ │ │ │ │ ├── Rtrim.java │ │ │ │ │ │ ├── Soundex.java │ │ │ │ │ │ ├── Space.java │ │ │ │ │ │ ├── Strcmp.java │ │ │ │ │ │ ├── Substring.java │ │ │ │ │ │ ├── SubstringIndex.java │ │ │ │ │ │ ├── Trim.java │ │ │ │ │ │ ├── Unhex.java │ │ │ │ │ │ └── Upper.java │ │ │ │ │ └── xml │ │ │ │ │ │ ├── Extractvalue.java │ │ │ │ │ │ └── Updatexml.java │ │ │ │ └── literal │ │ │ │ │ ├── IntervalPrimary.java │ │ │ │ │ ├── Literal.java │ │ │ │ │ ├── LiteralBitField.java │ │ │ │ │ ├── LiteralBoolean.java │ │ │ │ │ ├── LiteralHexadecimal.java │ │ │ │ │ ├── LiteralNull.java │ │ │ │ │ ├── LiteralNumber.java │ │ │ │ │ └── LiteralString.java │ │ │ ├── string │ │ │ │ ├── LikeExpression.java │ │ │ │ ├── RegexpExpression.java │ │ │ │ └── SoundsLikeExpression.java │ │ │ └── type │ │ │ │ ├── CastBinaryExpression.java │ │ │ │ └── CollateExpression.java │ │ ├── fragment │ │ │ ├── GroupBy.java │ │ │ ├── Limit.java │ │ │ ├── OrderBy.java │ │ │ ├── SortOrder.java │ │ │ ├── VariableScope.java │ │ │ ├── ddl │ │ │ │ ├── ColumnDefinition.java │ │ │ │ ├── TableOptions.java │ │ │ │ ├── datatype │ │ │ │ │ └── DataType.java │ │ │ │ └── index │ │ │ │ │ ├── IndexColumnName.java │ │ │ │ │ ├── IndexDefinition.java │ │ │ │ │ └── IndexOption.java │ │ │ └── tableref │ │ │ │ ├── AliasableTableReference.java │ │ │ │ ├── Dual.java │ │ │ │ ├── IndexHint.java │ │ │ │ ├── InnerJoin.java │ │ │ │ ├── NaturalJoin.java │ │ │ │ ├── OuterJoin.java │ │ │ │ ├── StraightJoin.java │ │ │ │ ├── SubqueryFactor.java │ │ │ │ ├── TableRefFactor.java │ │ │ │ ├── TableReference.java │ │ │ │ └── TableReferences.java │ │ └── stmt │ │ │ ├── SQLStatement.java │ │ │ ├── dal │ │ │ ├── DALSetCharacterSetStatement.java │ │ │ ├── DALSetNamesStatement.java │ │ │ ├── DALSetStatement.java │ │ │ ├── DALShowStatement.java │ │ │ ├── ShowAuthors.java │ │ │ ├── ShowBinLogEvent.java │ │ │ ├── ShowBinaryLog.java │ │ │ ├── ShowBroadcasts.java │ │ │ ├── ShowCharaterSet.java │ │ │ ├── ShowCollation.java │ │ │ ├── ShowColumns.java │ │ │ ├── ShowContributors.java │ │ │ ├── ShowCreate.java │ │ │ ├── ShowDatabases.java │ │ │ ├── ShowDatasources.java │ │ │ ├── ShowEngine.java │ │ │ ├── ShowEngines.java │ │ │ ├── ShowErrors.java │ │ │ ├── ShowEvents.java │ │ │ ├── ShowFunctionCode.java │ │ │ ├── ShowFunctionStatus.java │ │ │ ├── ShowGrants.java │ │ │ ├── ShowIndex.java │ │ │ ├── ShowMasterStatus.java │ │ │ ├── ShowOpenTables.java │ │ │ ├── ShowPartitions.java │ │ │ ├── ShowPlugins.java │ │ │ ├── ShowPrivileges.java │ │ │ ├── ShowProcedureCode.java │ │ │ ├── ShowProcedureStatus.java │ │ │ ├── ShowProcesslist.java │ │ │ ├── ShowProfile.java │ │ │ ├── ShowProfiles.java │ │ │ ├── ShowRule.java │ │ │ ├── ShowSequences.java │ │ │ ├── ShowSlaveHosts.java │ │ │ ├── ShowSlaveStatus.java │ │ │ ├── ShowStatus.java │ │ │ ├── ShowTableStatus.java │ │ │ ├── ShowTables.java │ │ │ ├── ShowTopology.java │ │ │ ├── ShowTrace.java │ │ │ ├── ShowTriggers.java │ │ │ ├── ShowVariables.java │ │ │ ├── ShowWarnings.java │ │ │ └── TddlShow.java │ │ │ ├── ddl │ │ │ ├── CreateSequence.java │ │ │ ├── DDLAlterTableStatement.java │ │ │ ├── DDLCreateIndexStatement.java │ │ │ ├── DDLCreateTableStatement.java │ │ │ ├── DDLDropIndexStatement.java │ │ │ ├── DDLDropTableStatement.java │ │ │ ├── DDLRenameTableStatement.java │ │ │ ├── DDLStatement.java │ │ │ ├── DDLTruncateStatement.java │ │ │ └── DescTableStatement.java │ │ │ ├── dml │ │ │ ├── DMLCallStatement.java │ │ │ ├── DMLDeleteStatement.java │ │ │ ├── DMLInsertReplaceStatement.java │ │ │ ├── DMLInsertStatement.java │ │ │ ├── DMLLoadStatement.java │ │ │ ├── DMLQueryStatement.java │ │ │ ├── DMLReplaceStatement.java │ │ │ ├── DMLSelectStatement.java │ │ │ ├── DMLSelectUnionStatement.java │ │ │ ├── DMLStatement.java │ │ │ └── DMLUpdateStatement.java │ │ │ ├── extension │ │ │ ├── ExtDDLCreatePolicy.java │ │ │ └── ExtDDLDropPolicy.java │ │ │ ├── mts │ │ │ ├── MTSReleaseStatement.java │ │ │ ├── MTSRollbackStatement.java │ │ │ ├── MTSSavepointStatement.java │ │ │ └── MTSSetTransactionStatement.java │ │ │ └── reload │ │ │ └── ReloadSchema.java │ │ ├── recognizer │ │ ├── SQLParserDelegate.java │ │ └── mysql │ │ │ ├── MySQLFunctionManager.java │ │ │ ├── MySQLToken.java │ │ │ ├── lexer │ │ │ ├── MySQLKeywords.java │ │ │ ├── MySQLLexer.java │ │ │ └── SQLLexer.java │ │ │ └── syntax │ │ │ ├── MySQLDALParser.java │ │ │ ├── MySQLDDLParser.java │ │ │ ├── MySQLDMLCallParser.java │ │ │ ├── MySQLDMLDeleteParser.java │ │ │ ├── MySQLDMLInsertParser.java │ │ │ ├── MySQLDMLInsertReplaceParser.java │ │ │ ├── MySQLDMLLoadParser.java │ │ │ ├── MySQLDMLParser.java │ │ │ ├── MySQLDMLReplaceParser.java │ │ │ ├── MySQLDMLSelectParser.java │ │ │ ├── MySQLDMLUpdateParser.java │ │ │ ├── MySQLExprParser.java │ │ │ ├── MySQLMTSParser.java │ │ │ ├── MySQLParser.java │ │ │ └── ReloadParser.java │ │ ├── util │ │ ├── ArrayUtil.java │ │ ├── BinaryOperandCalculator.java │ │ ├── CharTypes.java │ │ ├── ExprEvalUtils.java │ │ ├── ListUtil.java │ │ ├── Pair.java │ │ ├── PairUtil.java │ │ ├── ParseString.java │ │ ├── ParseUtil.java │ │ └── UnaryOperandCalculator.java │ │ └── visitor │ │ ├── EmptySQLASTVisitor.java │ │ ├── MySQLOutputASTVisitor.java │ │ └── SQLASTVisitor.java │ └── test │ └── java │ └── com │ └── alibaba │ └── cobar │ └── parser │ ├── Performance.java │ ├── ast │ ├── expression │ │ └── LiteralHexadecimalTest.java │ └── stmt │ │ └── StubDMLSelectStatementCreater.java │ ├── codegen │ ├── Main.java │ └── Solo.java │ ├── recognizer │ ├── SQLParserDelegateTest.java │ ├── SQLParserPerformanceMain.java │ └── mysql │ │ ├── lexer │ │ └── MySQLLexerTest.java │ │ └── syntax │ │ ├── AbstractSyntaxTest.java │ │ ├── MySQLDALParserTest.java │ │ ├── MySQLDDLParserTest.java │ │ ├── MySQLDMLCallParserTest.java │ │ ├── MySQLDMLDeleteParserTest.java │ │ ├── MySQLDMLInsertParserTest.java │ │ ├── MySQLDMLLoadParserTest.java │ │ ├── MySQLDMLParserTest.java │ │ ├── MySQLDMLReplaceParserTest.java │ │ ├── MySQLDMLSelectParserTest.java │ │ ├── MySQLDMLUpdateParserTest.java │ │ ├── MySQLExprParserTest.java │ │ ├── MySQLMTSParserTest.java │ │ └── SoloParser.java │ └── util │ └── PairUtilTest.java ├── tddl-qatest ├── pom.xml └── src │ └── test │ ├── java │ └── com │ │ └── taobao │ │ └── tddl │ │ ├── executor │ │ └── cursor │ │ │ └── test │ │ │ ├── DistinctCursorTest.java │ │ │ ├── LimitCursorTest.java │ │ │ ├── MergeCursorTest.java │ │ │ ├── MergeSortedCursorTest.java │ │ │ ├── MockArrayCursorTest.java │ │ │ ├── SortMergeCursorTest.java │ │ │ ├── TempTableCursorTest.java │ │ │ └── TempTableSortCursorTest.java │ │ ├── hint │ │ └── test │ │ │ └── HintExecuteTest.java │ │ ├── matrix │ │ └── test │ │ │ ├── ConfigHolderIntegeration.java │ │ │ ├── SchemaManagerTest.java │ │ │ ├── TDatasourceTest.java │ │ │ ├── TopologyHandlerTest.java │ │ │ └── TransactionTest.java │ │ ├── optimizer │ │ ├── BaseSqlOptimizerTest.java │ │ └── SqlSelectSingleOptimizerTest.java │ │ └── qatest │ │ ├── BaseAtomGroupTestCase.java │ │ ├── BaseMatrixTestCase.java │ │ ├── BaseTemplateTestCase.java │ │ ├── BaseTestCase.java │ │ ├── ExecuteTableName.java │ │ ├── atom │ │ ├── AtomBaseCRUDTest.java │ │ ├── AtomDynamicChangeAppTest.java │ │ ├── AtomDynamicChangeGlobalTest.java │ │ ├── AtomDynamicChangePswTest.java │ │ ├── AtomReadRestraintTest.java │ │ ├── AtomTestCase.java │ │ ├── AtomThreadRestraintTest.java │ │ ├── AtomWriteRestraintTest.java │ │ └── ParametersException.java │ │ ├── group │ │ ├── ChangeMasterSlaveTest.java │ │ ├── GroupBaseCRUDTest.java │ │ ├── GroupGroupIndexTest.java │ │ ├── GroupProcedureTest.java │ │ ├── GroupRetryExecuteTest.java │ │ ├── GroupRouteHelperTest.java │ │ ├── GroupTestCase.java │ │ ├── GroupTransNormalTest.java │ │ └── selector │ │ │ ├── GroupSelectDbUseRwTest.java │ │ │ ├── GroupSelectDbUseWeightTest.java │ │ │ ├── GroupUpdateDbUseWeightTest.java │ │ │ └── QueryFromSlaveInTransactionTest.java │ │ ├── matrix │ │ ├── basecrud │ │ │ ├── BatchInsertTest.java │ │ │ ├── BatchUpdateTest.java │ │ │ ├── DeleteTest.java │ │ │ ├── InsertDuplicatedTest.java │ │ │ ├── InsertTest.java │ │ │ ├── LoadDataTest.java │ │ │ ├── ReplaceTest.java │ │ │ ├── SetTypeTest.java │ │ │ └── UpdateTest.java │ │ ├── hint │ │ │ ├── ConditionHintTest.java │ │ │ ├── DirectHintTest.java │ │ │ ├── GroupHintTest.java │ │ │ └── RouteHelperHintTest.java │ │ ├── ibatis │ │ │ ├── IbatisTypeTest.java │ │ │ └── TddlIbatisTest.java │ │ ├── join │ │ │ ├── FullJoinTest.java │ │ │ ├── InnerJoinTest.java │ │ │ ├── InnerJoinWithMutilDataTest.java │ │ │ ├── JoinAndTest.java │ │ │ ├── JoinTest.java │ │ │ ├── JoinWithFunctionTest.java │ │ │ ├── LeftJoinTest.java │ │ │ └── RightJoinTest.java │ │ ├── select │ │ │ ├── SelectAliasTest.java │ │ │ ├── SelectAmountLimit.java │ │ │ ├── SelectCacheTest.java │ │ │ ├── SelectComplexConditionTest.java │ │ │ ├── SelectMinusTest.java │ │ │ ├── SelectRemoveDuplicatesTest.java │ │ │ ├── SelectSubQueryTest.java │ │ │ ├── SelectTest.java │ │ │ ├── SelectWithConditionTest.java │ │ │ ├── SelectWithFilterTest.java │ │ │ ├── SelectWithLike.java │ │ │ ├── SelectWithNoData.java │ │ │ ├── SelectWithNullTest.java │ │ │ ├── SelectWithOperatorTest.java │ │ │ ├── SelectWithSubqueryTest.java │ │ │ └── function │ │ │ │ ├── FunctionTest.java │ │ │ │ ├── SelectCharacterFunctionTest.java │ │ │ │ ├── SelectControlFunction.java │ │ │ │ ├── SelectDateFunctionTest.java │ │ │ │ ├── SelectWithFunctionOperationTest.java │ │ │ │ ├── SelectWithMathFunctionTest.java │ │ │ │ ├── StringFunctionTest.java │ │ │ │ └── aggregate │ │ │ │ └── AggregateFunctionTest.java │ │ ├── set │ │ │ ├── SetCommandTest.java │ │ │ └── SetSqlModeTest.java │ │ ├── show │ │ │ └── ShowTest.java │ │ ├── template │ │ │ ├── ConnectionTest.java │ │ │ ├── JDBCTemplateTest.java │ │ │ └── TransactionTemplateTest.java │ │ └── transaction │ │ │ ├── AllowReadTranscationSingleTableTest.java │ │ │ ├── TransactionMultiGroupTest.java │ │ │ ├── TransactionMultiTableTest.java │ │ │ └── TranscationSingleTableTest.java │ │ ├── misc │ │ └── MultiIntegration.java │ │ ├── sequence │ │ ├── DefaultSequenceTest.java │ │ ├── GroupSequenceTest.java │ │ └── SequenceDDLTest.java │ │ └── util │ │ ├── DateUtil.java │ │ ├── EclipseParameterized.java │ │ ├── FixDataSource.java │ │ ├── FixDataSourceImpl.java │ │ ├── LoadPropsUtil.java │ │ ├── NormalTblRow.java │ │ ├── PrepareData.java │ │ ├── StaticPasswordCoder.java │ │ ├── TddlTestDO.java │ │ ├── Util.java │ │ └── Validator.java │ └── resources │ ├── META-INF │ └── services │ │ └── com.taobao.tddl.atom.securety.TPasswordCoder │ ├── atom │ ├── passwd.properties │ ├── qatest_normal_0 │ │ ├── app.properties │ │ └── global.properties │ ├── qatest_normal_0_bac │ │ ├── app.properties │ │ └── global.properties │ ├── qatest_normal_1 │ │ ├── app.properties │ │ └── global.properties │ ├── qatest_normal_1_bac │ │ ├── app.properties │ │ └── global.properties │ ├── qatest_normal_2 │ │ ├── app.properties │ │ └── global.properties │ ├── qatest_normal_2_bac │ │ ├── app.properties │ │ └── global.properties │ ├── qatest_normal_monitor │ │ ├── app.properties │ │ └── global.properties │ ├── tddl_config.properties │ └── tddl_qatest_db.xml │ ├── db_type.properties │ ├── group │ ├── spring-context.xml │ ├── tddl_group_0.properties │ ├── tddl_group_1.properties │ ├── tddl_group_2.properties │ └── tddl_group_complex.properties │ ├── ibatis │ ├── sqlmap_config.xml │ └── test_sqlmap.xml │ ├── logback.xml │ ├── matrix │ ├── mysql_rule.xml │ ├── mysql_schema.xml │ ├── mysql_sequence.xml │ ├── server_topology.xml │ └── tddl_dbgroups.properties │ ├── readme.txt │ ├── script │ └── oceanbase.sql │ ├── sequence │ ├── spring_context_default_sequence.xml │ └── spring_context_group_sequence.xml │ ├── server.properties │ ├── spring │ ├── config.properties │ ├── spring_context.xml │ └── spring_sample.xml │ ├── test_matrix.xml │ ├── test_matrix_without_group_config.xml │ ├── test_rule.xml │ └── test_schema.xml ├── tddl-repo-bdb ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── taobao │ │ └── tddl │ │ └── repo │ │ └── bdb │ │ ├── executor │ │ ├── BDBGroupExecutor.java │ │ ├── CommonExceptionSorter.java │ │ ├── CommonResourceSelector.java │ │ ├── ExceptionErrorCodeUtils.java │ │ ├── ExceptionSorter.java │ │ ├── MasterExceptionSorter.java │ │ ├── MasterResourceSelector.java │ │ ├── ResourceSelector.java │ │ ├── SlaveExceptionSorter.java │ │ └── SlaveResourceSelector.java │ │ └── spi │ │ ├── BDBConfig.java │ │ ├── CleanerManage.java │ │ ├── CommandHandlerFactoryBDBImpl.java │ │ ├── CursorFactoryBDBImp.java │ │ ├── IndexKeyCreator.java │ │ ├── JE_Cursor.java │ │ ├── JE_HA_Repository.java │ │ ├── JE_Repository.java │ │ ├── JE_Table.java │ │ ├── JE_TempTable.java │ │ ├── JE_Transaction.java │ │ ├── RepositoryFactoryBDBImp.java │ │ ├── RowSetKVPairImp.java │ │ ├── SecondaryKeyGen.java │ │ └── TestBDB.java │ └── resources │ └── META-INF │ └── tddl │ └── bdb_je │ └── com.taobao.tddl.executor.spi.IRepositoryFactory ├── tddl-repo-demo ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── taobao │ │ └── tddl │ │ └── repo │ │ └── demo │ │ ├── cursor │ │ ├── BlockNestedtLoopCursorDemo.java │ │ ├── DemoCursor.java │ │ └── DemoUtil.java │ │ ├── executor │ │ └── DemoGroupExecutor.java │ │ └── spi │ │ ├── CommandExecutorFactoryDemoImp.java │ │ ├── CursorFactoryDemoImp.java │ │ ├── DemoRepository.java │ │ ├── DemoTable.java │ │ ├── DemoTransaction.java │ │ └── RepositoryFactoryDemoImp.java │ └── resources │ └── META-INF │ └── tddl │ └── demo │ └── com.taobao.tddl.executor.spi.IRepositoryFactory ├── tddl-repo-hbase ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── taobao │ │ ├── tddl │ │ └── repo │ │ │ └── hbase │ │ │ ├── config │ │ │ └── TablePhysicalInfoParser.java │ │ │ ├── cursor │ │ │ ├── ExtremeValue.java │ │ │ ├── HbConstant.java │ │ │ ├── HbCursor.java │ │ │ ├── HbRangeCursor.java │ │ │ ├── HbResultConvertor.java │ │ │ ├── MapRowSet.java │ │ │ ├── MaxValue.java │ │ │ ├── MinValue.java │ │ │ └── RangeMakerForHBase.java │ │ │ ├── executor │ │ │ └── HBaseGroupExecutor.java │ │ │ ├── handler │ │ │ ├── HbDeleteHandler.java │ │ │ ├── HbInsertHandler.java │ │ │ ├── HbQueryHandler.java │ │ │ ├── HbReplaceHandler.java │ │ │ └── HbUpdateHandler.java │ │ │ ├── model │ │ │ └── HbData.java │ │ │ ├── operator │ │ │ ├── HbFactory.java │ │ │ └── HbOperate.java │ │ │ └── spi │ │ │ ├── HbCommandExecutorFactory.java │ │ │ ├── HbCursorFactory.java │ │ │ ├── HbRepository.java │ │ │ ├── HbTable.java │ │ │ ├── HbTransaction.java │ │ │ └── RepositoryFactoryHbImp.java │ │ └── ustore │ │ └── repo │ │ └── hbase │ │ ├── AbstractRowCoder.java │ │ ├── DefaultColumnCoder.java │ │ ├── RowCoderSample.java │ │ ├── RowCoderSample2.java │ │ ├── RowCoderSample3.java │ │ ├── RowkeyCoder.java │ │ ├── RowkeyCoderSplitBinaryImpl.java │ │ ├── RowkeyCoderSplitImpl.java │ │ ├── TablePhysicalSchema.java │ │ └── cursor │ │ └── BytesUtils.java │ └── resources │ └── META-INF │ └── tddl │ └── hbase_client │ └── com.taobao.tddl.executor.spi.IRepositoryFactory ├── tddl-repo-mysql ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── taobao │ │ └── tddl │ │ └── repo │ │ └── mysql │ │ ├── MysqlTableMeta.java │ │ ├── MysqlTableMetaManager.java │ │ ├── MysqlTableMetaParser.java │ │ ├── common │ │ ├── ResultSetAutoCloseConnection.java │ │ └── ResultSetWrapper.java │ │ ├── cursor │ │ ├── ResultSetCursor.java │ │ └── SchematicMyCursor.java │ │ ├── executor │ │ └── TddlGroupExecutor.java │ │ ├── handler │ │ ├── CommandHandlerFactoryMyImp.java │ │ ├── DeleteMyHandler.java │ │ ├── ExplainMyHandler.java │ │ ├── InsertMyHandler.java │ │ ├── PutMyHandlerCommon.java │ │ ├── QueryMyHandler.java │ │ ├── ReplaceMyHandler.java │ │ ├── ShowCreateTableMyHandler.java │ │ ├── ShowDirectMyHandler.java │ │ ├── ShowTablesMyHandler.java │ │ └── UpdateMyHandler.java │ │ ├── spi │ │ ├── CursorFactoryMyImpl.java │ │ ├── DatasourceMySQLImplement.java │ │ ├── GeneralQueryHandler.java │ │ ├── My_Convertor.java │ │ ├── My_Cursor.java │ │ ├── My_JdbcHandler.java │ │ ├── My_Repository.java │ │ ├── My_Table.java │ │ ├── RepositoryFactoryMyImp.java │ │ └── UpdateResultWrapper.java │ │ └── utils │ │ └── MysqlRepoUtils.java │ └── resources │ └── META-INF │ └── tddl │ └── mysql_jdbc │ ├── com.taobao.tddl.executor.spi.IRepositoryFactory │ └── com.taobao.tddl.optimizer.config.table.RepoSchemaManager ├── tddl-repo-oceanbase ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── taobao │ │ └── tddl │ │ └── repo │ │ └── oceanbase │ │ ├── OBConnectionWrapper.java │ │ ├── OBDataSourceWrapper.java │ │ ├── ObTableMetaManager.java │ │ ├── executor │ │ └── ObGroupExecutor.java │ │ ├── handler │ │ ├── ExplainObHandler.java │ │ └── ObCommandHandlerFactory.java │ │ └── spi │ │ ├── ObCursorFactory.java │ │ ├── ObDatasourceGetter.java │ │ ├── ObRepositoryFactory.java │ │ ├── Ob_JdbcHandler.java │ │ ├── Ob_Repository.java │ │ ├── Ob_Table.java │ │ └── Ob_Transaction.java │ └── resources │ └── META-INF │ └── tddl │ └── oceanbase_jdbc │ ├── com.taobao.tddl.executor.spi.IRepositoryFactory │ └── com.taobao.tddl.optimizer.config.table.RepoSchemaManager ├── tddl-rule ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── taobao │ │ └── tddl │ │ └── rule │ │ ├── Rule.java │ │ ├── RuleCompatibleHelper.java │ │ ├── TableRule.java │ │ ├── TddlRule.java │ │ ├── TddlRuleConfig.java │ │ ├── TddlTableRule.java │ │ ├── VirtualTableRoot.java │ │ ├── VirtualTableRule.java │ │ ├── VirtualTableRuleMatcher.java │ │ ├── VirtualTableSupport.java │ │ ├── config │ │ └── RuleChangeListener.java │ │ ├── enumerator │ │ ├── EnumerationInterruptException.java │ │ ├── Enumerator.java │ │ ├── EnumeratorImp.java │ │ ├── EnumeratorUtils.java │ │ └── handler │ │ │ ├── BigIntegerPartDiscontinousRangeEnumerator.java │ │ │ ├── CloseIntervalFieldsEnumeratorHandler.java │ │ │ ├── DatePartDiscontinousRangeEnumerator.java │ │ │ ├── DefaultEnumerator.java │ │ │ ├── IntegerPartDiscontinousRangeEnumerator.java │ │ │ ├── LongPartDiscontinousRangeEnumerator.java │ │ │ ├── NumberPartDiscontinousRangeEnumerator.java │ │ │ └── PartDiscontinousRangeEnumerator.java │ │ ├── exception │ │ ├── RouteCompareDiffException.java │ │ └── TddlRuleException.java │ │ ├── impl │ │ ├── DbVirtualNodeRule.java │ │ ├── EnumerativeRule.java │ │ ├── ExpressionRule.java │ │ ├── GroovyRule.java │ │ ├── TableVirtualNodeRule.java │ │ ├── VirtualNodeGroovyRule.java │ │ ├── WrappedGroovyRule.java │ │ └── groovy │ │ │ ├── ExtraParameterContext.java │ │ │ ├── GroovyStaticMethod.java │ │ │ └── ShardingFunction.java │ │ ├── model │ │ ├── AdvancedParameter.java │ │ ├── DateEnumerationParameter.java │ │ ├── Field.java │ │ ├── MatcherResult.java │ │ └── TargetDB.java │ │ ├── utils │ │ ├── AdvancedParameterParser.java │ │ ├── ComparativeStringAnalyser.java │ │ ├── MatchResultCompare.java │ │ ├── RuleUtils.java │ │ ├── SimpleNamedMessageFormat.java │ │ ├── StringXmlApplicationContext.java │ │ └── sample │ │ │ ├── Samples.java │ │ │ └── SamplesCtx.java │ │ └── virtualnode │ │ ├── DBTableMap.java │ │ ├── PartitionFunction.java │ │ ├── TableSlotMap.java │ │ ├── VirtualNodeMap.java │ │ └── WrappedLogic.java │ └── test │ ├── java │ └── com │ │ └── taobao │ │ └── tddl │ │ └── rule │ │ ├── BaseRuleTest.java │ │ ├── GroovyRuleTest.java │ │ ├── LocalRuleTest.java │ │ ├── RemoteRuleIntegration.java │ │ ├── RuleCompatibleHelperTest.java │ │ ├── TestUtils.java │ │ ├── app │ │ └── EagleEyeRuleTest.java │ │ ├── enumerator │ │ ├── BigDecimalPartDiscontinousRangeEnumeratorUnitTest.java │ │ ├── DatePartDiscontinousRangeEnumeratorUnitTest.java │ │ ├── DatePartDiscontinousRangeEnumeratorYearUnitTest.java │ │ ├── DefaultEnumeratorUnitTest.java │ │ ├── IntegerPartDiscontinousRangeEnumeratorUnitTest.java │ │ ├── LongPartDiscontinousRangeEnumeratorUnitTest.java │ │ └── PartDiscontinousRangeEnumeratorMonthUnitTest.java │ │ ├── groovy │ │ ├── AppUtils.java │ │ ├── ExtraPackagesTest.java │ │ ├── ProfileFactory.java │ │ └── SimpleProfile.java │ │ ├── utils │ │ ├── AdvancedParameterParserTest.java │ │ └── ComparativeStringAnalyserUnitTest.java │ │ └── virtualnode │ │ ├── DbSlotMapTest.java │ │ ├── TableSlotMapTest.java │ │ └── TddlVirtualRuleTest.java │ └── resources │ ├── app │ └── eagleEye │ │ ├── spring-context.xml │ │ └── tddl-rule.xml │ ├── compatible │ ├── interact-spring-context.xml │ └── le-spring-context.xml │ ├── groovy │ ├── spring-context.xml │ └── tddl-rule.xml │ ├── local │ ├── spring-context.xml │ └── tddl-rule.xml │ ├── remote │ └── spring-context.xml │ └── virtualnode │ ├── spring-context.xml │ ├── tddl-rule-format.xml │ └── tddl-rule.xml ├── tddl-sample ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ ├── ali │ │ └── luna │ │ │ └── mortred │ │ │ └── tddl │ │ │ └── AutoDetectedVirtualTableRoot.java │ │ ├── alibaba │ │ ├── asc │ │ │ └── xuanwu │ │ │ │ └── framework │ │ │ │ └── common │ │ │ │ └── tddl │ │ │ │ └── util │ │ │ │ └── TddlPartition.java │ │ ├── china │ │ │ └── dw │ │ │ │ └── dataopen │ │ │ │ └── andor │ │ │ │ ├── columncoder │ │ │ │ └── Date10ColumnCoder.java │ │ │ │ └── rowcoder │ │ │ │ ├── BoltRowCoder.java │ │ │ │ └── IPageRowCoder.java │ │ └── icbu │ │ │ └── da │ │ │ └── tddl │ │ │ └── util │ │ │ └── B2bIcbuDaPartitionMethod.java │ │ ├── taobao │ │ └── tddl │ │ │ ├── client │ │ │ └── user │ │ │ │ └── method │ │ │ │ └── B2BDWCBUPartitionMethod.java │ │ │ ├── sample │ │ │ ├── AndorShowSample.java │ │ │ ├── BolinSample.java │ │ │ ├── CBU_IPAGE_HBASE.java │ │ │ ├── CbuGoAppSample.java │ │ │ ├── CopyOfDynamicConfigSample.java │ │ │ ├── DemoRepoSample.java │ │ │ ├── DoudoucaicaiSample.java │ │ │ ├── DruidSample.java │ │ │ ├── DumpSample.java │ │ │ ├── DynamicConfigSample.java │ │ │ ├── EagleEyeMptestSample.java │ │ │ ├── EagleEyeSample.java │ │ │ ├── GongfanSample.java │ │ │ ├── GroupSample.java │ │ │ ├── IOSEmojiUtil.java │ │ │ ├── InsightLifeSample.java │ │ │ ├── JDBCTest.java │ │ │ ├── JuehuanSample.java │ │ │ ├── JunyuSample.java │ │ │ ├── LeiwenSample.java │ │ │ ├── LocalConfigSample.java │ │ │ ├── LushaoqianSample.java │ │ │ ├── Main.java │ │ │ ├── MaxTest.java │ │ │ ├── MingyaSample.java │ │ │ ├── NiujiangSample.java │ │ │ ├── ObSample.java │ │ │ ├── OrderBySample.java │ │ │ ├── ParserSample.java │ │ │ ├── ScamppangSample.java │ │ │ ├── SequenceTest.java │ │ │ ├── SimashaonianSample.java │ │ │ ├── Simba2Sample.java │ │ │ ├── TianxinSample.java │ │ │ ├── WangQiSample.java │ │ │ ├── WeidaSample.java │ │ │ ├── XihuiSample.java │ │ │ ├── XuezhuSample.java │ │ │ ├── XuqiangSample.java │ │ │ ├── XuyunSample.java │ │ │ ├── YongchuanSample.java │ │ │ ├── YongguangSample.java │ │ │ ├── YuxiaoSample.java │ │ │ ├── ZaisiSample.java │ │ │ ├── ZhuochengSample.java │ │ │ ├── mPXSQSample.java │ │ │ └── xxxSample.java │ │ │ └── util │ │ │ ├── SqlFileUtil.java │ │ │ └── dwuc_tddl_rule.xml │ │ └── yunos │ │ └── lifecenter │ │ └── util │ │ └── TabUtil.java │ └── resources │ ├── DAILY_SOLAR_MERCURY_APP_rule.xml │ ├── boling-rule.xml │ ├── config.properties │ ├── demo_repo_schema.xml │ ├── dwuc_tddl_rule.xml │ ├── eagleeye_rule.xml │ ├── gongfan.xml │ ├── juehuan.xml │ ├── junyu.xml │ ├── log4j.properties │ ├── logback.xml │ ├── lushaoqian.xml │ ├── rule.xml │ ├── sample_create_table.txt │ ├── sample_rule.xml │ ├── sample_topology.xml │ ├── sicui.xml │ ├── sql │ ├── doudoucaicai1.sql │ ├── replace.txt │ ├── solar_adgroup_list.sql │ └── subway_adgroup_list.sql │ ├── tddl-rule-dps-nonmysql.xml │ ├── tddl-rule-dps-simba2-mysql.xml │ ├── tddl-rule-dps-subway-mysql.xml │ ├── tddl-rule.properties │ ├── tddl-simba2-rule-spring.xml │ ├── tddl-simba2.properties │ ├── tddl-topology-dps.xml │ ├── test_schema.xml │ ├── tianxin.xml │ ├── topology_DEV_SIMBA2_MYSQL.xml │ ├── topology_DEV_SUBWAY_MYSQL.xml │ ├── wangqi-rule.xml │ ├── weida.xml │ ├── xuezhu.xml │ ├── xuyun.xml │ └── zhuocheng.xml ├── tddl-sequence ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── taobao │ │ └── tddl │ │ └── client │ │ └── sequence │ │ ├── RoutedSequence.java │ │ ├── Sequence.java │ │ ├── SequenceDao.java │ │ ├── SequenceRange.java │ │ ├── exception │ │ └── SequenceException.java │ │ ├── impl │ │ ├── DefaultSequence.java │ │ ├── DefaultSequenceDao.java │ │ ├── GroupSequence.java │ │ ├── GroupSequenceDao.java │ │ └── UnitGroupSequenceDao.java │ │ └── util │ │ └── RandomSequence.java │ └── test │ └── java │ └── com │ └── taobao │ ├── eagleeye │ ├── PerfGroupSequenceDaoTest.java │ ├── PerfUnitGroupSequenceExtendTest.java │ └── PerfUnitGroupSequenceStartEndUnitTest.java │ └── tddl │ └── client │ └── sequence │ ├── impl │ ├── DefaultSequcenceTest.java │ ├── DefaultSequenceDaoTest.java │ ├── GroupSequenceDaoTest.java │ ├── GroupSequenceTest.java │ ├── UnitGroupSequenceDaoUnitTest.java │ ├── UnitGroupSequenceExtendTest.java │ └── UnitGroupSequenceStartEndUnitTest.java │ └── util │ ├── RandomBalanceTest.java │ └── RandomSequenceTest.java └── tddl-server ├── pom.xml └── src ├── main ├── assembly │ ├── dev.xml │ └── release.xml ├── java │ └── com │ │ ├── alibaba │ │ └── cobar │ │ │ ├── CobarAlarms.java │ │ │ ├── CobarConfig.java │ │ │ ├── CobarPrivileges.java │ │ │ ├── CobarServer.java │ │ │ ├── config │ │ │ ├── ConfigException.java │ │ │ ├── IUserHostDefination.java │ │ │ ├── QuarantineConfig.java │ │ │ ├── SchemaConfig.java │ │ │ ├── SystemConfig.java │ │ │ ├── UserConfig.java │ │ │ └── loader │ │ │ │ ├── AppLoader.java │ │ │ │ ├── ClusterLoader.java │ │ │ │ └── ServerLoader.java │ │ │ ├── manager │ │ │ ├── ManagerConnection.java │ │ │ ├── ManagerConnectionFactory.java │ │ │ ├── ManagerQueryHandler.java │ │ │ ├── handler │ │ │ │ ├── ClearHandler.java │ │ │ │ ├── KillQueryHandler.java │ │ │ │ ├── SelectHandler.java │ │ │ │ └── ShowHandler.java │ │ │ ├── parser │ │ │ │ ├── ManagerParse.java │ │ │ │ ├── ManagerParseClear.java │ │ │ │ ├── ManagerParseKill.java │ │ │ │ ├── ManagerParseReload.java │ │ │ │ ├── ManagerParseRollback.java │ │ │ │ ├── ManagerParseSelect.java │ │ │ │ ├── ManagerParseShow.java │ │ │ │ ├── ManagerParseStop.java │ │ │ │ └── ManagerParseSwitch.java │ │ │ └── response │ │ │ │ ├── KillConnection.java │ │ │ │ ├── MergeHandler.java │ │ │ │ ├── Offline.java │ │ │ │ ├── Online.java │ │ │ │ ├── ReloadUser.java │ │ │ │ ├── RollbackUser.java │ │ │ │ ├── SelectSessionAutoIncrement.java │ │ │ │ ├── SelectSessionTxIsolation.java │ │ │ │ ├── SelectVersionComment.java │ │ │ │ ├── ShowCollation.java │ │ │ │ ├── ShowCommand.java │ │ │ │ ├── ShowConnection.java │ │ │ │ ├── ShowConnectionSQL.java │ │ │ │ ├── ShowDataSource.java │ │ │ │ ├── ShowDatabase.java │ │ │ │ ├── ShowHelp.java │ │ │ │ ├── ShowParser.java │ │ │ │ ├── ShowProcessor.java │ │ │ │ ├── ShowRouter.java │ │ │ │ ├── ShowSQL.java │ │ │ │ ├── ShowSQLDetail.java │ │ │ │ ├── ShowSQLExecute.java │ │ │ │ ├── ShowServer.java │ │ │ │ ├── ShowThreadPool.java │ │ │ │ ├── ShowTime.java │ │ │ │ ├── ShowVariables.java │ │ │ │ └── ShowVersion.java │ │ │ └── server │ │ │ ├── ServerConnection.java │ │ │ ├── ServerConnectionFactory.java │ │ │ ├── ServerQueryHandler.java │ │ │ ├── exception │ │ │ ├── ErrorPacketException.java │ │ │ ├── HeartbeatException.java │ │ │ ├── UnknownCharsetException.java │ │ │ ├── UnknownDataNodeException.java │ │ │ ├── UnknownPacketException.java │ │ │ └── UnknownTxIsolationException.java │ │ │ ├── executor │ │ │ └── utils │ │ │ │ ├── MysqlDefs.java │ │ │ │ └── ResultSetUtil.java │ │ │ ├── handler │ │ │ ├── BeginHandler.java │ │ │ ├── CommitHandler.java │ │ │ ├── ExplainHandler.java │ │ │ ├── LoadHandler.java │ │ │ ├── RollbackHandler.java │ │ │ ├── SavepointHandler.java │ │ │ ├── SelectHandler.java │ │ │ ├── SetHandler.java │ │ │ ├── ShowHandler.java │ │ │ ├── StartHandler.java │ │ │ └── UseHandler.java │ │ │ ├── parser │ │ │ ├── ServerParse.java │ │ │ ├── ServerParseSelect.java │ │ │ ├── ServerParseSet.java │ │ │ ├── ServerParseShow.java │ │ │ └── ServerParseStart.java │ │ │ ├── response │ │ │ ├── CharacterSet.java │ │ │ ├── Ping.java │ │ │ ├── SelectDatabase.java │ │ │ ├── SelectIdentity.java │ │ │ ├── SelectLastInsertId.java │ │ │ ├── SelectUser.java │ │ │ ├── SelectVersion.java │ │ │ ├── SelectVersionComment.java │ │ │ ├── ShowCobarStatus.java │ │ │ ├── ShowConnection.java │ │ │ ├── ShowDatabases.java │ │ │ ├── ShowPhysicalSQLSlow.java │ │ │ ├── ShowSQLSlow.java │ │ │ └── SqlMode.java │ │ │ ├── session │ │ │ └── ServerSession.java │ │ │ ├── statistics │ │ │ ├── DataSourceCount.java │ │ │ ├── ParserCount.java │ │ │ └── RouterCount.java │ │ │ ├── ugly │ │ │ └── hint │ │ │ │ ├── CobarHint.java │ │ │ │ ├── DataNodeHintParser.java │ │ │ │ ├── HintParser.java │ │ │ │ ├── HintRouter.java │ │ │ │ ├── PartitionOperandHintParser.java │ │ │ │ └── SimpleHintParser.java │ │ │ └── util │ │ │ ├── ArrayUtil.java │ │ │ ├── ByteUtil.java │ │ │ ├── CollectionUtil.java │ │ │ ├── FormatUtil.java │ │ │ ├── IntegerUtil.java │ │ │ ├── LongUtil.java │ │ │ ├── ObjectUtil.java │ │ │ ├── PacketUtil.java │ │ │ ├── ParseUtil.java │ │ │ ├── PartitionUtil.java │ │ │ ├── PropertiesUtil.java │ │ │ ├── SmallSet.java │ │ │ └── StringUtil.java │ │ └── taobao │ │ └── tddl │ │ └── server │ │ └── TddlLauncher.java └── resources │ ├── logback.xml │ └── server.properties └── test └── java └── com └── alibaba └── cobar ├── EchoBioServer.java ├── common └── SmallSetTest.java ├── hint └── CobarHintTest.java ├── io ├── BufferPerformanceMain.java └── MessageTest.java ├── packet └── ResultSetPacketParse.java ├── parser ├── ManagerParserTest.java ├── ServerParserTest.java └── perf │ ├── ManagerParserPerformanceMain.java │ └── ServerParserPerformanceMain.java ├── statistics └── SQLStatisticsMain.java └── util ├── BitTest.java ├── ExecutorMain.java ├── FixedQueue.java ├── HexFormatUtil.java ├── HexFormatUtilMain.java ├── ListUtil.java ├── MetaUtilTest.java ├── PartitionForSingle.java ├── PartitionUtilTest.java ├── PermutationUtil.java ├── PermutationUtilTest.java ├── Queue.java ├── SplitStringTest.java ├── StringUtilTest.java └── perf ├── ArrayPerformanceMain.java ├── ConcurrentHashMapMain.java ├── HashMapMain.java ├── LockPerfMain.java ├── MapPerfMain.java ├── StringHashPerfMain.java └── SyncPerfMain.java /.gitignore: -------------------------------------------------------------------------------- 1 | .svn/ 2 | target/ 3 | test-output/ 4 | *.class 5 | .classpath 6 | .project 7 | .settings/ 8 | tmp 9 | temp 10 | *.log 11 | .idea/ 12 | *.iml 13 | bin/ 14 | sqldump.txt 15 | sqldumpFile.txt 16 | bdbtmp/ 17 | je.info.* 18 | *.lck 19 | *.jdb 20 | tddl-server/logs 21 | logs 22 | package-info.java 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # tddl 2 | Taobao Distributed Data Layer 3 | -------------------------------------------------------------------------------- /tddl-atom/src/main/java/com/taobao/tddl/atom/config/DbPasswdManager.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.atom.config; 2 | 3 | import com.taobao.tddl.common.exception.TddlException; 4 | import com.taobao.tddl.config.ConfigDataListener; 5 | 6 | /** 7 | * @author mengshi.sunmengshi 2013-12-5 下午5:55:44 8 | * @since 5.0.0 9 | */ 10 | public interface DbPasswdManager { 11 | 12 | /** 13 | * 获取数据库密码 14 | * 15 | * @return 16 | */ 17 | public String getPasswd(); 18 | 19 | /** 20 | * 注册应用配置监听 21 | * 22 | * @param Listener 23 | */ 24 | public void registerPasswdConfListener(ConfigDataListener Listener); 25 | 26 | /** 27 | * 停止DbPasswdManager 28 | */ 29 | public void stopDbPasswdManager() throws TddlException; 30 | } 31 | -------------------------------------------------------------------------------- /tddl-atom/src/main/java/com/taobao/tddl/atom/config/listener/AppDbConfListener.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.atom.config.listener; 2 | 3 | /** 4 | * 应用配置变化监听器 5 | * 6 | * @author qihao 7 | */ 8 | public interface AppDbConfListener { 9 | 10 | void handleData(String dataId, String data); 11 | } 12 | -------------------------------------------------------------------------------- /tddl-atom/src/main/java/com/taobao/tddl/atom/config/listener/AtomDbStatusListener.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.atom.config.listener; 2 | 3 | import com.taobao.tddl.atom.TAtomDbStatusEnum; 4 | 5 | /** 6 | * 数据库状态变化监听器 7 | * 8 | * @author qihao 9 | */ 10 | public interface AtomDbStatusListener { 11 | 12 | void handleData(TAtomDbStatusEnum oldStatus, TAtomDbStatusEnum newStatus); 13 | } 14 | -------------------------------------------------------------------------------- /tddl-atom/src/main/java/com/taobao/tddl/atom/config/listener/GlobalDbConfListener.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.atom.config.listener; 2 | 3 | /** 4 | * 全局配置变化监听器 5 | * 6 | * @author qihao 7 | */ 8 | public interface GlobalDbConfListener { 9 | 10 | void handleData(String dataId, String data); 11 | } 12 | -------------------------------------------------------------------------------- /tddl-atom/src/main/java/com/taobao/tddl/atom/config/listener/PasswdDbConfListener.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.atom.config.listener; 2 | 3 | /** 4 | * 数据库密码变化监听器 5 | * 6 | * @author qihao 7 | */ 8 | public interface PasswdDbConfListener { 9 | 10 | void handleData(String dataId, String data); 11 | } 12 | -------------------------------------------------------------------------------- /tddl-atom/src/main/java/com/taobao/tddl/atom/jdbc/DataChannel.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.atom.jdbc; 2 | 3 | import com.taobao.tddl.common.model.SqlMetaData; 4 | 5 | /** 6 | * @author JIECHEN 7 | */ 8 | public interface DataChannel { 9 | 10 | /** 11 | * 传递该sql的元信息给底层 12 | * 13 | * @param sqlMetaData 14 | */ 15 | public void fillMetaData(SqlMetaData sqlMetaData); 16 | 17 | /** 18 | * 获取sql meta data 19 | */ 20 | public SqlMetaData getSqlMetaData(); 21 | } 22 | -------------------------------------------------------------------------------- /tddl-atom/src/main/java/com/taobao/tddl/atom/jdbc/TPreparedStatement.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.atom.jdbc; 2 | 3 | import java.sql.PreparedStatement; 4 | 5 | import com.taobao.tddl.common.jdbc.IStatement; 6 | 7 | /** 8 | * @author JIECHEN 9 | */ 10 | public interface TPreparedStatement extends PreparedStatement, IStatement { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /tddl-atom/src/main/java/com/taobao/tddl/atom/jdbc/TStatement.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.atom.jdbc; 2 | 3 | import java.sql.Statement; 4 | 5 | import com.taobao.tddl.common.jdbc.IStatement; 6 | 7 | /** 8 | * @author JIECHEN 9 | */ 10 | public interface TStatement extends Statement, IStatement { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /tddl-atom/src/main/resources/META-INF/services/com.taobao.tddl.atom.TAtomDsStandard: -------------------------------------------------------------------------------- 1 | com.taobao.tddl.atom.TAtomDataSource -------------------------------------------------------------------------------- /tddl-atom/src/main/resources/META-INF/services/com.taobao.tddl.atom.securety.TPasswordCoder: -------------------------------------------------------------------------------- 1 | com.taobao.tddl.atom.securety.impl.DefaultPasswordCoder -------------------------------------------------------------------------------- /tddl-atom/src/test/java/com/taobao/tddl/atom/BaseAtomTest.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.atom; 2 | 3 | import org.junit.AfterClass; 4 | import org.junit.BeforeClass; 5 | import org.junit.Ignore; 6 | 7 | import com.taobao.diamond.mockserver.MockServer; 8 | 9 | @Ignore 10 | public class BaseAtomTest { 11 | 12 | @BeforeClass 13 | public static void beforeClass() { 14 | MockServer.setUpMockServer(); 15 | } 16 | 17 | @AfterClass 18 | public static void after() { 19 | MockServer.tearDownMockServer(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /tddl-atom/src/test/resources/META-INF/services/com.taobao.tddl.atom.securety.TPasswordCoder: -------------------------------------------------------------------------------- 1 | com.taobao.tddl.atom.common.StaticPasswordCoder -------------------------------------------------------------------------------- /tddl-atom/src/test/resources/conf/mysql/app.properties: -------------------------------------------------------------------------------- 1 | userName=tddl 2 | minPoolSize=1 3 | maxPoolSize=2 4 | idleTimeout=10 5 | blockingTimeout=1000 6 | preparedStatementCacheSize=15 7 | connectionProperties=characterEncoding=gbk -------------------------------------------------------------------------------- /tddl-atom/src/test/resources/conf/mysql/globa.properties: -------------------------------------------------------------------------------- 1 | ip=10.232.31.154 2 | port=3306 3 | dbName=tddl_sample_0 4 | dbType=mysql 5 | dbStatus=RW -------------------------------------------------------------------------------- /tddl-atom/src/test/resources/conf/mysql/passwd.properties: -------------------------------------------------------------------------------- 1 | encPasswd=tddl -------------------------------------------------------------------------------- /tddl-atom/src/test/resources/conf/oracle/app.properties: -------------------------------------------------------------------------------- 1 | userName=tddl 2 | minPoolSize=1 3 | maxPoolSize=2 4 | idleTimeout=10 5 | blockingTimeout=5 6 | preparedStatementCacheSize=15 7 | oracleConType=thin 8 | connectionProperties=SetBigStringTryClob=true;defaultRowPrefetch=50 -------------------------------------------------------------------------------- /tddl-atom/src/test/resources/conf/oracle/globa.properties: -------------------------------------------------------------------------------- 1 | ip=10.13.1.2 2 | port=1521 3 | dbName=tddltest 4 | dbType=oracle 5 | dbStatus=RW 6 | oracleConType=thin -------------------------------------------------------------------------------- /tddl-atom/src/test/resources/conf/oracle/passwd.properties: -------------------------------------------------------------------------------- 1 | encPasswd=4485f91c9426e4d8 -------------------------------------------------------------------------------- /tddl-common/src/main/java/com/taobao/tddl/client/RouteCondition.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.client; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * 别太纠结这混乱的包定义,一切都是为了以前老的客户端package定义 7 | * 8 | * @author jianghang 2014-6-13 上午9:57:18 9 | * @since 5.1.0 10 | */ 11 | public interface RouteCondition { 12 | 13 | public enum ROUTE_TYPE { 14 | /** 连接关闭的时候清空 */ 15 | FLUSH_ON_CLOSECONNECTION, 16 | /** 执行完成时就清空 */ 17 | FLUSH_ON_EXECUTE; 18 | } 19 | 20 | public String getVirtualTableName(); 21 | 22 | public void setVirtualTableName(String virtualTableName); 23 | 24 | public ROUTE_TYPE getRouteType(); 25 | 26 | public void setRouteType(ROUTE_TYPE routeType); 27 | 28 | public Map getExtraCmds(); 29 | } 30 | -------------------------------------------------------------------------------- /tddl-common/src/main/java/com/taobao/tddl/common/exception/NotSupportException.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.common.exception; 2 | 3 | import com.taobao.tddl.common.exception.code.ErrorCode; 4 | 5 | /** 6 | * 未支持 7 | * 8 | * @author jianghang 2014-4-23 上午11:32:33 9 | * @since 5.1.0 10 | */ 11 | public class NotSupportException extends TddlRuntimeException { 12 | 13 | private static final long serialVersionUID = 3333002727706650503L; 14 | 15 | public NotSupportException(){ 16 | super(ErrorCode.ERR_NOT_SUPPORT, ""); 17 | } 18 | 19 | public NotSupportException(String... params){ 20 | super(ErrorCode.ERR_NOT_SUPPORT, params); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /tddl-common/src/main/java/com/taobao/tddl/common/jdbc/IDataSource.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.common.jdbc; 2 | 3 | import java.sql.SQLException; 4 | 5 | import javax.sql.DataSource; 6 | 7 | public interface IDataSource extends DataSource { 8 | 9 | @Override 10 | IConnection getConnection() throws SQLException; 11 | } 12 | -------------------------------------------------------------------------------- /tddl-common/src/main/java/com/taobao/tddl/common/mock/ExecuteHandler.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.common.mock; 2 | 3 | import java.sql.ResultSet; 4 | 5 | public interface ExecuteHandler { 6 | 7 | public ResultSet execute(String method, String sql); 8 | 9 | public boolean executeSql(String method, String sql); 10 | } 11 | -------------------------------------------------------------------------------- /tddl-common/src/main/java/com/taobao/tddl/common/model/DBType.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.common.model; 2 | 3 | /** 4 | * @author linxuan 5 | */ 6 | public enum DBType { 7 | 8 | ORACLE(0), MYSQL(1); 9 | 10 | private int i; 11 | 12 | private DBType(int i){ 13 | this.i = i; 14 | } 15 | 16 | public int value() { 17 | return this.i; 18 | } 19 | 20 | public static DBType valueOf(int i) { 21 | for (DBType t : values()) { 22 | if (t.value() == i) { 23 | return t; 24 | } 25 | } 26 | throw new IllegalArgumentException("Invalid SqlType:" + i); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /tddl-common/src/main/java/com/taobao/tddl/common/model/DataSourceType.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.common.model; 2 | 3 | public enum DataSourceType { 4 | DruidDataSource(1); 5 | 6 | private int i; 7 | 8 | private DataSourceType(int i){ 9 | this.i = i; 10 | } 11 | 12 | public int value() { 13 | return this.i; 14 | } 15 | 16 | public static DataSourceType valueOf(int i) { 17 | for (DataSourceType t : values()) { 18 | if (t.value() == i) { 19 | return t; 20 | } 21 | } 22 | throw new IllegalArgumentException("Invalid DataSouceType:" + i); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /tddl-common/src/main/java/com/taobao/tddl/common/model/lifecycle/Lifecycle.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.common.model.lifecycle; 2 | 3 | import com.taobao.tddl.common.exception.TddlException; 4 | 5 | /** 6 | * @author jianghang 2013-10-23 下午5:19:58 7 | * @since 5.0.0 8 | */ 9 | public interface Lifecycle { 10 | 11 | /** 12 | * 正常启动 13 | */ 14 | void init() throws TddlException; 15 | 16 | /** 17 | * 正常停止 18 | */ 19 | void destroy() throws TddlException; 20 | 21 | /** 22 | * 是否存储运行运行状态 23 | * 24 | * @return 25 | */ 26 | boolean isInited() throws TddlException; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /tddl-common/src/main/java/com/taobao/tddl/common/plugin/PreSqlPlugin.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.common.plugin; 2 | 3 | import java.sql.SQLException; 4 | 5 | /** 6 | * 可以对用户传进来的sql进行一些预操作 7 | * 8 | * @author mengshi.sunmengshi 2014年4月24日 上午10:48:32 9 | * @since 5.1.0 10 | */ 11 | public interface PreSqlPlugin { 12 | 13 | String handle(String orignSql) throws SQLException; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /tddl-common/src/main/java/com/taobao/tddl/common/utils/RuntimeConfigHolder.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.common.utils; 2 | 3 | /** 4 | *
 5 |  * 一个做引用切换的Holder,使用时先set、后get
 6 |  * 用于运行时配置信息需要动态修改,实时生效的场景。
 7 |  * 所谓运行时配置信息,是指运行时被实时读取,并且影响运行时行为的配置信息。
 8 |  * 运行时配置信息动态修改时,协助使用者完成copyonwrite实现:
 9 |  * 。。。
10 |  * 
11 |  * 
12 | * 13 | * @author linxuan 14 | * @param 包含运行时配置信息的对象的类型 15 | */ 16 | public class RuntimeConfigHolder { 17 | 18 | private volatile T runtime; 19 | 20 | /** 21 | * @return 上一次设入的包含运行时配置信息的对象。 22 | */ 23 | public T get() { 24 | return runtime; 25 | } 26 | 27 | /** 28 | * @param runtime 包含运行时配置信息的对象。 29 | */ 30 | public void set(T runtime) { 31 | this.runtime = runtime; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /tddl-common/src/main/java/com/taobao/tddl/common/utils/convertor/AbastactConvertor.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.common.utils.convertor; 2 | 3 | /** 4 | * @author jianghang 2011-6-21 下午03:46:57 5 | */ 6 | public class AbastactConvertor implements Convertor { 7 | 8 | @Override 9 | public Object convert(Object src, Class destClass) { 10 | throw new ConvertorException("unSupport!"); 11 | } 12 | 13 | @Override 14 | public Object convertCollection(Object src, Class destClass, Class... componentClasses) { 15 | throw new ConvertorException("unSupport!"); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /tddl-common/src/main/java/com/taobao/tddl/common/utils/convertor/Convertor.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.common.utils.convertor; 2 | 3 | /** 4 | * 数据类型转化 5 | * 6 | * @author jianghang 2014-1-21 上午12:08:57 7 | * @since 5.0.0 8 | */ 9 | public interface Convertor { 10 | 11 | public Object convert(Object src, Class destClass); 12 | 13 | /** 14 | * 支持多级collection映射,需指定多级的componentClass 15 | */ 16 | public Object convertCollection(Object src, Class destClass, Class... componentClasses); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /tddl-common/src/main/java/com/taobao/tddl/common/utils/extension/Activate.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.common.utils.extension; 2 | 3 | import java.lang.annotation.Documented; 4 | import java.lang.annotation.ElementType; 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | import java.lang.annotation.Target; 8 | 9 | /** 10 | * Activate 11 | *

12 | * 对于可以被框架中自动激活加载扩展,此Annotation用于配置扩展被自动激活加载条件。比如,有多个实现可以定义加载优先级 13 | */ 14 | @Documented 15 | @Retention(RetentionPolicy.RUNTIME) 16 | @Target({ ElementType.TYPE, ElementType.METHOD }) 17 | public @interface Activate { 18 | 19 | String name() default ""; // 可以为每个组件定义一个name,通过load的时候指定name即可匹配 20 | 21 | int order() default 0; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /tddl-common/src/main/java/com/taobao/tddl/common/utils/logger/Level.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.common.utils.logger; 2 | 3 | /** 4 | * Level , copy from dubbo logger 5 | * 6 | * @author jianghang 2013-9-13 下午4:07:32 7 | */ 8 | public enum Level { 9 | 10 | /** 11 | * ALL 12 | */ 13 | ALL, 14 | 15 | /** 16 | * TRACE 17 | */ 18 | TRACE, 19 | 20 | /** 21 | * DEBUG 22 | */ 23 | DEBUG, 24 | 25 | /** 26 | * INFO 27 | */ 28 | INFO, 29 | 30 | /** 31 | * WARN 32 | */ 33 | WARN, 34 | 35 | /** 36 | * ERROR 37 | */ 38 | ERROR, 39 | 40 | /** 41 | * OFF 42 | */ 43 | OFF 44 | 45 | } 46 | -------------------------------------------------------------------------------- /tddl-common/src/main/java/com/taobao/tddl/util/DBTypeHelper.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.util; 2 | 3 | import javax.sql.DataSource; 4 | 5 | /** 6 | * 提供判断当前DataSource的类型, 主要为一些第三方工具来判断DBType
7 | * 别纠结,为了兼容tddl3保留的 8 | * 9 | * @author jianghang 2014-6-26 下午6:11:36 10 | * @since 5.1.5 11 | */ 12 | public class DBTypeHelper { 13 | 14 | public static String getDbType(DataSource dataSource) { 15 | // TDDL5默认只支持mysql,所以直接返回true 16 | return "mysql"; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /tddl-common/src/main/resources/DUAL_TABLE.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | id 12 |
13 |
-------------------------------------------------------------------------------- /tddl-common/src/test/java/com/taobao/tddl/common/extension/AbstractPluginService.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.common.extension; 2 | 3 | /** 4 | * @author jianghang 2013-11-22 下午10:20:01 5 | * @since 5.0.0 6 | */ 7 | public abstract class AbstractPluginService implements PluginService { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /tddl-common/src/test/java/com/taobao/tddl/common/extension/ExamplePlugin.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.common.extension; 2 | 3 | /** 4 | * just test 5 | */ 6 | public class ExamplePlugin extends AbstractPluginService { 7 | 8 | public String echo(String str) { 9 | return str; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /tddl-common/src/test/java/com/taobao/tddl/common/extension/ExtensionLoaderTest.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.common.extension; 2 | 3 | import org.junit.Assert; 4 | import org.junit.Test; 5 | 6 | import com.taobao.tddl.common.utils.extension.ExtensionLoader; 7 | 8 | public class ExtensionLoaderTest { 9 | 10 | @Test 11 | public void testSimple() { 12 | AbstractPluginService plugin = ExtensionLoader.load(AbstractPluginService.class); 13 | Assert.assertEquals(plugin.getClass(), OrderedPlugin.class); 14 | Assert.assertEquals(plugin.echo("hello"), "ordered : hello"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tddl-common/src/test/java/com/taobao/tddl/common/extension/OrderedPlugin.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.common.extension; 2 | 3 | import com.taobao.tddl.common.utils.extension.Activate; 4 | 5 | @Activate(order = 1) 6 | public class OrderedPlugin extends AbstractPluginService { 7 | 8 | public String echo(String str) { 9 | return "ordered : " + str; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /tddl-common/src/test/java/com/taobao/tddl/common/extension/PluginService.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.common.extension; 2 | 3 | /** 4 | * just test class 5 | */ 6 | public interface PluginService { 7 | 8 | public String echo(String str); 9 | } 10 | -------------------------------------------------------------------------------- /tddl-common/src/test/java/com/taobao/tddl/common/utils/ErrorCodeTest.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.common.utils; 2 | 3 | import org.junit.Test; 4 | 5 | import com.taobao.tddl.common.exception.code.ErrorCode; 6 | 7 | public class ErrorCodeTest { 8 | 9 | @Test 10 | public void testOutput() { 11 | System.out.println(ErrorCode.ERR_CONFIG_MISS_GROUPKEY.getMessage("hello")); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /tddl-common/src/test/resources/META-INF/services/com.taobao.tddl.common.extension.AbstractPluginService: -------------------------------------------------------------------------------- 1 | com.taobao.tddl.common.extension.OrderedPlugin 2 | com.taobao.tddl.common.extension.ExamplePlugin -------------------------------------------------------------------------------- /tddl-config-diamond/src/main/resources/META-INF/tddl/com.taobao.tddl.config.impl.UnitConfigDataHandler: -------------------------------------------------------------------------------- 1 | com.taobao.tddl.config.diamond.DiamondConfigDataHandler -------------------------------------------------------------------------------- /tddl-config-diamond/src/main/resources/META-INF/tddl/com.taobao.tddl.config.impl.holder.AbstractConfigDataHolder: -------------------------------------------------------------------------------- 1 | com.taobao.tddl.config.diamond.DiamondConfigHolder -------------------------------------------------------------------------------- /tddl-config/src/main/java/com/taobao/tddl/config/ConfigDataListener.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.config; 2 | 3 | /** 4 | * 接收信息的回调接口 5 | * 6 | * @author shenxun 7 | * @author junyu 8 | * @version 1.0 9 | * @since 1.6 10 | * @date 2011-1-11上午11:22:29 11 | */ 12 | public interface ConfigDataListener { 13 | 14 | /** 15 | * 配置中心客户端收到数据时调用注册的监听器方法, 并把收到的数据传递到此方法中 16 | * 17 | * @param dataId 数据在配置中心注册的id 18 | * @param data 字符串数据 19 | */ 20 | void onDataRecieved(String dataId, String data); 21 | } 22 | -------------------------------------------------------------------------------- /tddl-config/src/main/java/com/taobao/tddl/config/impl/holder/ConfigDataHolder.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.config.impl.holder; 2 | 3 | import java.util.List; 4 | import java.util.Map; 5 | 6 | import com.taobao.tddl.common.model.lifecycle.Lifecycle; 7 | import com.taobao.tddl.config.ConfigDataHandler; 8 | 9 | /** 10 | * 抽取Holder实现,允许预先构建cache环境,加速{@linkplain ConfigDataHandler}.getData()方法的数据获取 11 | * 12 | * @author jianghang 2013-10-28 下午5:45:07 13 | * @since 5.0.0 14 | */ 15 | public interface ConfigDataHolder extends Lifecycle { 16 | 17 | public String getData(String dataId); 18 | 19 | public Map getData(List dataIds); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /tddl-config/src/main/resources/META-INF/services/com.taobao.tddl.config.impl.UnitConfigDataHandler: -------------------------------------------------------------------------------- 1 | com.taobao.tddl.config.impl.mock.MockUnitConfigDataHandler -------------------------------------------------------------------------------- /tddl-config/src/main/resources/META-INF/services/com.taobao.tddl.config.impl.holder.AbstractConfigDataHolder: -------------------------------------------------------------------------------- 1 | com.taobao.tddl.config.impl.mock.MockConfigHolder -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/CommunicateExecutor.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor; 2 | 3 | public interface CommunicateExecutor extends IExecutor { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/codec/RecordCodec.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.codec; 2 | 3 | import com.taobao.tddl.executor.record.CloneableRecord; 4 | 5 | /** 6 | * @author mengshi.sunmengshi 2013-12-2 下午6:25:22 7 | * @since 5.0.0 8 | */ 9 | public interface RecordCodec { 10 | 11 | byte[] encode(CloneableRecord record); 12 | 13 | CloneableRecord decode(byte[] bytes); 14 | 15 | CloneableRecord newEmptyRecord(); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/common/AbstractSequenceManager.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.common; 2 | 3 | import com.taobao.tddl.client.sequence.Sequence; 4 | import com.taobao.tddl.common.model.lifecycle.AbstractLifecycle; 5 | import com.taobao.tddl.optimizer.sequence.ISequenceManager; 6 | 7 | public abstract class AbstractSequenceManager extends AbstractLifecycle implements ISequenceManager { 8 | 9 | protected abstract Sequence getSequence(String name); 10 | 11 | @Override 12 | public Long nextValue(String seqName) { 13 | throw new UnsupportedOperationException(); 14 | } 15 | 16 | @Override 17 | public Long nextValue(String seqName, int batchSize) { 18 | throw new UnsupportedOperationException(); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/common/DuplicateKVPair.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.common; 2 | 3 | import com.taobao.tddl.executor.rowset.IRowSet; 4 | 5 | /** 6 | * 一组重复的值的链表。 所有在同一个链表内的数据,都具备一组相同的key(key的意思就是在IRowSet中用来作为排序字段的哪些数据) 7 | * 8 | * @author Whisper 9 | */ 10 | public class DuplicateKVPair { 11 | 12 | public DuplicateKVPair(IRowSet currentKey){ 13 | super(); 14 | this.currentKey = currentKey; 15 | } 16 | 17 | public IRowSet currentKey; 18 | public DuplicateKVPair next = null; 19 | } 20 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/common/IConnectionHolder.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.common; 2 | 3 | import java.sql.SQLException; 4 | import java.util.Set; 5 | 6 | import com.taobao.tddl.common.jdbc.IConnection; 7 | import com.taobao.tddl.common.jdbc.IDataSource; 8 | 9 | public interface IConnectionHolder { 10 | 11 | public IConnection getConnection(String groupName, IDataSource ds) throws SQLException; 12 | 13 | public void closeAllConnections(); 14 | 15 | public void tryClose(IConnection conn, String groupName) throws SQLException; 16 | 17 | public Set getAllConnection(); 18 | 19 | public void kill(); 20 | 21 | public void cancel(); 22 | 23 | public void restart(); 24 | } 25 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/common/IRowsValueScaner.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.common; 2 | 3 | import java.util.Iterator; 4 | import java.util.List; 5 | 6 | import com.taobao.tddl.executor.rowset.IRowSet; 7 | import com.taobao.tddl.optimizer.core.expression.ISelectable; 8 | 9 | /** 10 | * 单行结果遍历用。 大部分情况下,使用index比使用colName效率高,所以这个scaner主要作用就是 缓存一行中取到数据的index.加速访问 11 | * 12 | * @author whisper 13 | */ 14 | public interface IRowsValueScaner { 15 | 16 | List getColumnsUWantToScan(); 17 | 18 | /** 19 | * 非线程安全哦。。 返回数据的rowSet; 20 | * 21 | * @param rowSet 22 | * @return 23 | */ 24 | Iterator rowValueIterator(IRowSet rowSet); 25 | } 26 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/cursor/IAffectRowCursor.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.cursor; 2 | 3 | public interface IAffectRowCursor extends ISchematicCursor { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/cursor/IAggregateCursor.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.cursor; 2 | 3 | public interface IAggregateCursor extends ISchematicCursor { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/cursor/IBlockNestedLoopCursor.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.cursor; 2 | 3 | public interface IBlockNestedLoopCursor extends ISchematicCursor { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/cursor/IColumnAliasCursor.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.cursor; 2 | 3 | public interface IColumnAliasCursor extends ISchematicCursor { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/cursor/IInCursor.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.cursor; 2 | 3 | public interface IInCursor extends ISchematicCursor { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/cursor/IIndexNestLoopCursor.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.cursor; 2 | 3 | public interface IIndexNestLoopCursor extends ISchematicCursor { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/cursor/ILimitFromToCursor.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.cursor; 2 | 3 | public interface ILimitFromToCursor extends ISchematicCursor { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/cursor/IMergeCursor.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.cursor; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author mengshi.sunmengshi 2013-12-18 下午7:37:20 7 | * @since 5.0.0 8 | */ 9 | public interface IMergeCursor extends ISchematicCursor { 10 | 11 | public List getSubCursors(); 12 | } 13 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/cursor/IMergeSortJoinCursor.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.cursor; 2 | 3 | /** 4 | * @author mengshi.sunmengshi 2013-12-18 下午7:39:01 5 | * @since 5.0.0 6 | */ 7 | public interface IMergeSortJoinCursor extends ISchematicCursor { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/cursor/IRangeCursor.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.cursor; 2 | 3 | public interface IRangeCursor extends ISchematicCursor { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/cursor/IResultSetCursor.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.cursor; 2 | 3 | import java.sql.ResultSet; 4 | 5 | public interface IResultSetCursor { 6 | 7 | ResultSet getResultSet(); 8 | } 9 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/cursor/IReverseOrderCursor.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.cursor; 2 | 3 | /** 4 | * 反向cursor. next 等于before 5 | * 6 | * @author whisper 7 | */ 8 | public interface IReverseOrderCursor extends ISchematicCursor { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/cursor/ISchematicCursor.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.cursor; 2 | 3 | import java.util.List; 4 | 5 | import com.taobao.tddl.common.exception.TddlException; 6 | import com.taobao.tddl.optimizer.core.expression.IOrderBy; 7 | 8 | public interface ISchematicCursor extends Cursor { 9 | 10 | public List getOrderBy() throws TddlException; 11 | 12 | /** 13 | * join查询可能存在多个可能的排序,比如sort merge join,会是左表或者右表的join列 14 | */ 15 | public List> getJoinOrderBys() throws TddlException; 16 | } 17 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/cursor/ISetOrderCursor.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.cursor; 2 | 3 | /** 4 | * set request order by when cursor's orderBy tableName is not equals request 5 | * orderBy tableName 6 | * 7 | * @author delin.pyc 8 | */ 9 | public interface ISetOrderCursor extends ISchematicCursor { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/cursor/ITempTableSortCursor.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.cursor; 2 | 3 | public interface ITempTableSortCursor extends ISchematicCursor { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/cursor/IValueFilterCursor.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.cursor; 2 | 3 | public interface IValueFilterCursor extends ISchematicCursor { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/function/scalar/filter/Equal.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.function.scalar.filter; 2 | 3 | import com.taobao.tddl.executor.common.ExecutionContext; 4 | import com.taobao.tddl.optimizer.core.datatype.DataType; 5 | 6 | /** 7 | * @since 5.0.0 8 | */ 9 | public class Equal extends Filter { 10 | 11 | @Override 12 | protected Boolean computeInner(Object[] args, ExecutionContext ec) { 13 | DataType type = this.getArgType(); 14 | return type.compare(args[0], args[1]) == 0; 15 | } 16 | 17 | @Override 18 | public String[] getFunctionNames() { 19 | return new String[] { "EQUAL", "=" }; 20 | } 21 | 22 | public DataType getArgType() { 23 | return getMixedFirstType(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/function/scalar/filter/Greater.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.function.scalar.filter; 2 | 3 | import com.taobao.tddl.executor.common.ExecutionContext; 4 | import com.taobao.tddl.optimizer.core.datatype.DataType; 5 | 6 | /** 7 | * @since 5.0.0 8 | */ 9 | public class Greater extends Filter { 10 | 11 | @Override 12 | protected Boolean computeInner(Object[] args, ExecutionContext ec) { 13 | DataType type = this.getArgType(); 14 | return type.compare(args[0], args[1]) > 0; 15 | } 16 | 17 | @Override 18 | public String[] getFunctionNames() { 19 | return new String[] { ">" }; 20 | } 21 | 22 | public DataType getArgType() { 23 | return getMixedFirstType(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/function/scalar/filter/IsNotNull.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.function.scalar.filter; 2 | 3 | import com.taobao.tddl.executor.common.ExecutionContext; 4 | 5 | /** 6 | * @since 5.0.0 7 | */ 8 | public class IsNotNull extends Filter { 9 | 10 | @Override 11 | protected Boolean computeInner(Object[] args, ExecutionContext ec) { 12 | Object arg = args[0]; 13 | return arg != null; 14 | } 15 | 16 | @Override 17 | public String[] getFunctionNames() { 18 | return new String[] { "IS NOT NULL" }; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/function/scalar/filter/IsNull.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.function.scalar.filter; 2 | 3 | import com.taobao.tddl.executor.common.ExecutionContext; 4 | 5 | /** 6 | * @since 5.0.0 7 | */ 8 | public class IsNull extends Filter { 9 | 10 | @Override 11 | protected Boolean computeInner(Object[] args, ExecutionContext ec) { 12 | Object arg = args[0]; 13 | return arg == null; 14 | } 15 | 16 | @Override 17 | public String[] getFunctionNames() { 18 | return new String[] { "IS NULL" }; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/function/scalar/filter/Less.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.function.scalar.filter; 2 | 3 | import com.taobao.tddl.executor.common.ExecutionContext; 4 | import com.taobao.tddl.optimizer.core.datatype.DataType; 5 | 6 | /** 7 | * @since 5.0.0 8 | */ 9 | public class Less extends Filter { 10 | 11 | @Override 12 | protected Boolean computeInner(Object[] args, ExecutionContext ec) { 13 | DataType type = this.getArgType(); 14 | return type.compare(args[0], args[1]) < 0; 15 | } 16 | 17 | @Override 18 | public String[] getFunctionNames() { 19 | return new String[] { "<" }; 20 | } 21 | 22 | public DataType getArgType() { 23 | return getMixedFirstType(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/function/scalar/filter/LessEqual.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.function.scalar.filter; 2 | 3 | import com.taobao.tddl.executor.common.ExecutionContext; 4 | import com.taobao.tddl.optimizer.core.datatype.DataType; 5 | 6 | /** 7 | * @since 5.0.0 8 | */ 9 | public class LessEqual extends Filter { 10 | 11 | @Override 12 | protected Boolean computeInner(Object[] args, ExecutionContext ec) { 13 | DataType type = this.getArgType(); 14 | return type.compare(args[0], args[1]) <= 0; 15 | } 16 | 17 | @Override 18 | public String[] getFunctionNames() { 19 | return new String[] { "<=" }; 20 | } 21 | 22 | public DataType getArgType() { 23 | return getMixedFirstType(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/function/scalar/filter/NotEqual.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.function.scalar.filter; 2 | 3 | import com.taobao.tddl.executor.common.ExecutionContext; 4 | import com.taobao.tddl.optimizer.core.datatype.DataType; 5 | 6 | /** 7 | * @since 5.0.0 8 | */ 9 | public class NotEqual extends Filter { 10 | 11 | @Override 12 | protected Boolean computeInner(Object[] args, ExecutionContext ec) { 13 | DataType type = this.getArgType(); 14 | return type.compare(args[0], args[1]) != 0; 15 | } 16 | 17 | @Override 18 | public String[] getFunctionNames() { 19 | return new String[] { "!=" }; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/function/scalar/filter/Or.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.function.scalar.filter; 2 | 3 | import com.taobao.tddl.executor.common.ExecutionContext; 4 | import com.taobao.tddl.optimizer.core.datatype.DataType; 5 | 6 | /** 7 | * @since 5.0.0 8 | */ 9 | public class Or extends Filter { 10 | 11 | @Override 12 | protected Boolean computeInner(Object[] args, ExecutionContext ec) { 13 | for (Object arg : args) { 14 | if (DataType.BooleanType.convertFrom(arg)) { 15 | return true; 16 | } 17 | } 18 | return false; 19 | } 20 | 21 | @Override 22 | public String[] getFunctionNames() { 23 | return new String[] { "OR", "||" }; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/function/scalar/string/Lower.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.function.scalar.string; 2 | 3 | /** 4 | * same as lcase 5 | * 6 | * @author mengshi.sunmengshi 2014年4月11日 下午5:14:54 7 | * @since 5.1.0 8 | */ 9 | public class Lower extends Lcase { 10 | 11 | @Override 12 | public String[] getFunctionNames() { 13 | return new String[] { "LOWER" }; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/function/scalar/string/Match.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.function.scalar.string; 2 | 3 | public class Match { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/function/scalar/string/Position.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.function.scalar.string; 2 | 3 | /** 4 | *
 5 |  * POSITION(substr IN str)
 6 |  * 
 7 |  * POSITION(substr IN str) is a synonym for LOCATE(substr,str).
 8 |  * 
9 | * 10 | * @author mengshi.sunmengshi 2014年4月15日 下午2:37:28 11 | * @since 5.1.0 12 | */ 13 | public class Position extends Locate { 14 | 15 | @Override 16 | public String[] getFunctionNames() { 17 | 18 | return new String[] { "POSITION" }; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/function/scalar/string/Regexp.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.function.scalar.string; 2 | 3 | public class Regexp { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/function/scalar/string/Rlike.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.function.scalar.string; 2 | 3 | public class Rlike { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/function/scalar/string/SoundsLike.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.function.scalar.string; 2 | 3 | import com.taobao.tddl.executor.common.ExecutionContext; 4 | import com.taobao.tddl.executor.function.scalar.filter.Filter; 5 | 6 | /** 7 | * 不支持 8 | * 9 | * @author mengshi.sunmengshi 2014年4月15日 下午5:44:59 10 | * @since 5.1.0 11 | */ 12 | public class SoundsLike extends Filter { 13 | 14 | @Override 15 | public String[] getFunctionNames() { 16 | return new String[] { "SOUNDS LIKE" }; 17 | } 18 | 19 | @Override 20 | protected Object computeInner(Object[] args, ExecutionContext ec) { 21 | 22 | throw new UnsupportedOperationException("如果没法下推,sounds like不支持"); 23 | 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/function/scalar/string/SubStr.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.function.scalar.string; 2 | 3 | /** 4 | *
 5 |  * SUBSTR(str,pos), SUBSTR(str FROM pos), SUBSTR(str,pos,len), SUBSTR(str FROM pos FOR len)
 6 |  * 
 7 |  * SUBSTR() is a synonym for SUBSTRING().
 8 |  * 
9 | * 10 | * @author mengshi.sunmengshi 2014年4月15日 下午2:00:32 11 | * @since 5.1.0 12 | */ 13 | public class SubStr extends SubString { 14 | 15 | @Override 16 | public String[] getFunctionNames() { 17 | return new String[] { "SUBSTR" }; 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/function/scalar/string/Upper.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.function.scalar.string; 2 | 3 | /** 4 | * same as ucase 5 | * 6 | * @author mengshi.sunmengshi 2014年4月11日 下午5:16:01 7 | * @since 5.1.0 8 | */ 9 | public class Upper extends Ucase { 10 | 11 | @Override 12 | public String[] getFunctionNames() { 13 | return new String[] { "UPPER" }; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/handler/SubQueryHandler.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.handler; 2 | 3 | import com.taobao.tddl.common.exception.TddlException; 4 | import com.taobao.tddl.executor.common.ExecutionContext; 5 | import com.taobao.tddl.executor.cursor.ISchematicCursor; 6 | import com.taobao.tddl.executor.spi.ICommandHandler; 7 | import com.taobao.tddl.optimizer.core.plan.IDataNodeExecutor; 8 | 9 | public class SubQueryHandler implements ICommandHandler { 10 | 11 | @Override 12 | public ISchematicCursor handle(IDataNodeExecutor executor, ExecutionContext executionContext) throws TddlException { 13 | // TODO Auto-generated method stub 14 | return null; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/repo/RepositoryConfig.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.repo; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | public class RepositoryConfig { 7 | 8 | public static final String DEFAULT_TXN_ISOLATION = "DEFAULT_TXN_ISOLATION"; 9 | public static final String IS_TRANSACTIONAL = "IS_TRANSACTIONAL"; 10 | private Map properties = new HashMap(); 11 | 12 | public String getProperty(String name) { 13 | return properties.get(name); 14 | } 15 | 16 | public void setProperty(String name, String value) { 17 | properties.put(name, value); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/rowset/IRowSet.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.rowset; 2 | 3 | import com.taobao.tddl.common.model.BaseRowSet; 4 | import com.taobao.tddl.executor.cursor.ICursorMeta; 5 | 6 | /** 7 | * 数据的核心接口,类似ResultSet一样的接口。下面有可能有join的实现,也可能有普通query或Merge实现。 8 | * 9 | * @author Whisper 10 | */ 11 | public interface IRowSet extends BaseRowSet { 12 | 13 | ICursorMeta getParentCursorMeta(); 14 | } 15 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/spi/AbstractTable.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.spi; 2 | 3 | import com.taobao.tddl.optimizer.config.table.TableMeta; 4 | 5 | /** 6 | * @author mengshi.sunmengshi 2013-11-27 下午3:54:19 7 | * @since 5.0.0 8 | */ 9 | public abstract class AbstractTable implements ITable { 10 | 11 | protected TableMeta schema; 12 | 13 | protected IRepository repo; 14 | 15 | public AbstractTable(TableMeta schema, IRepository repo){ 16 | this.schema = schema; 17 | this.repo = repo; 18 | // todo:根据shema中二级索引信息,生成trigger. 19 | } 20 | 21 | @Override 22 | public TableMeta getSchema() { 23 | return schema; 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/spi/IAtomExecutor.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.spi; 2 | 3 | import com.taobao.tddl.common.model.Atom; 4 | import com.taobao.tddl.executor.IExecutor; 5 | 6 | public interface IAtomExecutor extends IExecutor { 7 | 8 | Atom getAtomInfo(); 9 | } 10 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/spi/IDataSourceGetter.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.spi; 2 | 3 | import javax.sql.DataSource; 4 | 5 | /** 6 | * 从不同的存储中拿到相应的DataSource 7 | * 8 | * @author mengshi.sunmengshi 2013-11-27 下午3:56:48 9 | * @since 5.0.0 10 | */ 11 | public interface IDataSourceGetter { 12 | 13 | DataSource getDataSource(String group); 14 | } 15 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/spi/IGroupExecutor.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.spi; 2 | 3 | import com.taobao.tddl.common.model.Group; 4 | import com.taobao.tddl.executor.IExecutor; 5 | 6 | /** 7 | * 用于主备切换等group操作 8 | * 9 | * @author mengshi.sunmengshi 2013-12-6 下午1:45:56 10 | * @since 5.0.0 11 | */ 12 | public interface IGroupExecutor extends IExecutor { 13 | 14 | public Group getGroupInfo(); 15 | 16 | /** 17 | * 可能是个datasource ,也可能是个rpc客户端 18 | */ 19 | public Object getRemotingExecutableObject(); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/spi/IRepositoryFactory.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.spi; 2 | 3 | import java.util.Map; 4 | 5 | import com.taobao.tddl.common.model.Group; 6 | 7 | /** 8 | * @author mengshi.sunmengshi 2013-12-6 上午11:21:43 9 | * @since 5.0.0 10 | */ 11 | public interface IRepositoryFactory { 12 | 13 | IRepository buildRepository(Group group, Map repoProperties, Map connectionProperties); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/executor/spi/ITopologyExecutor.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.executor.spi; 2 | 3 | import com.taobao.tddl.executor.IExecutor; 4 | 5 | public interface ITopologyExecutor extends IExecutor { 6 | 7 | /** 8 | * 该executor所在节点的名字 9 | * 10 | * @return 11 | */ 12 | public String getDataNode(); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/statistics/AbstractSQLOperation.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.statistics; 2 | 3 | import com.taobao.tddl.common.jdbc.Parameters; 4 | 5 | /** 6 | * @author mengshi.sunmengshi 2014年6月24日 下午3:12:09 7 | * @since 5.1.0 8 | */ 9 | public abstract class AbstractSQLOperation implements SQLOperation { 10 | 11 | private Parameters params; 12 | 13 | public void setParams(Parameters params) { 14 | this.params = params; 15 | } 16 | 17 | @Override 18 | public String getParamsStr() { 19 | 20 | if (params == null) { 21 | return null; 22 | } 23 | 24 | if (params.getBatchSize() == 0) { 25 | return null; 26 | } 27 | return params.toString(); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/statistics/SQLOperation.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.statistics; 2 | 3 | public interface SQLOperation { 4 | 5 | String getOperationString(); 6 | 7 | String getOperationType(); 8 | 9 | String getSqlOrResult(); 10 | 11 | String getParamsStr(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/statistics/SQLRecord.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.statistics; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * @author xianmao.hexm 7 | */ 8 | public final class SQLRecord implements Comparable { 9 | 10 | public String host; 11 | public String schema; 12 | public String statement; 13 | public Map tableNames; 14 | public long startTime; 15 | public long executeTime; 16 | public String dataNode; 17 | public int dataNodeIndex; 18 | 19 | @Override 20 | public int compareTo(SQLRecord o) { 21 | return (int) (executeTime - o.executeTime); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/statistics/SQLRecorderLogger.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.statistics; 2 | 3 | import com.taobao.tddl.common.utils.logger.Logger; 4 | import com.taobao.tddl.common.utils.logger.LoggerFactory; 5 | 6 | public class SQLRecorderLogger { 7 | 8 | private final static Logger slowLogger = LoggerFactory.getLogger("SLOW"); 9 | private final static Logger mergeSlowLogger = LoggerFactory.getLogger("MERGE_SLOW"); 10 | 11 | private final static Logger pyhsicalSlowLogger = LoggerFactory.getLogger("PYHSICAL_SLOW"); 12 | private final static Logger mergePyhsicalSlowLogger = LoggerFactory.getLogger("MERGE_PYHSICAL_SLOW"); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /tddl-executor/src/main/java/com/taobao/tddl/statistics/SQLTracer.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.statistics; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class SQLTracer { 7 | 8 | List ops = new ArrayList(); 9 | 10 | public void trace(SQLOperation oper) { 11 | ops.add(oper); 12 | } 13 | 14 | public List getOperations() { 15 | return this.ops; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /tddl-executor/src/main/resources/META-INF/services/com.taobao.tddl.optimizer.sequence.ISequenceManager: -------------------------------------------------------------------------------- 1 | com.taobao.tddl.executor.common.OptimizerSequenceManager -------------------------------------------------------------------------------- /tddl-group/src/main/java/com/taobao/tddl/group/config/GroupIndex.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.group.config; 2 | 3 | /** 4 | * 描述如何选择group下的atom节点 5 | * 6 | * @author jianghang 2013-10-31 上午11:42:53 7 | * @since 5.0.0 8 | */ 9 | public class GroupIndex { 10 | 11 | public final int index; 12 | public final boolean failRetry; 13 | 14 | public GroupIndex(int index, boolean failRetry){ 15 | this.index = index; 16 | this.failRetry = failRetry; 17 | } 18 | 19 | @Override 20 | public String toString() { 21 | return "GroupIndex [index=" + index + ", failRetry=" + failRetry + "]"; 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /tddl-group/src/main/java/com/taobao/tddl/group/jdbc/DataSourceFetcher.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.group.jdbc; 2 | 3 | import javax.sql.DataSource; 4 | 5 | import com.taobao.tddl.common.model.DBType; 6 | 7 | /** 8 | * 为了避免对TGroupDataSource这一层对spring的依赖 9 | * 10 | * @author linxuan 11 | */ 12 | public interface DataSourceFetcher { 13 | 14 | DataSource getDataSource(String key); 15 | 16 | DBType getDataSourceDBType(String key); 17 | } 18 | -------------------------------------------------------------------------------- /tddl-group/src/main/java/com/taobao/tddl/group/listener/DataSourceChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.group.listener; 2 | 3 | import java.util.Map; 4 | 5 | import javax.sql.DataSource; 6 | 7 | public interface DataSourceChangeListener { 8 | 9 | public void onDataSourceChanged(Map dataSources); 10 | } 11 | -------------------------------------------------------------------------------- /tddl-group/src/test/resources/conf/group0/app.properties: -------------------------------------------------------------------------------- 1 | userName=tddl 2 | minPoolSize=1 3 | maxPoolSize=2 4 | idleTimeout=10 5 | blockingTimeout=5000 6 | preparedStatementCacheSize=15 7 | connectionProperties=characterEncoding=gbk -------------------------------------------------------------------------------- /tddl-group/src/test/resources/conf/group0/globa.properties: -------------------------------------------------------------------------------- 1 | ip=10.232.31.154 2 | port=3306 3 | dbName=tddl_sample_0 4 | dbType=mysql 5 | dbStatus=RW -------------------------------------------------------------------------------- /tddl-group/src/test/resources/conf/group0/passwd.properties: -------------------------------------------------------------------------------- 1 | encPasswd=tddl -------------------------------------------------------------------------------- /tddl-group/src/test/resources/conf/group1/app.properties: -------------------------------------------------------------------------------- 1 | userName=tddl 2 | minPoolSize=1 3 | maxPoolSize=2 4 | idleTimeout=10 5 | blockingTimeout=5000 6 | preparedStatementCacheSize=15 7 | connectionProperties=characterEncoding=gbk -------------------------------------------------------------------------------- /tddl-group/src/test/resources/conf/group1/globa.properties: -------------------------------------------------------------------------------- 1 | ip=10.232.31.154 2 | port=3306 3 | dbName=tddl_sample_1 4 | dbType=mysql 5 | dbStatus=RW -------------------------------------------------------------------------------- /tddl-group/src/test/resources/conf/group1/passwd.properties: -------------------------------------------------------------------------------- 1 | encPasswd=tddl -------------------------------------------------------------------------------- /tddl-group/src/test/resources/conf/group2/app.properties: -------------------------------------------------------------------------------- 1 | userName=tddl 2 | minPoolSize=1 3 | maxPoolSize=2 4 | idleTimeout=10 5 | blockingTimeout=5000 6 | preparedStatementCacheSize=15 7 | connectionProperties=characterEncoding=gbk -------------------------------------------------------------------------------- /tddl-group/src/test/resources/conf/group2/globa.properties: -------------------------------------------------------------------------------- 1 | ip=10.232.31.154 2 | port=3306 3 | dbName=tddl_sample_2 4 | dbType=mysql 5 | dbStatus=RW -------------------------------------------------------------------------------- /tddl-group/src/test/resources/conf/group2/passwd.properties: -------------------------------------------------------------------------------- 1 | encPasswd=tddl -------------------------------------------------------------------------------- /tddl-hbase-sample/src/main/java/com/alibaba/asc/xuanwu/framework/common/tddl/util/TddlPartition.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-hbase-sample/src/main/java/com/alibaba/asc/xuanwu/framework/common/tddl/util/TddlPartition.java -------------------------------------------------------------------------------- /tddl-hbase-sample/src/main/java/com/alibaba/china/dw/dataopen/andor/rowcoder/BoltRowCoder.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.china.dw.dataopen.andor.rowcoder; 2 | 3 | import com.taobao.ustore.repo.hbase.RowkeyCoderSplitImpl; 4 | import com.taobao.ustore.repo.hbase.TablePhysicalSchema; 5 | 6 | public class BoltRowCoder extends RowkeyCoderSplitImpl { 7 | 8 | public BoltRowCoder(TablePhysicalSchema schema){ 9 | super(schema); 10 | } 11 | 12 | @Override 13 | public String getSpliter() { 14 | return " "; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /tddl-hbase-sample/src/main/java/com/alibaba/china/dw/dataopen/andor/rowcoder/IPageRowCoder.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.china.dw.dataopen.andor.rowcoder; 2 | 3 | import com.taobao.ustore.repo.hbase.RowkeyCoderSplitImpl; 4 | import com.taobao.ustore.repo.hbase.TablePhysicalSchema; 5 | 6 | public class IPageRowCoder extends RowkeyCoderSplitImpl { 7 | 8 | public IPageRowCoder(TablePhysicalSchema schema){ 9 | super(schema); 10 | } 11 | 12 | @Override 13 | public String getSpliter() { 14 | return "\4"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tddl-hbase-sample/src/main/resources/hbase_mapping.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | id,name,school 13 |
14 |
-------------------------------------------------------------------------------- /tddl-hbase-sample/src/main/resources/hbase_schema.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | id,name,school 13 |
14 |
-------------------------------------------------------------------------------- /tddl-hbase-sample/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | log4j.rootLogger=error,console 2 | 3 | #add by @junyu 4 | log4j.appender.console=org.apache.log4j.ConsoleAppender 5 | log4j.appender.console.layout=org.apache.log4j.PatternLayout 6 | log4j.appender.console.layout.ConversionPattern=%5p [%t] - %m%n 7 | log4j.appender.console.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}\:%L - %m%n 8 | 9 | -------------------------------------------------------------------------------- /tddl-hbase-sample/src/main/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56} - %msg%n 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tddl-manager/src/main/assembly/dev.xml: -------------------------------------------------------------------------------- 1 | 5 | dev 6 | 7 | dir 8 | 9 | false 10 | 11 | src/main/assembly/component.xml 12 | 13 | 14 | -------------------------------------------------------------------------------- /tddl-manager/src/main/assembly/release.xml: -------------------------------------------------------------------------------- 1 | 5 | release 6 | 7 | tar.gz 8 | 9 | false 10 | 11 | src/main/assembly/component.xml 12 | 13 | -------------------------------------------------------------------------------- /tddl-manager/src/main/java/com/alibaba/cobar/manager/dao/AbstrcatDAO.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.manager.dao; 2 | 3 | /** 4 | * @author haiqing.zhuhq 2011-6-14 5 | */ 6 | public interface AbstrcatDAO { 7 | 8 | boolean writePrefix(boolean flag); 9 | 10 | boolean writeProperty(String name, String value); 11 | 12 | boolean fileCopy(String xmlpath, String newpath); 13 | 14 | boolean backup(String date, String path); 15 | 16 | boolean recovery(final String date, String path); 17 | 18 | boolean recovery(); 19 | } 20 | -------------------------------------------------------------------------------- /tddl-manager/src/main/java/com/alibaba/cobar/manager/dao/PropertyDAO.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.manager.dao; 2 | 3 | /** 4 | * @author haiqing.zhuhq 2011-6-17 5 | */ 6 | public interface PropertyDAO { 7 | 8 | public boolean addTime(int time); 9 | 10 | public boolean deleteTime(int time); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /tddl-manager/src/main/java/com/alibaba/cobar/manager/dao/UserDAO.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.manager.dao; 2 | 3 | import java.util.List; 4 | 5 | import com.alibaba.cobar.manager.dataobject.xml.UserDO; 6 | 7 | public interface UserDAO { 8 | 9 | public UserDO validateUser(String username, String password); 10 | 11 | public boolean checkName(String username); 12 | 13 | public boolean checkName(String username, long userId); 14 | 15 | public List getUserList(); 16 | 17 | public boolean addUser(UserDO user); 18 | 19 | public boolean modifyUser(UserDO user); 20 | 21 | public UserDO getUserById(long id); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /tddl-manager/src/main/java/com/alibaba/cobar/manager/dao/delegate/DataSourceFactory.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.manager.dao.delegate; 2 | 3 | import javax.sql.DataSource; 4 | 5 | public interface DataSourceFactory { 6 | 7 | public DataSource createDataSource(String ip, int port, String user, String password); 8 | } 9 | -------------------------------------------------------------------------------- /tddl-manager/src/main/java/com/alibaba/cobar/manager/dao/xml/XMLFileLoader.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.manager.dao.xml; 2 | 3 | public interface XMLFileLoader { 4 | 5 | public String getFilePath(); 6 | } 7 | -------------------------------------------------------------------------------- /tddl-manager/src/main/java/com/alibaba/cobar/manager/dataobject/cobarnode/TimeStamp.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.manager.dataobject.cobarnode; 2 | 3 | import com.alibaba.cobar.manager.util.FormatUtil; 4 | 5 | /** 6 | * @author wenfeng.cenwf 2011-4-14 7 | */ 8 | public class TimeStamp { 9 | 10 | private long timestamp; 11 | 12 | public long getTimestamp() { 13 | return timestamp; 14 | } 15 | 16 | public void setTimestamp(long timestamp) { 17 | this.timestamp = timestamp; 18 | } 19 | 20 | public String getFormatTime() { 21 | return FormatUtil.fromMilliseconds2String(this.timestamp); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /tddl-manager/src/main/java/com/alibaba/cobar/manager/dataobject/cobarnode/TimeStampedVO.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.manager.dataobject.cobarnode; 2 | 3 | import com.alibaba.fastjson.JSONObject; 4 | 5 | /** 6 | * (created at 2010-7-26) 7 | * 8 | * @author QIU Shuo 9 | */ 10 | public abstract class TimeStampedVO { 11 | 12 | private long sampleTimeStamp; 13 | 14 | public long getSampleTimeStamp() { 15 | return sampleTimeStamp; 16 | } 17 | 18 | public void setSampleTimeStamp(long sampleTimeStamp) { 19 | this.sampleTimeStamp = sampleTimeStamp; 20 | } 21 | 22 | public String toJSONString() { 23 | return JSONObject.toJSONString(this); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /tddl-manager/src/main/java/com/alibaba/cobar/manager/util/FluenceArrayList.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.manager.util; 2 | 3 | import java.util.ArrayList; 4 | 5 | /** 6 | * (created at 2010-7-22) 7 | * 8 | * @author QIU Shuo 9 | */ 10 | public class FluenceArrayList extends ArrayList { 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | public FluenceArrayList addElement(E e) { 15 | add(e); 16 | return this; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /tddl-manager/src/main/java/com/alibaba/cobar/manager/util/FluenceHashSet.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.manager.util; 2 | 3 | import java.util.HashSet; 4 | 5 | /** 6 | * (created at 2010-9-16) 7 | * 8 | * @author QIU Shuo 9 | */ 10 | public class FluenceHashSet extends HashSet { 11 | 12 | private static final long serialVersionUID = -2553186102347930216L; 13 | 14 | public FluenceHashSet(){ 15 | super(); 16 | } 17 | 18 | public FluenceHashSet(int initialCapacity){ 19 | super(initialCapacity); 20 | } 21 | 22 | public FluenceHashSet addElement(E e) { 23 | super.add(e); 24 | return this; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /tddl-manager/src/main/java/com/alibaba/cobar/manager/util/MathUtil.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.manager.util; 2 | 3 | /** 4 | * (created at 2010-9-28) 5 | * 6 | * @author QIU Shuo 7 | * @author wenfeng.cenwf 2011-4-16 8 | * @author haiqing.zhuhq 2011-9-1 9 | */ 10 | public class MathUtil { 11 | 12 | public static double getDerivate(long newVal, long oldVal, long timestamp, long oldtimestamp, double scale) { 13 | return timestamp - oldtimestamp == 0 ? 0 : (newVal - oldVal) * scale / (timestamp - oldtimestamp); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/data/cluster.xml-2014-06-25: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1 5 | 0 6 | test 7 | test 8 | test 9 | 2012-11-27 10 | sdf 11 | 12 | -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/data/cobar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1 5 | 1 6 | corona 7 | Active 8 | 10.249.193.170 9 | 8508 10 | 9508 11 | YUNJI_APP 12 | 71dedf5e45d141cee30031660180113d 13 | 0 14 | 15 | -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/data/cobar.xml-2014-06-25: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/data/env.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1 5 | center 6 | 日常 7 | 8 | -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/data/property.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 1 4 | -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/data/user.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1 5 | root 6 | root 7 | 66CBEEDC2239D6A1 8 | System_Admin 9 | Normal 10 | 11 | -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/data/vip.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | log4j.rootLogger=INFO,console 2 | 3 | #add by @junyu 4 | log4j.appender.console=org.apache.log4j.ConsoleAppender 5 | log4j.appender.console.layout=org.apache.log4j.PatternLayout 6 | log4j.appender.console.layout.ConversionPattern=%5p [%t] - %m%n 7 | log4j.appender.console.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}\:%L - %m%n 8 | 9 | -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/tddl.properties: -------------------------------------------------------------------------------- 1 | ## otter manager domain name 2 | tddl.domainName = 127.0.0.1 3 | ## otter manager http port 4 | tddl.port = 8080 5 | ## jetty web config xml 6 | tddl.jetty = jetty.xml 7 | 8 | ## xml data 9 | xmlpath=data 10 | 11 | ## connect tddl-server config 12 | maxActive = 50 13 | minIdle = 0 14 | ##1min 15 | timeBetweenEvictionRunsMillis = 60000 16 | ##3min 17 | minEvictableIdleTimeMillis = 180000 18 | 19 | ## datasource idle config 20 | ##10min 21 | nodeEvictThreadSweepInverval = 600000 22 | ##30min 23 | nodeAdapterIdleTime = 1800000 -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/flash/amcharts_key.txt: -------------------------------------------------------------------------------- 1 | AMCHART-LNKS-4236-4409-4935-1252 -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/flash/amline.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/flash/amline.swf -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/flash/amline.swf.tmp: -------------------------------------------------------------------------------- 1 | CWSoZx滀 -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/flash/ampie.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/flash/ampie.swf -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/flash/ampie.swf.tmp: -------------------------------------------------------------------------------- 1 | CWS# -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/flash/cluster_data.txt: -------------------------------------------------------------------------------- 1 | 0;0;0 2 | -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/flash/cobar_data.txt: -------------------------------------------------------------------------------- 1 | 0;0;0 2 | -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/flash/expressInstall.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/flash/expressInstall.swf -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/flash/expressInstall.swf.tmp: -------------------------------------------------------------------------------- 1 | CWS3x渽SMO跕; -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/flash/jvm_data.txt: -------------------------------------------------------------------------------- 1 | 0;0;0;0 2 | -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/flash/network_data.txt: -------------------------------------------------------------------------------- 1 | 0;0;0 2 | -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/flash/pro_buffer_data.txt: -------------------------------------------------------------------------------- 1 | Used;1 2 | Idle;1 -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/flash/processor_data.txt: -------------------------------------------------------------------------------- 1 | 0;0;0 2 | -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/flash/threadpool_data.txt: -------------------------------------------------------------------------------- 1 | Active;1 2 | Idle;1 -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/404.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/404.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/404.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDRJ -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/Thumbs.db -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/Thumbs.db.tmp: -------------------------------------------------------------------------------- 1 | 邢唷 -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/btn3_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/btn3_1.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/btn3_1.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDRi澌沔tEXtSoftwareAdobe ImageReadyq蒭<絀DATx陟 -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/btn3_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/btn3_2.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/btn3_2.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDRi澌沔tEXtSoftwareAdobe ImageReadyq蒭<馡DATx陟浗 -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/button_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/button_hover.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/button_hover.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDRA掖P pHYs  殰 4 | MiCCPPhotoshop ICC profilex跐SwX擏>喵eVB仞睏l -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/button_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/button_normal.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/button_normal.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDRA掖P pHYs  殰 4 | MiCCPPhotoshop ICC profilex跐SwX擏>喵eVB仞睏l -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/close.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/close.gif -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/close.gif.tmp: -------------------------------------------------------------------------------- 1 | GIF89a -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/close_over.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/close_over.gif -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/close_over.gif.tmp: -------------------------------------------------------------------------------- 1 | GIF89a -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/down.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/down.gif -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/down.gif.tmp: -------------------------------------------------------------------------------- 1 | GIF89a -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/down_over.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/down_over.gif -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/down_over.gif.tmp: -------------------------------------------------------------------------------- 1 | GIF89a -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/down_time.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/down_time.gif -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/down_time.gif.tmp: -------------------------------------------------------------------------------- 1 | GIF89a -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/down_time_over.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/down_time_over.gif -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/down_time_over.gif.tmp: -------------------------------------------------------------------------------- 1 | GIF89a -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/exit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/exit.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/exit.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/forbidden.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/forbidden.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/forbidden.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR4|纩_ pHYs  殰 4 | MiCCPPhotoshop ICC profilex跐SwX擏>喵eVB仞睏l -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/head_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/head_bg.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/head_bg.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDRNny雊 pHYs  殰 4 | MiCCPPhotoshop ICC profilex跐SwX擏>喵eVB仞睏l -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/ico_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/ico_add.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/ico_add.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR 鄳tEXtSoftwareAdobe ImageReadyq蒭<袸DATx赽|聆% -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/ico_del.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/ico_del.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/ico_del.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR 鄳tEXtSoftwareAdobe ImageReadyq蒭<IDATx趧復JA劔{7 -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/k_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/k_bg.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/k_bg.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR^ -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/k_bg2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/k_bg2.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/k_bg2.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR^ -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/k_bg3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/k_bg3.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/k_bg3.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR^`骩 -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/left.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/left.gif -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/left.gif.tmp: -------------------------------------------------------------------------------- 1 | GIF89a -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/left_over.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/left_over.gif -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/left_over.gif.tmp: -------------------------------------------------------------------------------- 1 | GIF89a -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/line_dot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/line_dot.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/line_dot.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDRF.懊tEXtSoftwareAdobe ImageReadyq蒭<IDATx赽:x -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/login_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/login_bg.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/login_bg.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR 4 | i -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/login_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/login_box.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/login_box.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR$ -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/login_btn_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/login_btn_hover.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/login_btn_hover.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDRA掖P pHYs  殰 4 | MiCCPPhotoshop ICC profilex跐SwX擏>喵eVB仞睏l -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/login_btn_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/login_btn_normal.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/login_btn_normal.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDRA掖PtEXtSoftwareAdobe ImageReadyq蒭<蔍DATx陟 -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/login_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/login_logo.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/login_logo.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/login_shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/login_shadow.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/login_shadow.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/login_top_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/login_top_bg.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/login_top_bg.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/logo.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/logo.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/main_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/main_bg.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/main_bg.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/nav_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/nav_bg.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/nav_bg.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR┇05 pHYs  殰 4 | MiCCPPhotoshop ICC profilex跐SwX擏>喵eVB仞睏l -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/nav_btn_bg22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/nav_btn_bg22.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/nav_btn_bg22.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/nav_btn_bg3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/nav_btn_bg3.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/nav_btn_bg3.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/nav_btn_bg33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/nav_btn_bg33.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/nav_btn_bg33.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/nav_btn_bg44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/nav_btn_bg44.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/nav_btn_bg44.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/nav_pass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/nav_pass.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/nav_pass.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR璣 -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/nav_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/nav_selected.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/nav_selected.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR璣 -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/pop_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/pop_close.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/pop_close.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR崏 tEXtSoftwareAdobe ImageReadyq蒭< @iTXtXML:com.adobe.xmp喵eVB仞睏l -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/pop_righttop_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/pop_righttop_small.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/pop_righttop_small.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR.iE -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/pop_tips_bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/pop_tips_bottom.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/pop_tips_bottom.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/pop_tips_mid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/pop_tips_mid.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/pop_tips_mid.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/pop_tips_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/pop_tips_top.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/pop_tips_top.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/right.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/right.gif -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/right.gif.tmp: -------------------------------------------------------------------------------- 1 | GIF89a -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/right_over.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/right_over.gif -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/right_over.gif.tmp: -------------------------------------------------------------------------------- 1 | GIF89a -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/search_global_l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/search_global_l.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/search_global_l.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDRM  -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/search_global_m.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/search_global_m.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/search_global_m.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR \噮M pHYs  殰 4 | MiCCPPhotoshop ICC profilex跐SwX擏>喵eVB仞睏l -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/search_global_r.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/search_global_r.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/search_global_r.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR K -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/search_global_r2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/search_global_r2.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/search_global_r2.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR 钒>N pHYs  殰 4 | MiCCPPhotoshop ICC profilex跐SwX擏>喵eVB仞睏l -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/search_global_r3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/search_global_r3.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/search_global_r3.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR 綶 -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/search_go.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/search_go.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/search_go.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR(@ -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/search_m.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/search_m.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/search_m.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR \噮M pHYs  殰 4 | MiCCPPhotoshop ICC profilex跐SwX擏>喵eVB仞睏l -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/tab_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/tab_active.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/tab_active.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR鋍 -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/tab_bg2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/tab_bg2.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/tab_bg2.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDRT*= pHYs  殰 4 | MiCCPPhotoshop ICC profilex跐SwX擏>喵eVB仞睏l -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/table_title_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-manager/src/main/resources/webapp/images/table_title_bg.png -------------------------------------------------------------------------------- /tddl-manager/src/main/resources/webapp/images/table_title_bg.png.tmp: -------------------------------------------------------------------------------- 1 | 塒NG 2 |  3 | IHDR鄸AtEXtSoftwareAdobe ImageReadyq蒭< @iTXtXML:com.adobe.xmp 2 | Copyright @ 2012-2017  alibaba.com  版权所有 3 | -------------------------------------------------------------------------------- /tddl-manager/src/test/java/com/alibaba/cobar/manager/qa/monitor/TestDataBases.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.manager.qa.monitor; 2 | 3 | import java.util.List; 4 | 5 | import org.junit.Assert; 6 | import org.junit.Test; 7 | 8 | public class TestDataBases extends TestCobarAdapter { 9 | 10 | @Test 11 | public void testDataBasesNum() { 12 | List dataBasesList = cobarAdapter.listDataBases(); 13 | Assert.assertTrue(dataBasesList.size() > 0); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tddl-manager/src/test/java/com/alibaba/cobar/manager/qa/monitor/TestDataSources.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.manager.qa.monitor; 2 | 3 | import java.util.List; 4 | 5 | import org.junit.Assert; 6 | import org.junit.Test; 7 | 8 | import com.alibaba.cobar.manager.dataobject.cobarnode.DataNodesStatus; 9 | 10 | public class TestDataSources extends TestCobarAdapter { 11 | 12 | @Test 13 | public void testDataSourcesCommand() { 14 | List dsStatusList = cobarAdapter.listDataNodes(); 15 | Assert.assertTrue(dsStatusList.size() > 0); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /tddl-manager/src/test/java/com/alibaba/cobar/manager/qa/monitor/TestServerStatus.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.manager.qa.monitor; 2 | 3 | import org.junit.Assert; 4 | import org.junit.Test; 5 | 6 | public class TestServerStatus extends TestCobarAdapter { 7 | 8 | @Test 9 | public void testStatus() { 10 | String status = cobarAdapter.getServerStatus().getStatus(); 11 | Assert.assertEquals(status, "RUNNING"); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /tddl-manager/src/test/java/com/alibaba/cobar/manager/qa/util/TestUtils.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.manager.qa.util; 2 | 3 | public class TestUtils { 4 | 5 | public static void waitForMonment(long time) { 6 | try { 7 | Thread.sleep(time); 8 | } catch (InterruptedException e) { 9 | e.printStackTrace(); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /tddl-manager/src/test/java/com/alibaba/cobar/manager/test/TestXMLFileLoader.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.manager.test; 2 | 3 | import com.alibaba.cobar.manager.dao.xml.XMLFileLoaderPath; 4 | 5 | public class TestXMLFileLoader { 6 | 7 | public static void main(String[] args) { 8 | 9 | XMLFileLoaderPath p = new XMLFileLoaderPath(); 10 | System.out.println(p.getFilePath()); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /tddl-manager/src/test/resources/WEB-INF/velocity.properties: -------------------------------------------------------------------------------- 1 | resource.loader=class 2 | class.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader 3 | file.resource.loader.cache=false 4 | -------------------------------------------------------------------------------- /tddl-manager/src/test/resources/cobarNode.properties: -------------------------------------------------------------------------------- 1 | cobar.ip=10.20.153.179 2 | cobar.dml.port=8066 3 | cobar.manager.port=9066 4 | cobar.user=test 5 | cobar.password= -------------------------------------------------------------------------------- /tddl-monitor/src/main/java/com/taobao/tddl/monitor/StatMonitorMBean.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.monitor; 2 | 3 | /** 4 | * @author guangxia 5 | * @since 1.0, 2010-2-9 下午03:40:20 6 | */ 7 | public interface StatMonitorMBean { 8 | 9 | /** 10 | * 重新开始实时统计 11 | */ 12 | void resetStat(); 13 | 14 | /** 15 | * 最新统计的时间点 16 | * 17 | * @return 18 | */ 19 | long getStatDuration(); 20 | 21 | /** 22 | * 获取实时统计结果 23 | * 24 | * @param key1 25 | * @param key2 26 | * @param key3 27 | * @return 28 | */ 29 | String getStatResult(String key1, String key2, String key3); 30 | 31 | long getDuration(); 32 | 33 | } 34 | -------------------------------------------------------------------------------- /tddl-monitor/src/main/java/com/taobao/tddl/monitor/unit/TddlRouterUnitsListener.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.monitor.unit; 2 | 3 | /** 4 | * 屏蔽对route unit的直接依赖 5 | * 6 | * @author jianghang 2014-2-28 下午4:14:59 7 | * @since 5.0.0 8 | */ 9 | public interface TddlRouterUnitsListener { 10 | 11 | public enum STATUS { 12 | BEGIN, END 13 | }; 14 | 15 | public boolean onChanged(STATUS status); 16 | } 17 | -------------------------------------------------------------------------------- /tddl-monitor/src/main/java/com/taobao/tddl/monitor/unit/UnitDeployInvalidException.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.monitor.unit; 2 | 3 | /** 4 | * @author junyu 5 | * @date 2013-5-8下午04:08:08 6 | */ 7 | public class UnitDeployInvalidException extends Exception { 8 | 9 | private static final long serialVersionUID = 6338010335576673742L; 10 | 11 | public UnitDeployInvalidException(){ 12 | super(); 13 | } 14 | 15 | public UnitDeployInvalidException(String message, Throwable cause){ 16 | super(message, cause); 17 | } 18 | 19 | public UnitDeployInvalidException(String message){ 20 | super(message); 21 | } 22 | 23 | public UnitDeployInvalidException(Throwable cause){ 24 | super(cause); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /tddl-monitor/src/main/resources/META-INF/services/com.taobao.tddl.monitor.eagleeye.TddlEagleeye: -------------------------------------------------------------------------------- 1 | com.taobao.tddl.monitor.eagleeye.MockTddlEagleeye -------------------------------------------------------------------------------- /tddl-monitor/src/main/resources/META-INF/services/com.taobao.tddl.monitor.unit.TddlRouter: -------------------------------------------------------------------------------- 1 | com.taobao.tddl.monitor.unit.MockTddlRouter -------------------------------------------------------------------------------- /tddl-net/src/main/java/com/alibaba/cobar/Isolations.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar; 2 | 3 | /** 4 | * 事务隔离级别定义 5 | * 6 | * @author xianmao.hexm 7 | */ 8 | public enum Isolations { 9 | 10 | READ_UNCOMMITTED(1), READ_COMMITTED(2), REPEATED_READ(4), SERIALIZABLE(8); 11 | 12 | private int code; 13 | 14 | Isolations(int code){ 15 | this.code = code; 16 | } 17 | 18 | public int getCode() { 19 | return code; 20 | } 21 | 22 | public static Isolations valuesOf(String name) { 23 | for (Isolations iso : Isolations.values()) { 24 | if (iso.name().equals(name)) { 25 | return iso; 26 | } 27 | } 28 | 29 | throw new IllegalArgumentException("unknown isolations:" + name); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /tddl-net/src/main/java/com/alibaba/cobar/Versions.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar; 2 | 3 | import com.taobao.tddl.common.utils.version.Version; 4 | 5 | /** 6 | * @author xianmao.hexm 7 | */ 8 | public interface Versions { 9 | 10 | /** 协议版本 */ 11 | byte PROTOCOL_VERSION = 10; 12 | 13 | /** 服务器版本 */ 14 | String SERVER_VERSION = Version.getVersion(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tddl-net/src/main/java/com/alibaba/cobar/net/handler/NIOHandler.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.net.handler; 2 | 3 | /** 4 | * @author xianmao.hexm 5 | */ 6 | public interface NIOHandler { 7 | 8 | void handle(byte[] data); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /tddl-net/src/main/java/com/alibaba/cobar/net/handler/Privileges.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.net.handler; 2 | 3 | import java.util.Set; 4 | 5 | /** 6 | * 权限提供者 7 | * 8 | * @author xianmao.hexm 9 | */ 10 | public interface Privileges { 11 | 12 | /** 13 | * 检查schema是否存在 14 | */ 15 | boolean schemaExists(String schema); 16 | 17 | /** 18 | * 检查用户是否存在,并且可以使用host实行隔离策略。 19 | */ 20 | boolean userExists(String user, String host); 21 | 22 | /** 23 | * 提供用户的服务器端密码 24 | */ 25 | String getPassword(String user); 26 | 27 | /** 28 | * 提供有效的用户schema集合 29 | */ 30 | Set getUserSchemas(String user); 31 | 32 | /** 33 | * 判断是否是信任的白名单IP,可以没有配置信任白名单 34 | */ 35 | boolean IsTrustedIp(String host); 36 | 37 | } 38 | -------------------------------------------------------------------------------- /tddl-net/src/main/java/com/alibaba/cobar/net/handler/QueryHandler.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.net.handler; 2 | 3 | /** 4 | * 查询处理器 5 | * 6 | * @author xianmao.hexm 7 | */ 8 | public interface QueryHandler { 9 | 10 | void query(String sql); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /tddl-net/src/main/java/com/alibaba/cobar/net/packet/MySQLPacket.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.net.packet; 2 | 3 | /** 4 | * @author xianmao.hexm 5 | */ 6 | public abstract class MySQLPacket { 7 | 8 | public int packetLength; 9 | public byte packetId; 10 | 11 | protected abstract String packetInfo(); 12 | 13 | @Override 14 | public String toString() { 15 | return new StringBuilder().append(packetInfo()) 16 | .append("{length=") 17 | .append(packetLength) 18 | .append(",id=") 19 | .append(packetId) 20 | .append('}') 21 | .toString(); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /tddl-net/src/main/java/com/alibaba/cobar/net/packet/PingPacket.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.net.packet; 2 | 3 | /** 4 | * @author xianmao.hexm 2012-4-28 5 | */ 6 | public class PingPacket extends MySQLPacket { 7 | 8 | public static final byte[] PING = new byte[] { 1, 0, 0, 0, 14 }; 9 | 10 | @Override 11 | protected String packetInfo() { 12 | return "MySQL Ping Packet"; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /tddl-net/src/main/java/com/alibaba/cobar/net/packet/QuitPacket.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.net.packet; 2 | 3 | /** 4 | * @author xianmao.hexm 5 | */ 6 | public class QuitPacket extends MySQLPacket { 7 | 8 | public static final byte[] QUIT = new byte[] { 1, 0, 0, 0, 1 }; 9 | 10 | @Override 11 | protected String packetInfo() { 12 | return "MySQL Quit Packet"; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /tddl-net/src/main/java/com/alibaba/cobar/net/util/TimeUtil.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.net.util; 2 | 3 | /** 4 | * 弱精度的计时器,考虑性能不使用同步策略。 5 | * 6 | * @author xianmao.hexm 2011-1-18 下午06:10:55 7 | */ 8 | public class TimeUtil { 9 | 10 | private static long CURRENT_TIME = System.currentTimeMillis(); 11 | 12 | public static final long currentTimeMillis() { 13 | return CURRENT_TIME; 14 | } 15 | 16 | public static final void update() { 17 | CURRENT_TIME = System.currentTimeMillis(); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /tddl-net/src/test/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56} - 6 | %msg%n 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/config/table/IndexManager.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.config.table; 2 | 3 | import com.taobao.tddl.common.model.lifecycle.Lifecycle; 4 | 5 | /** 6 | * 获取索引信息 7 | * 8 | * @since 5.0.0 9 | */ 10 | public interface IndexManager extends Lifecycle { 11 | 12 | IndexMeta getIndexByName(String name); 13 | } 14 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/config/table/IndexType.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.config.table; 2 | 3 | /** 4 | * @author jianxing 5 | */ 6 | public enum IndexType { 7 | 8 | NONE, BTREE, HASH, INVERSE; 9 | } 10 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/config/table/Relationship.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.config.table; 2 | 3 | /** 4 | * Defines the relationship between instances of the entity class and the 5 | * secondary keys. 6 | * 7 | * @author jianxing 8 | */ 9 | public enum Relationship { 10 | NONE, ONE_TO_ONE, MANY_TO_ONE, ONE_TO_MANY, MANY_TO_MANY; 11 | } 12 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/CanVisit.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core; 2 | 3 | public interface CanVisit { 4 | 5 | void accept(PlanVisitor visitor); 6 | } 7 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/ast/delegate/ShareDelegate.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.ast.delegate; 2 | 3 | import java.lang.annotation.Documented; 4 | import java.lang.annotation.ElementType; 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | import java.lang.annotation.Target; 8 | 9 | /** 10 | * 定义需要被share模式代理的方法 11 | */ 12 | @Documented 13 | @Retention(RetentionPolicy.RUNTIME) 14 | @Target({ ElementType.TYPE, ElementType.METHOD }) 15 | public @interface ShareDelegate { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/datatype/BigBitType.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.datatype; 2 | 3 | import com.taobao.tddl.common.utils.convertor.ConvertorHelper; 4 | 5 | /** 6 | * 标准的Bit类型实现 7 | * 8 | * @author jianghang 2014-1-21 下午5:37:38 9 | * @since 5.0.0 10 | */ 11 | public class BigBitType extends BigDecimalType { 12 | 13 | public BigBitType(){ 14 | super(); 15 | convertor = ConvertorHelper.bitBytesToBigDecimal; 16 | } 17 | 18 | @Override 19 | public int getSqlType() { 20 | return java.sql.Types.DECIMAL; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/datatype/BitType.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.datatype; 2 | 3 | /** 4 | * 标准的Bit类型实现 5 | * 6 | * @author jianghang 2014-1-21 下午5:37:38 7 | * @since 5.0.0 8 | */ 9 | public class BitType extends IntegerType { 10 | 11 | @Override 12 | public int getSqlType() { 13 | return java.sql.Types.BIT; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/datatype/BlobType.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.datatype; 2 | 3 | import java.sql.Blob; 4 | 5 | /** 6 | * {@linkplain Blob}类型,使用BytesType来替代 7 | * 8 | * @author jianghang 2014-1-21 下午5:42:45 9 | * @since 5.0.0 10 | */ 11 | public class BlobType extends BytesType { 12 | 13 | @Override 14 | public int getSqlType() { 15 | return java.sql.Types.BLOB; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/datatype/Calculator.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.datatype; 2 | 3 | public interface Calculator { 4 | 5 | Object add(Object v1, Object v2); 6 | 7 | Object sub(Object v1, Object v2); 8 | 9 | Object multiply(Object v1, Object v2); 10 | 11 | Object divide(Object v1, Object v2); 12 | 13 | Object mod(Object v1, Object v2); 14 | 15 | Object and(Object v1, Object v2); 16 | 17 | Object or(Object v1, Object v2); 18 | 19 | Object xor(Object v1, Object v2); 20 | 21 | Object not(Object v1); 22 | 23 | Object bitAnd(Object v1, Object v2); 24 | 25 | Object bitOr(Object v1, Object v2); 26 | 27 | Object bitXor(Object v1, Object v2); 28 | 29 | Object bitNot(Object v1); 30 | } 31 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/datatype/ClobType.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.datatype; 2 | 3 | import java.sql.Clob; 4 | 5 | /** 6 | * {@linkplain Clob}类型,使用StringType来代替 7 | * 8 | * @author jianghang 2014-1-21 下午5:47:12 9 | * @since 5.0.0 10 | */ 11 | public class ClobType extends StringType { 12 | 13 | @Override 14 | public int getSqlType() { 15 | return java.sql.Types.CLOB; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/datatype/CorruptEncodingException.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.datatype; 2 | 3 | import org.apache.commons.lang.exception.NestableRuntimeException; 4 | 5 | public class CorruptEncodingException extends NestableRuntimeException { 6 | 7 | private static final long serialVersionUID = -7798002309588878953L; 8 | 9 | public CorruptEncodingException(String message){ 10 | super(message); 11 | } 12 | 13 | public CorruptEncodingException(String message, Throwable cause){ 14 | super(message, cause); 15 | } 16 | 17 | public CorruptEncodingException(Throwable cause){ 18 | super(cause); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/datatype/UndecidedType.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.datatype; 2 | 3 | /** 4 | * 未决类型 5 | * 6 | * @author jianghang 2014-5-23 下午8:27:59 7 | * @since 5.1.0 8 | */ 9 | public class UndecidedType extends StringType { 10 | 11 | @Override 12 | public int getSqlType() { 13 | return UNDECIDED_SQL_TYPE; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/datatype/YearType.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.datatype; 2 | 3 | /** 4 | * 针对mysql中特殊的year type 5 | * 6 | * @author jianghang 2014-5-23 下午5:22:28 7 | * @since 5.1.0 8 | */ 9 | public class YearType extends LongType { 10 | 11 | @Override 12 | public int getSqlType() { 13 | return YEAR_SQL_TYPE; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/expression/IBindVal.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.expression; 2 | 3 | import com.taobao.tddl.common.jdbc.Parameters; 4 | import com.taobao.tddl.optimizer.core.CanVisit; 5 | import com.taobao.tddl.optimizer.core.PlanVisitor; 6 | 7 | /** 8 | * 绑定变量 9 | */ 10 | public interface IBindVal extends Comparable, CanVisit { 11 | 12 | public Object assignment(Parameters parameterSettings); 13 | 14 | @Override 15 | void accept(PlanVisitor visitor); 16 | 17 | /** 18 | * 返回用户设定绑定变量的原始下标,真正执行时下表会变化 19 | */ 20 | Integer getOrignIndex(); 21 | 22 | /** 23 | * 返回绑定变量的具体值 24 | */ 25 | Object getValue(); 26 | 27 | IBindVal copy(); 28 | } 29 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/expression/IColumn.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.expression; 2 | 3 | /** 4 | * 代表一个列信息,非函数列 5 | * 6 | * @author jianxing 7 | * @author whisper 8 | * @author jianghang 9 | * @since 5.0.0 10 | */ 11 | public interface IColumn extends ISelectable { 12 | 13 | public static final String STAR = "*"; 14 | } 15 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/expression/IGroupFilter.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.expression; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * group filter, ie: (id = 1 or id = 3 or id is null)
7 | * 将多个相同列的or filter条件做为一个整体,进行下推处理 8 | * 9 | * @author jianghang 2014-7-3 下午3:15:27 10 | * @since 5.1.7 11 | */ 12 | public interface IGroupFilter extends IFilter { 13 | 14 | public Object getColumn(); 15 | 16 | public IGroupFilter setColumn(Object column); 17 | 18 | public List getSubFilter(); 19 | 20 | public IGroupFilter setSubFilter(List subFilters); 21 | 22 | public IGroupFilter addSubFilter(IFilter subFilter); 23 | } 24 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/expression/ISequenceVal.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.expression; 2 | 3 | 4 | /** 5 | * sequence.nextval 6 | * 7 | * @author jianghang 2014-4-28 下午4:10:00 8 | * @since 5.1.0 9 | */ 10 | public interface ISequenceVal extends IBindVal, Comparable { 11 | 12 | public static final String SEQ_NEXTVAL = "NEXTVAL"; 13 | 14 | public void setOriginIndex(int index); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/expression/bean/LobVal.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.expression.bean; 2 | 3 | /** 4 | * @since 5.0.0 5 | */ 6 | public class LobVal implements Comparable { 7 | 8 | private String str; 9 | private String introducer; 10 | 11 | public LobVal(String str, String introducer){ 12 | this.str = str; 13 | this.introducer = introducer; 14 | } 15 | 16 | @Override 17 | public int compareTo(String o) { 18 | return this.str.compareTo(o); 19 | } 20 | 21 | public String getStr() { 22 | return str; 23 | } 24 | 25 | public String getIntroducer() { 26 | return introducer; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/plan/bean/Replace.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.plan.bean; 2 | 3 | import com.taobao.tddl.optimizer.core.ASTNodeFactory; 4 | import com.taobao.tddl.optimizer.core.plan.dml.IReplace; 5 | 6 | public class Replace extends Put implements IReplace { 7 | 8 | public Replace(){ 9 | putType = PUT_TYPE.REPLACE; 10 | } 11 | 12 | @Override 13 | public IReplace copy() { 14 | IReplace replace = ASTNodeFactory.getInstance().createReplace(); 15 | copySelfTo(replace); 16 | return replace; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/plan/bean/Update.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.plan.bean; 2 | 3 | import com.taobao.tddl.optimizer.core.ASTNodeFactory; 4 | import com.taobao.tddl.optimizer.core.plan.dml.IUpdate; 5 | 6 | public class Update extends Put implements IUpdate { 7 | 8 | public Update(){ 9 | putType = PUT_TYPE.UPDATE; 10 | } 11 | 12 | @Override 13 | public IUpdate copy() { 14 | IUpdate update = ASTNodeFactory.getInstance().createUpdate(); 15 | copySelfTo(update); 16 | return update; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/plan/dml/IDelete.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.plan.dml; 2 | 3 | import com.taobao.tddl.optimizer.core.plan.IPut; 4 | 5 | /** 6 | * @since 5.0.0 7 | */ 8 | public interface IDelete extends IPut { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/plan/dml/IInsert.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.plan.dml; 2 | 3 | import java.util.List; 4 | 5 | import com.taobao.tddl.optimizer.core.expression.ISelectable; 6 | import com.taobao.tddl.optimizer.core.plan.IPut; 7 | 8 | /** 9 | * @since 5.0.0 10 | */ 11 | public interface IInsert extends IPut { 12 | 13 | void setDuplicateUpdateColumns(List duplicateUpdateColumns); 14 | 15 | void setDuplicateUpdateValues(List duplicateUpdateValues); 16 | 17 | public List getDuplicateUpdateValues(); 18 | 19 | public List getDuplicateUpdateColumns(); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/plan/dml/IReplace.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.plan.dml; 2 | 3 | import com.taobao.tddl.optimizer.core.plan.IPut; 4 | 5 | /** 6 | * @since 5.0.0 7 | */ 8 | public interface IReplace extends IPut { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/plan/dml/IUpdate.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.plan.dml; 2 | 3 | import com.taobao.tddl.optimizer.core.plan.IPut; 4 | 5 | /** 6 | * @since 5.0.0 7 | */ 8 | public interface IUpdate extends IPut { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/plan/query/IGetSequence.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.plan.query; 2 | 3 | import com.taobao.tddl.optimizer.core.plan.IDataNodeExecutor; 4 | 5 | /** 6 | * 兼容以前corona的获取sequnece逻辑 7 | * 8 | * @author jianghang 2014-5-19 下午3:55:03 9 | * @since 5.1.0 10 | */ 11 | public interface IGetSequence extends IDataNodeExecutor { 12 | 13 | public String getName(); 14 | 15 | public void setName(String name); 16 | 17 | public int getCount(); 18 | 19 | public void setCount(int count); 20 | } 21 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/plan/query/IReload.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.plan.query; 2 | 3 | import com.taobao.tddl.optimizer.core.ast.reload.ReloadNode.ReloadType; 4 | import com.taobao.tddl.optimizer.core.plan.IDataNodeExecutor; 5 | 6 | public interface IReload extends IDataNodeExecutor { 7 | 8 | ReloadType getType(); 9 | 10 | void setType(ReloadType type); 11 | } 12 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/plan/query/IShow.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.plan.query; 2 | 3 | import com.taobao.tddl.optimizer.core.ast.dal.BaseShowNode.ShowType; 4 | import com.taobao.tddl.optimizer.core.expression.IFilter; 5 | import com.taobao.tddl.optimizer.core.plan.IDataNodeExecutor; 6 | 7 | public interface IShow extends IDataNodeExecutor { 8 | 9 | public ShowType getType(); 10 | 11 | public void setType(ShowType type); 12 | 13 | public void setWhereFilter(IFilter filter); 14 | 15 | public IFilter getWhereFilter(); 16 | 17 | public String getPattern(); 18 | 19 | public void setPattern(String pattern); 20 | 21 | public boolean isFull(); 22 | 23 | public void setFull(boolean full); 24 | } 25 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/plan/query/IShowWithTable.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.plan.query; 2 | 3 | public interface IShowWithTable extends IShow { 4 | 5 | public void setTableName(String tableName); 6 | 7 | public String getTableName(); 8 | 9 | public String getActualTableName(); 10 | 11 | public void setActualTableName(String actualTableName); 12 | } 13 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/core/plan/query/IShowWithoutTable.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.core.plan.query; 2 | 3 | public interface IShowWithoutTable extends IShow { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/costbased/esitimater/QueryTreeCostEstimater.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.costbased.esitimater; 2 | 3 | import com.taobao.tddl.optimizer.core.ast.QueryTreeNode; 4 | 5 | /** 6 | * @author Dreamond 7 | */ 8 | public interface QueryTreeCostEstimater { 9 | 10 | /** 11 | * 根据查询树,预估一下执行代价,如果统计状态服务不可用,抛出异常 12 | * 13 | * @param query 14 | * @return 15 | * @throws StatisticsUnavailableException 16 | */ 17 | Cost estimate(QueryTreeNode query); 18 | } 19 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/costbased/esitimater/stat/StatManager.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.costbased.esitimater.stat; 2 | 3 | import com.taobao.tddl.common.model.lifecycle.Lifecycle; 4 | 5 | /** 6 | * 表上的统计信息 7 | */ 8 | public interface StatManager extends Lifecycle { 9 | 10 | KVIndexStat getKVIndex(String indexName); 11 | 12 | TableStat getTable(String tableName); 13 | } 14 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/parse/SqlParseManager.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.parse; 2 | 3 | import com.taobao.tddl.common.model.lifecycle.Lifecycle; 4 | import com.taobao.tddl.optimizer.exception.SqlParserException; 5 | 6 | /** 7 | * 基于sql构建语法树 8 | * 9 | * @author jianghang 2013-11-12 下午2:30:20 10 | * @since 5.0.0 11 | */ 12 | public interface SqlParseManager extends Lifecycle { 13 | 14 | public SqlAnalysisResult parse(final String sql, boolean cached) throws SqlParserException; 15 | } 16 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/sequence/ISequenceManager.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.sequence; 2 | 3 | import com.taobao.tddl.common.model.lifecycle.Lifecycle; 4 | 5 | /** 6 | * @author mengshi.sunmengshi 2014年4月28日 下午2:51:04 7 | * @since 5.1.0 8 | */ 9 | public interface ISequenceManager extends Lifecycle { 10 | 11 | public String AUTO_SEQ_PREFIX = "AUTO_SEQ_"; 12 | 13 | /** 14 | * @param seqName 15 | * @return 16 | */ 17 | Long nextValue(String seqName); 18 | 19 | /** 20 | * @param seqName 21 | * @param batchSize 22 | * @return 23 | */ 24 | Long nextValue(String seqName, int batchSize); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /tddl-optimizer/src/main/java/com/taobao/tddl/optimizer/utils/UniqIdGen.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.utils; 2 | 3 | import java.util.concurrent.atomic.AtomicLong; 4 | 5 | public class UniqIdGen { 6 | 7 | private static AtomicLong currentId = new AtomicLong(0L); 8 | private static AtomicLong subqueryId = new AtomicLong(0L); 9 | 10 | public static long genRequestID() { 11 | return currentId.addAndGet(1L); 12 | } 13 | 14 | public static long genSubqueryID() { 15 | return subqueryId.addAndGet(1L); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /tddl-optimizer/src/test/java/com/taobao/tddl/optimizer/config/MatrixParserTest.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.config; 2 | 3 | import org.junit.Test; 4 | 5 | import com.taobao.tddl.common.model.Matrix; 6 | import com.taobao.tddl.optimizer.config.table.parse.MatrixParser; 7 | 8 | public class MatrixParserTest { 9 | 10 | @Test 11 | public void testSimple() { 12 | Matrix matrix = MatrixParser.parse(Thread.currentThread() 13 | .getContextClassLoader() 14 | .getResourceAsStream("config/test_matrix.xml")); 15 | System.out.println(matrix); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /tddl-optimizer/src/test/java/com/taobao/tddl/optimizer/config/MockRepoSchemaManager.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.config; 2 | 3 | import com.taobao.tddl.common.utils.extension.Activate; 4 | import com.taobao.tddl.optimizer.config.table.RepoSchemaManager; 5 | import com.taobao.tddl.optimizer.config.table.TableMeta; 6 | 7 | @Activate(name = "MYSQL_JDBC") 8 | public class MockRepoSchemaManager extends RepoSchemaManager { 9 | 10 | protected void doInit() { 11 | // DO NOTHGING 12 | } 13 | 14 | protected TableMeta getTable0(String logicalTableName, String actualTableName) { 15 | return super.getTable0(logicalTableName, actualTableName); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /tddl-optimizer/src/test/java/com/taobao/tddl/optimizer/config/TableMetaParserTest.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.optimizer.config; 2 | 3 | import java.util.List; 4 | 5 | import org.junit.Test; 6 | 7 | import com.taobao.tddl.optimizer.config.table.TableMeta; 8 | import com.taobao.tddl.optimizer.config.table.parse.TableMetaParser; 9 | 10 | public class TableMetaParserTest { 11 | 12 | @Test 13 | public void testSimple() { 14 | List schemaList = new TableMetaParser().parse(Thread.currentThread() 15 | .getContextClassLoader() 16 | .getResourceAsStream("config/test_table.xml")); 17 | System.out.println(schemaList); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /tddl-optimizer/src/test/resources/META-INF/services/com.taobao.tddl.optimizer.config.table.RepoSchemaManager: -------------------------------------------------------------------------------- 1 | com.taobao.tddl.optimizer.config.MockRepoSchemaManager -------------------------------------------------------------------------------- /tddl-optimizer/src/test/resources/META-INF/services/com.taobao.tddl.optimizer.core.expression.IExtraFunction: -------------------------------------------------------------------------------- 1 | com.taobao.tddl.optimizer.core.function.DummyTest -------------------------------------------------------------------------------- /tddl-optimizer/src/test/resources/META-INF/services/com.taobao.tddl.optimizer.sequence.ISequenceManager: -------------------------------------------------------------------------------- 1 | com.taobao.tddl.optimizer.sequence.MemorySequenceManager -------------------------------------------------------------------------------- /tddl-optimizer/src/test/resources/config/table_stat.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | TABLE1 6 | 1000 7 | 8 | 9 | TABLE2 10 | 100000 11 | 12 | 13 | TABLE3 14 | 999 15 | 16 | -------------------------------------------------------------------------------- /tddl-qatest/src/test/java/com/taobao/tddl/qatest/util/FixDataSource.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.qatest.util; 2 | 3 | import javax.sql.DataSource; 4 | 5 | public interface FixDataSource { 6 | 7 | public DataSource getMasterDsByColumn(long column); 8 | 9 | public DataSource getSlaveDsByColumn(long column); 10 | 11 | public DataSource getMasterDsByIndex(int index); 12 | 13 | public DataSource getSlaveDsByIndex(int index); 14 | 15 | public String getTableName(long column, String tablePrefix); 16 | 17 | public int getDbIndex(long column); 18 | } 19 | -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/META-INF/services/com.taobao.tddl.atom.securety.TPasswordCoder: -------------------------------------------------------------------------------- 1 | com.taobao.tddl.qatest.util.StaticPasswordCoder 2 | 3 | -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/atom/passwd.properties: -------------------------------------------------------------------------------- 1 | encPasswd=4485f91c9426e4d8 -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/atom/qatest_normal_0/app.properties: -------------------------------------------------------------------------------- 1 | userName=tddl 2 | minPoolSize=1 3 | maxPoolSize=100 -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/atom/qatest_normal_0/global.properties: -------------------------------------------------------------------------------- 1 | ip=10.232.31.154 2 | port=3306 3 | dbName=qatest_normal_0 4 | dbType=mysql 5 | dbStatus=RW -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/atom/qatest_normal_0_bac/app.properties: -------------------------------------------------------------------------------- 1 | userName=tddl 2 | minPoolSize=1 3 | maxPoolSize=100 -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/atom/qatest_normal_0_bac/global.properties: -------------------------------------------------------------------------------- 1 | ip=10.232.31.154 2 | port=3306 3 | dbName=qatest_normal_0_bac 4 | dbType=mysql 5 | dbStatus=WR -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/atom/qatest_normal_1/app.properties: -------------------------------------------------------------------------------- 1 | userName=tddl 2 | minPoolSize=1 3 | maxPoolSize=100 -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/atom/qatest_normal_1/global.properties: -------------------------------------------------------------------------------- 1 | ip=10.232.31.154 2 | port=3306 3 | dbName=qatest_normal_1 4 | dbType=mysql 5 | dbStatus=RW -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/atom/qatest_normal_1_bac/app.properties: -------------------------------------------------------------------------------- 1 | userName=tddl 2 | minPoolSize=1 3 | maxPoolSize=100 -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/atom/qatest_normal_1_bac/global.properties: -------------------------------------------------------------------------------- 1 | ip=10.232.31.154 2 | port=3306 3 | dbName=qatest_normal_1_bac 4 | dbType=mysql 5 | dbStatus=WR -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/atom/qatest_normal_2/app.properties: -------------------------------------------------------------------------------- 1 | userName=tddl 2 | minPoolSize=1 3 | maxPoolSize=100 -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/atom/qatest_normal_2/global.properties: -------------------------------------------------------------------------------- 1 | ip=10.232.31.154 2 | port=3306 3 | dbName=qatest_normal_2 4 | dbType=mysql 5 | dbStatus=RW -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/atom/qatest_normal_2_bac/app.properties: -------------------------------------------------------------------------------- 1 | userName=tddl 2 | minPoolSize=1 3 | maxPoolSize=100 -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/atom/qatest_normal_2_bac/global.properties: -------------------------------------------------------------------------------- 1 | ip=10.232.31.154 2 | port=3306 3 | dbName=qatest_normal_2_bac 4 | dbType=mysql 5 | dbStatus=WR -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/atom/qatest_normal_monitor/app.properties: -------------------------------------------------------------------------------- 1 | userName=tddl 2 | minPoolSize=1 3 | maxPoolSize=100 4 | writeRestrictTimes=10 5 | readRestrictTimes=10 6 | threadCountRestrict=5 7 | timeSliceInMillis=5000 -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/atom/qatest_normal_monitor/global.properties: -------------------------------------------------------------------------------- 1 | ip=10.232.31.154 2 | port=3306 3 | dbName=qatest_normal_0 4 | dbType=mysql 5 | dbStatus=RW -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/db_type.properties: -------------------------------------------------------------------------------- 1 | dbType=tddl-server 2 | #dbType=mysql -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/group/spring-context.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/group/tddl_group_0.properties: -------------------------------------------------------------------------------- 1 | tddl_group_0=qatest_normal_0:wr,qatest_normal_0_bac:r -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/group/tddl_group_1.properties: -------------------------------------------------------------------------------- 1 | tddl_group_1=qatest_normal_1:wr,qatest_normal_1_bac:r -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/group/tddl_group_2.properties: -------------------------------------------------------------------------------- 1 | tddl_group_2=qatest_normal_2:wr,qatest_normal_2_bac:r -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/group/tddl_group_complex.properties: -------------------------------------------------------------------------------- 1 | tddl_group_complex=qatest_normal_0:wr,qatest_normal_0_bac:r,qatest_normal_1_bac:r -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/ibatis/sqlmap_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/ibatis/test_sqlmap.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-qatest/src/test/resources/ibatis/test_sqlmap.xml -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56} - [%X{CONNECTION}] %msg%n 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/matrix/mysql_sequence.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-qatest/src/test/resources/matrix/mysql_sequence.xml -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/matrix/tddl_dbgroups.properties: -------------------------------------------------------------------------------- 1 | tddl_dbgroups=tddl_group_0,tddl_group_1 -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/readme.txt: -------------------------------------------------------------------------------- 1 | atom/group 2 | 1. 测试库: 10.232.31.154 (qatest_normal_0,qatest_normal_1,qatest_normal_2) 3 | 2. 4 | 5 | matrix 6 | 1. 测试库: mysql -h10.232.24.104 -udiamond -pdiamond 7 | 8 | oceanbase 9 | 1. 测试库: mysql -h10.235.152.7 -uadmin -padmin -P2828 10 | 11 | 12 | tddl-server 13 | 1. 测试库 14 | mysql -h127.0.0.1 -uandor_mysql_qatest -p123456 -P8507 15 | 16 | 2. 体验环境 17 | mysql -h10.235.170.41 -ucorona_qatest -pcorona_qatest -P8507 18 | mysql -h10.235.170.41 -uandor_mysql_qatest -p123456 -P8507 -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/sequence/spring_context_default_sequence.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-qatest/src/test/resources/sequence/spring_context_default_sequence.xml -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/sequence/spring_context_group_sequence.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-qatest/src/test/resources/sequence/spring_context_group_sequence.xml -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/server.properties: -------------------------------------------------------------------------------- 1 | serverPort=8607 2 | managerPort=9607 3 | charset=utf-8 4 | processors=4 5 | processorHandler=16 6 | processorKillExecutor=16 7 | initExecutor=8 8 | timerExecutor=8 9 | managerExecutor=8 10 | serverExecutor=128 11 | timeUpdatePeriod=20 12 | idleTimeout= 13 | txIsolation= 14 | #txIsolation=READ_COMMITTED 15 | 16 | cluster=tddl_server_sample 17 | #cluster=corona_qatest -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/spring/config.properties: -------------------------------------------------------------------------------- 1 | mysql.normal0.url=jdbc:mysql://10.232.24.104:3306/andor_qatest 2 | mysql.normal0.username=diamond 3 | mysql.normal0.password=diamond 4 | mysql.normal0.maxActive=100 5 | mysql.normal0.initialSize=1 6 | -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/spring/spring_context.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-qatest/src/test/resources/spring/spring_context.xml -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/test_matrix_without_group_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /tddl-qatest/src/test/resources/test_schema.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tddl-repo-bdb/src/main/java/com/taobao/tddl/repo/bdb/executor/MasterExceptionSorter.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.repo.bdb.executor; 2 | 3 | public class MasterExceptionSorter extends CommonExceptionSorter { 4 | 5 | @Override 6 | protected boolean match(Integer errorcode) { 7 | if (errorcode >= 20000) return true; 8 | return false; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tddl-repo-bdb/src/main/java/com/taobao/tddl/repo/bdb/executor/ResourceSelector.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.repo.bdb.executor; 2 | 3 | import java.util.Map; 4 | 5 | import com.taobao.tddl.common.exception.TddlException; 6 | 7 | /** 8 | * 选择一个被选择的对象,然后进行某个操作。 9 | * 10 | * @author whisper 11 | */ 12 | public interface ResourceSelector { 13 | 14 | Integer select(Map excludeKey) throws TddlException; 15 | 16 | public int getRetryTimes(); 17 | } 18 | -------------------------------------------------------------------------------- /tddl-repo-bdb/src/main/java/com/taobao/tddl/repo/bdb/executor/SlaveExceptionSorter.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.repo.bdb.executor; 2 | 3 | public class SlaveExceptionSorter extends CommonExceptionSorter { 4 | 5 | @Override 6 | protected boolean match(Integer errorcode) { 7 | /** 8 | * >= 30000 见ExceptionErrorCodeUtils 9 | */ 10 | if (errorcode >= 30000) { 11 | return true; 12 | } 13 | return false; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tddl-repo-bdb/src/main/java/com/taobao/tddl/repo/bdb/spi/CursorFactoryBDBImp.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.repo.bdb.spi; 2 | 3 | import com.taobao.tddl.executor.spi.CursorFactoryDefaultImpl; 4 | 5 | /** 6 | * bdb 的指针包装工厂实现。 7 | * 8 | * @author whisper 9 | */ 10 | @SuppressWarnings("rawtypes") 11 | public class CursorFactoryBDBImp extends CursorFactoryDefaultImpl { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /tddl-repo-bdb/src/main/resources/META-INF/tddl/bdb_je/com.taobao.tddl.executor.spi.IRepositoryFactory: -------------------------------------------------------------------------------- 1 | com.taobao.tddl.repo.bdb.spi.RepositoryFactoryBDBImp -------------------------------------------------------------------------------- /tddl-repo-demo/src/main/resources/META-INF/tddl/demo/com.taobao.tddl.executor.spi.IRepositoryFactory: -------------------------------------------------------------------------------- 1 | com.taobao.tddl.repo.demo.spi.RepositoryFactoryDemoImp -------------------------------------------------------------------------------- /tddl-repo-hbase/src/main/java/com/taobao/tddl/repo/hbase/cursor/ExtremeValue.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.repo.hbase.cursor; 2 | 3 | /** 4 | * hbase中表示极值 5 | * @author mengshi.sunmengshi 2013-9-25 上午10:34:07 6 | * @since 3.0.1 7 | */ 8 | public interface ExtremeValue { 9 | public byte getByte(); 10 | } 11 | -------------------------------------------------------------------------------- /tddl-repo-hbase/src/main/java/com/taobao/tddl/repo/hbase/cursor/HbConstant.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.repo.hbase.cursor; 2 | 3 | /** 4 | * @description 5 | * @author junyu 6 | * @date 2012-9-10下午02:28:16 7 | */ 8 | public class HbConstant { 9 | 10 | public static final String CF_COL_SEP = ":"; 11 | 12 | public static final String CF_COL_SPLITOR = "\\" + CF_COL_SEP; 13 | 14 | public static final String ROWKEY = "ROWKEY"; 15 | } 16 | -------------------------------------------------------------------------------- /tddl-repo-hbase/src/main/java/com/taobao/tddl/repo/hbase/cursor/MaxValue.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.repo.hbase.cursor; 2 | 3 | /** 4 | * hbase中表示最大值,转成byte的时候0ff来表示 5 | * @author mengshi.sunmengshi 2013-9-25 上午10:34:07 6 | * @since 3.0.1 7 | */ 8 | public class MaxValue implements ExtremeValue{ 9 | 10 | @Override 11 | public byte getByte() 12 | { 13 | return -1; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tddl-repo-hbase/src/main/java/com/taobao/tddl/repo/hbase/cursor/MinValue.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.repo.hbase.cursor; 2 | 3 | /** 4 | * hbase中表示最小值,转成byte的时候0x00来表示 5 | * @author mengshi.sunmengshi 2013-9-25 上午10:34:07 6 | * @since 3.0.1 7 | */ 8 | public class MinValue implements ExtremeValue{ 9 | 10 | @Override 11 | public byte getByte() 12 | { 13 | return 0; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tddl-repo-hbase/src/main/java/com/taobao/ustore/repo/hbase/AbstractRowCoder.java: -------------------------------------------------------------------------------- 1 | package com.taobao.ustore.repo.hbase; 2 | 3 | import java.util.Map; 4 | 5 | public abstract class AbstractRowCoder extends RowkeyCoder { 6 | 7 | public AbstractRowCoder(TablePhysicalSchema schema){ 8 | super(schema); 9 | } 10 | 11 | @Override 12 | abstract public Map decodeRowKey(byte[] rowKey); 13 | 14 | @Override 15 | abstract public byte[] encodeRowKey(Map rowKeyColumnValues); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /tddl-repo-hbase/src/main/java/com/taobao/ustore/repo/hbase/RowkeyCoder.java: -------------------------------------------------------------------------------- 1 | package com.taobao.ustore.repo.hbase; 2 | 3 | import java.util.Map; 4 | 5 | public abstract class RowkeyCoder { 6 | 7 | // public static final String ENCODING = "UTF-8"; 8 | private TablePhysicalSchema schema; 9 | 10 | public RowkeyCoder(TablePhysicalSchema schema){ 11 | this.schema = schema; 12 | } 13 | 14 | abstract public Map decodeRowKey(byte[] rowKey); 15 | 16 | abstract public byte[] encodeRowKey(Map rowKeyColumnValues); 17 | 18 | public TablePhysicalSchema getPhysicalSchema() { 19 | return schema; 20 | } 21 | 22 | public void setSchema(TablePhysicalSchema schema) { 23 | this.schema = schema; 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /tddl-repo-hbase/src/main/resources/META-INF/tddl/hbase_client/com.taobao.tddl.executor.spi.IRepositoryFactory: -------------------------------------------------------------------------------- 1 | com.taobao.tddl.repo.hbase.spi.RepositoryFactoryHbImp -------------------------------------------------------------------------------- /tddl-repo-mysql/src/main/java/com/taobao/tddl/repo/mysql/MysqlTableMetaParser.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.repo.mysql; 2 | 3 | import java.util.List; 4 | 5 | import com.taobao.tddl.optimizer.config.table.ColumnMeta; 6 | import com.taobao.tddl.optimizer.config.table.IndexMeta; 7 | import com.taobao.tddl.optimizer.config.table.TableMeta; 8 | import com.taobao.tddl.optimizer.config.table.parse.TableMetaParser; 9 | 10 | public class MysqlTableMetaParser extends TableMetaParser { 11 | 12 | @Override 13 | protected TableMeta newTableMeta(String tableName, List columns, IndexMeta primaryIndex, 14 | List indexs) { 15 | return new MysqlTableMeta(tableName, columns, primaryIndex, indexs); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /tddl-repo-mysql/src/main/java/com/taobao/tddl/repo/mysql/spi/My_Convertor.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.repo.mysql.spi; 2 | 3 | import java.sql.ResultSet; 4 | 5 | import com.taobao.tddl.executor.cursor.ICursorMeta; 6 | import com.taobao.tddl.executor.rowset.IRowSet; 7 | import com.taobao.tddl.executor.rowset.ResultSetRowSet; 8 | 9 | public class My_Convertor { 10 | 11 | public static IRowSet convert(ResultSet rs, ICursorMeta meta) { 12 | IRowSet rowSet = new ResultSetRowSet(meta, rs); 13 | return rowSet; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tddl-repo-mysql/src/main/resources/META-INF/tddl/mysql_jdbc/com.taobao.tddl.executor.spi.IRepositoryFactory: -------------------------------------------------------------------------------- 1 | com.taobao.tddl.repo.mysql.spi.RepositoryFactoryMyImp -------------------------------------------------------------------------------- /tddl-repo-mysql/src/main/resources/META-INF/tddl/mysql_jdbc/com.taobao.tddl.optimizer.config.table.RepoSchemaManager: -------------------------------------------------------------------------------- 1 | com.taobao.tddl.repo.mysql.MysqlTableMetaManager -------------------------------------------------------------------------------- /tddl-repo-oceanbase/src/main/java/com/taobao/tddl/repo/oceanbase/spi/ObCursorFactory.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.repo.oceanbase.spi; 2 | 3 | import com.taobao.tddl.repo.mysql.spi.CursorFactoryMyImpl; 4 | 5 | public class ObCursorFactory extends CursorFactoryMyImpl { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /tddl-repo-oceanbase/src/main/java/com/taobao/tddl/repo/oceanbase/spi/ObDatasourceGetter.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.repo.oceanbase.spi; 2 | 3 | import com.taobao.tddl.common.model.Group; 4 | import com.taobao.tddl.repo.mysql.spi.DatasourceMySQLImplement; 5 | 6 | public class ObDatasourceGetter extends DatasourceMySQLImplement { 7 | 8 | @Override 9 | protected boolean isNotValidateNode(Group.GroupType type) { 10 | return super.isNotValidateNode(type) && !Group.GroupType.OCEANBASE_JDBC.equals(type); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /tddl-repo-oceanbase/src/main/java/com/taobao/tddl/repo/oceanbase/spi/Ob_Table.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.repo.oceanbase.spi; 2 | 3 | import javax.sql.DataSource; 4 | 5 | import com.taobao.tddl.optimizer.config.table.TableMeta; 6 | import com.taobao.tddl.repo.mysql.spi.My_Table; 7 | 8 | public class Ob_Table extends My_Table { 9 | 10 | public Ob_Table(DataSource ds, TableMeta schema, String groupNodeName){ 11 | super(ds, schema, groupNodeName); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /tddl-repo-oceanbase/src/main/resources/META-INF/tddl/oceanbase_jdbc/com.taobao.tddl.executor.spi.IRepositoryFactory: -------------------------------------------------------------------------------- 1 | com.taobao.tddl.repo.oceanbase.spi.ObRepositoryFactory -------------------------------------------------------------------------------- /tddl-repo-oceanbase/src/main/resources/META-INF/tddl/oceanbase_jdbc/com.taobao.tddl.optimizer.config.table.RepoSchemaManager: -------------------------------------------------------------------------------- 1 | com.taobao.tddl.repo.oceanbase.ObTableMetaManager -------------------------------------------------------------------------------- /tddl-rule/src/main/java/com/taobao/tddl/rule/config/RuleChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.rule.config; 2 | 3 | /** 4 | * 允许业务监听rule变化的通知 5 | * 6 | * @author junyu 7 | * @version 1.0 8 | * @since 1.6 9 | * @date 2011-5-4 12:01:06 10 | */ 11 | public interface RuleChangeListener { 12 | 13 | public void onRuleRecieve(String oldRuleStr); 14 | } 15 | -------------------------------------------------------------------------------- /tddl-rule/src/main/java/com/taobao/tddl/rule/enumerator/handler/IntegerPartDiscontinousRangeEnumerator.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.rule.enumerator.handler; 2 | 3 | public class IntegerPartDiscontinousRangeEnumerator extends NumberPartDiscontinousRangeEnumerator { 4 | 5 | @Override 6 | protected Number cast2Number(Comparable begin) { 7 | return (Integer) begin; 8 | } 9 | 10 | @Override 11 | protected Number getNumber(Comparable begin) { 12 | return (Integer) begin; 13 | } 14 | 15 | @Override 16 | protected Number plus(Number begin, int plus) { 17 | return (Integer) begin + plus; 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /tddl-rule/src/main/java/com/taobao/tddl/rule/enumerator/handler/LongPartDiscontinousRangeEnumerator.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.rule.enumerator.handler; 2 | 3 | import com.taobao.tddl.rule.enumerator.EnumeratorUtils; 4 | 5 | public class LongPartDiscontinousRangeEnumerator extends NumberPartDiscontinousRangeEnumerator { 6 | 7 | @Override 8 | protected Number cast2Number(Comparable begin) { 9 | return (Long) begin; 10 | } 11 | 12 | @Override 13 | protected Number getNumber(Comparable begin) { 14 | return (Long) EnumeratorUtils.toPrimaryValue(begin); 15 | } 16 | 17 | @Override 18 | protected Number plus(Number begin, int plus) { 19 | return (Long) begin + plus; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /tddl-rule/src/main/java/com/taobao/tddl/rule/exception/RouteCompareDiffException.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.rule.exception; 2 | 3 | import com.taobao.tddl.common.exception.TddlException; 4 | import com.taobao.tddl.common.exception.code.ErrorCode; 5 | 6 | public class RouteCompareDiffException extends TddlException { 7 | 8 | private static final long serialVersionUID = -1050306101643415508L; 9 | 10 | public RouteCompareDiffException(String... params){ 11 | super(ErrorCode.ERR_ROUTE_COMPARE_DIFF, params); 12 | } 13 | 14 | public RouteCompareDiffException(Throwable cause, String... params){ 15 | super(ErrorCode.ERR_ROUTE_COMPARE_DIFF, cause, params); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /tddl-rule/src/main/java/com/taobao/tddl/rule/impl/groovy/ExtraParameterContext.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.rule.impl.groovy; 2 | 3 | /** 4 | * 额外参数上下文 用于给Grovey传送用于规则运算的上下文对象 5 | * 6 | * @author xudanhui.pt Oct 15, 2010,2:22:19 PM 7 | */ 8 | public interface ExtraParameterContext { 9 | } 10 | -------------------------------------------------------------------------------- /tddl-rule/src/main/java/com/taobao/tddl/rule/impl/groovy/ShardingFunction.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.rule.impl.groovy; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * groovy动态生成 7 | * 8 | * @author jianghang 2013-11-4 下午3:45:10 9 | * @since 5.0.0 10 | */ 11 | public interface ShardingFunction { 12 | 13 | public Object eval(Map map, Object outerCtx); 14 | } 15 | -------------------------------------------------------------------------------- /tddl-rule/src/main/java/com/taobao/tddl/rule/utils/sample/SamplesCtx.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.rule.utils.sample; 2 | 3 | public class SamplesCtx { 4 | 5 | public final static int merge = 0; 6 | public final static int replace = 1; 7 | public final Samples samples; 8 | public final int dealType; 9 | 10 | public SamplesCtx(Samples commonSamples, int dealType){ 11 | this.samples = commonSamples; 12 | this.dealType = dealType; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /tddl-rule/src/main/java/com/taobao/tddl/rule/virtualnode/VirtualNodeMap.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.rule.virtualnode; 2 | 3 | import com.taobao.tddl.common.model.lifecycle.Lifecycle; 4 | 5 | /** 6 | * 虚拟节点 7 | * 8 | * @author junyu 9 | * @version 1.0 10 | * @since 1.6 11 | * @date 2011-8-8下午07:08:45 12 | */ 13 | public interface VirtualNodeMap extends Lifecycle { 14 | 15 | String tableSplitor = "_"; 16 | 17 | public String getValue(String key); 18 | } 19 | -------------------------------------------------------------------------------- /tddl-rule/src/test/java/com/taobao/tddl/rule/groovy/AppUtils.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.rule.groovy; 2 | 3 | /** 4 | * @description 5 | * @author junyu 6 | * @version 1.0 7 | * @since 1.6 8 | * @date 2011-8-17 07:29:21 9 | */ 10 | public class AppUtils { 11 | 12 | public static Long idFormat(Object value) { 13 | Long lva = Long.valueOf(String.valueOf(value)); 14 | return lva * 10; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tddl-rule/src/test/java/com/taobao/tddl/rule/groovy/ProfileFactory.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.rule.groovy; 2 | 3 | /** 4 | * @description 5 | * @author junyu 6 | * @version 1.0 7 | * @since 1.6 8 | * @date 2011-8-17 07:23:43 9 | */ 10 | public class ProfileFactory { 11 | 12 | private static SimpleProfile profile = new SimpleProfile(); 13 | 14 | public static SimpleProfile getProfile() { 15 | return profile; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /tddl-rule/src/test/java/com/taobao/tddl/rule/groovy/SimpleProfile.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.rule.groovy; 2 | 3 | /** 4 | * @description 5 | * @author junyu 6 | * @version 1.0 7 | * @since 1.6 8 | * @date 2011-8-17 07:23:59 9 | */ 10 | public class SimpleProfile { 11 | 12 | public void recordTables(String realTables) { 13 | System.out.println("user table profile:" + realTables); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tddl-rule/src/test/resources/app/eagleEye/spring-context.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /tddl-rule/src/test/resources/groovy/spring-context.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /tddl-rule/src/test/resources/local/spring-context.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /tddl-rule/src/test/resources/remote/spring-context.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /tddl-rule/src/test/resources/virtualnode/spring-context.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /tddl-sample/src/main/java/com/alibaba/asc/xuanwu/framework/common/tddl/util/TddlPartition.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-sample/src/main/java/com/alibaba/asc/xuanwu/framework/common/tddl/util/TddlPartition.java -------------------------------------------------------------------------------- /tddl-sample/src/main/java/com/alibaba/china/dw/dataopen/andor/rowcoder/BoltRowCoder.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.china.dw.dataopen.andor.rowcoder; 2 | 3 | import com.taobao.ustore.repo.hbase.RowkeyCoderSplitImpl; 4 | import com.taobao.ustore.repo.hbase.TablePhysicalSchema; 5 | 6 | public class BoltRowCoder extends RowkeyCoderSplitImpl { 7 | 8 | public BoltRowCoder(TablePhysicalSchema schema){ 9 | super(schema); 10 | } 11 | 12 | @Override 13 | public String getSpliter() { 14 | return " "; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /tddl-sample/src/main/java/com/alibaba/china/dw/dataopen/andor/rowcoder/IPageRowCoder.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.china.dw.dataopen.andor.rowcoder; 2 | 3 | import com.taobao.ustore.repo.hbase.RowkeyCoderSplitImpl; 4 | import com.taobao.ustore.repo.hbase.TablePhysicalSchema; 5 | 6 | public class IPageRowCoder extends RowkeyCoderSplitImpl { 7 | 8 | public IPageRowCoder(TablePhysicalSchema schema){ 9 | super(schema); 10 | } 11 | 12 | @Override 13 | public String getSpliter() { 14 | return "\4"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tddl-sample/src/main/java/com/taobao/tddl/sample/Main.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.sample; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | String err = null; 7 | err += "1"; 8 | System.out.println(err); 9 | 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /tddl-sample/src/main/java/com/taobao/tddl/sample/SequenceTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-sample/src/main/java/com/taobao/tddl/sample/SequenceTest.java -------------------------------------------------------------------------------- /tddl-sample/src/main/java/com/yunos/lifecenter/util/TabUtil.java: -------------------------------------------------------------------------------- 1 | package com.yunos.lifecenter.util; 2 | 3 | /** 4 | * Created by zhenggangji on 2/12/14. 5 | */ 6 | public class TabUtil { 7 | public static long beforeConvertValue(Object val) { 8 | if(val == null) return 0; 9 | return Math.abs(val.hashCode()); 10 | } 11 | 12 | public static void main(String[] args) { 13 | System.out.println(beforeConvertValue(new String("5131778460132176"))); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tddl-sample/src/main/resources/demo_repo_schema.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | id 11 |
12 | 13 | 14 |
-------------------------------------------------------------------------------- /tddl-sample/src/main/resources/junyu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /tddl-sample/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | log4j.rootLogger=error,console 2 | 3 | #add by @junyu 4 | log4j.appender.console=org.apache.log4j.ConsoleAppender 5 | log4j.appender.console.layout=org.apache.log4j.PatternLayout 6 | log4j.appender.console.layout.ConversionPattern=%5p [%t] - %m%n 7 | log4j.appender.console.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}\:%L - %m%n 8 | 9 | -------------------------------------------------------------------------------- /tddl-sample/src/main/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56} - %msg%n 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tddl-sample/src/main/resources/sicui.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /tddl-sample/src/main/resources/sql/doudoucaicai1.sql: -------------------------------------------------------------------------------- 1 | select date_format(date_time,'%m-%d') label,sum(data_value)/100 value 2 | from adam_stream_sample_collect 3 | where index_id = 110004 4 | and date_time >= ? 5 | and date_time < ? 6 | 7 | group by date(date_time) 8 | -------------------------------------------------------------------------------- /tddl-sample/src/main/resources/sql/replace.txt: -------------------------------------------------------------------------------- 1 | REPLACE INTO adgroup(id, biz_number, campaign_id, cust_id, member_id, product_id,title, bid_price, 2 | online_status, audit_status, audit_time, audit_reason, gmt_create, gmt_modified, op_id) 3 | VALUES(1100000000100, 1100000000100, 2100000000100, 3100000000100, 4100000000100,1010101, 4 | '载思测试title1',1,1,1,now(), '载思测试reason1',now(),now(),1); -------------------------------------------------------------------------------- /tddl-sample/src/main/resources/sql/subway_adgroup_list.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | a.custId, a.id,b.adgroupid, SUM(c.cost) / SUM(c.click) AS ppc, 3 | c.thedate, c.memberid, c.campaignid, c.productlineid, c.adgroupid, 4 | SUM(c.impression), SUM(c.cost), SUM(c.click), SUM(c.click) / SUM(c.impression) AS ctr, 5 | b.title, a.onlinestate, a.reason 6 | FROM Lunaadgroup a join lunaadgroupinfo b on a.id=b.adgroupid 7 | LEFT JOIN rpt_solar_adgroup_ob c ON a.id = c.adgroupid 8 | WHERE a.custid='1102000884' and b.custid='1102000884' and B.TITLE like '鐑攢1s' and c.click>1000 9 | GROUP BY c.thedate, c.memberid, c.campaignid, c.productlineid, c.adgroupid 10 | HAVING ppc > 1 11 | ORDER BY ppc DESC -------------------------------------------------------------------------------- /tddl-sample/src/main/resources/tddl-rule-dps-nonmysql.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /tddl-sample/src/main/resources/tddl-rule.properties: -------------------------------------------------------------------------------- 1 | #************************ scm daily ************************* 2 | #SUBWAY_G_GROUP=AUTO_SUBWAY_G_GROUP 3 | #SUBWAY_P_NAMEPATTERN=AUTO_SUBWAY_P{00}_GROUP 4 | SUBWAY_G_GROUP=SUBWAY_G_GROUP1 5 | SUBWAY_P_NAMEPATTERN=SUBWAY_P{00}_GROUP1 6 | DIAG_SUB_P_NAMEPATTERN=DIAG_SUB_P{00}_GROUP 7 | 8 | #dbRuleArray=(#custId,64,2048#.longValue() % 2048).intdiv(2048)+1 9 | #tbRuleArray=#custId,64,2048#.longValue() % 1 10 | dbRuleArray=(#custId,64,2048#.longValue() % 2048).intdiv(64) 11 | tbRuleArray=#custId,64,2048#.longValue() % 32 -------------------------------------------------------------------------------- /tddl-sample/src/main/resources/tddl-topology-dps.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DEV_DPS_APP 4 | 5 | 6 | 7 | http://obconsole.test.alibaba-inc.com/ob-config/config.co?dataId=wireless_message 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /tddl-sample/src/main/resources/wangqi-rule.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /tddl-sample/src/main/resources/zhuocheng.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhhcommon/tddl/b99a53bc9f970785b7c3183327013fc4f8552679/tddl-sample/src/main/resources/zhuocheng.xml -------------------------------------------------------------------------------- /tddl-sequence/src/main/java/com/taobao/tddl/client/sequence/RoutedSequence.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.client.sequence; 2 | 3 | import com.taobao.tddl.client.sequence.exception.SequenceException; 4 | 5 | 6 | /** 7 | * 带路由信息序列接口 8 | * 9 | * @author guangxia 10 | * @param 数据库路由信息类型 11 | * @param 表路由信息类型 12 | */ 13 | public interface RoutedSequence { 14 | 15 | /** 16 | * 取得序列下一个值 17 | * 18 | * @param databaseRoute 数据库路由信息 19 | * @param tableRoute 表路由信息 20 | * @return 返回序列下一个值 21 | * @throws SequenceException 22 | */ 23 | long nextValue(DatabaseRouteType databaseRoute, TableRouteType tableRoute) throws SequenceException; 24 | } 25 | -------------------------------------------------------------------------------- /tddl-sequence/src/main/java/com/taobao/tddl/client/sequence/Sequence.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.client.sequence; 2 | 3 | import com.taobao.tddl.client.sequence.exception.SequenceException; 4 | 5 | /** 6 | * 序列接口 7 | * 8 | * @author nianbing 9 | */ 10 | public interface Sequence { 11 | 12 | /** 13 | * 取得序列下一个值 14 | * 15 | * @return 返回序列下一个值 16 | * @throws SequenceException 17 | */ 18 | long nextValue() throws SequenceException; 19 | 20 | /** 21 | * 返回size大小后的值,比如针对batch拿到size大小的值,自己内存中顺序分配 22 | * 23 | * @param size 24 | * @return 25 | * @throws SequenceException 26 | */ 27 | long nextValue(int size) throws SequenceException; 28 | } 29 | -------------------------------------------------------------------------------- /tddl-sequence/src/main/java/com/taobao/tddl/client/sequence/SequenceDao.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.client.sequence; 2 | 3 | import com.taobao.tddl.client.sequence.exception.SequenceException; 4 | import com.taobao.tddl.common.model.lifecycle.Lifecycle; 5 | 6 | /** 7 | * 序列DAO接口 8 | * 9 | * @author nianbing 10 | */ 11 | public interface SequenceDao extends Lifecycle { 12 | 13 | /** 14 | * 取得下一个可用的序列区间 15 | * 16 | * @param name 序列名称 17 | * @return 返回下一个可用的序列区间 18 | * @throws SequenceException 19 | */ 20 | SequenceRange nextRange(String name) throws SequenceException; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /tddl-server/src/main/java/com/alibaba/cobar/CobarAlarms.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar; 2 | 3 | /** 4 | * Cobar报警关键词定义 5 | * 6 | * @author xianmao.hexm 2012-4-19 7 | */ 8 | public interface CobarAlarms { 9 | 10 | /** 默认报警关键词 **/ 11 | String DEFAULT = "#!TDDL#"; 12 | 13 | /** 集群无有效的节点可提供服务 **/ 14 | String CLUSTER_EMPTY = "#!CLUSTER_EMPTY#"; 15 | 16 | /** 数据节点的数据源发生切换 **/ 17 | String DATANODE_SWITCH = "#!DN_SWITCH#"; 18 | 19 | /** 隔离区非法用户访问 **/ 20 | String QUARANTINE_ATTACK = "#!QT_ATTACK#"; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /tddl-server/src/main/java/com/alibaba/cobar/config/ConfigException.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.config; 2 | 3 | /** 4 | * @author xianmao.hexm 2011-1-10 下午07:07:46 5 | */ 6 | public class ConfigException extends RuntimeException { 7 | 8 | private static final long serialVersionUID = -180146385688342818L; 9 | 10 | public ConfigException(){ 11 | super(); 12 | } 13 | 14 | public ConfigException(String message, Throwable cause){ 15 | super(message, cause); 16 | } 17 | 18 | public ConfigException(String message){ 19 | super(message); 20 | } 21 | 22 | public ConfigException(Throwable cause){ 23 | super(cause); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /tddl-server/src/main/java/com/alibaba/cobar/config/IUserHostDefination.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.config; 2 | 3 | /** 4 | * Created by simiao.zw on 2014/6/23. 5 | */ 6 | public interface IUserHostDefination { 7 | 8 | public boolean containsOf(String host); 9 | 10 | public boolean isEmpty(); 11 | } 12 | -------------------------------------------------------------------------------- /tddl-server/src/main/java/com/alibaba/cobar/manager/ManagerConnectionFactory.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.manager; 2 | 3 | import java.nio.channels.SocketChannel; 4 | 5 | import com.alibaba.cobar.CobarPrivileges; 6 | import com.alibaba.cobar.net.FrontendConnection; 7 | import com.alibaba.cobar.net.factory.FrontendConnectionFactory; 8 | 9 | /** 10 | * @author xianmao.hexm 11 | */ 12 | public class ManagerConnectionFactory extends FrontendConnectionFactory { 13 | 14 | @Override 15 | protected FrontendConnection getConnection(SocketChannel channel) { 16 | ManagerConnection c = new ManagerConnection(channel); 17 | c.setPrivileges(new CobarPrivileges()); 18 | c.setQueryHandler(new ManagerQueryHandler(c)); 19 | return c; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /tddl-server/src/main/java/com/alibaba/cobar/manager/handler/ClearHandler.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.manager.handler; 2 | 3 | import com.alibaba.cobar.ErrorCode; 4 | import com.alibaba.cobar.manager.ManagerConnection; 5 | import com.alibaba.cobar.manager.parser.ManagerParseClear; 6 | 7 | /** 8 | * @author xianmao.hexm 2012-4-16 9 | */ 10 | public class ClearHandler { 11 | 12 | public static void handle(String stmt, ManagerConnection c, int offset) { 13 | int rs = ManagerParseClear.parse(stmt, offset); 14 | switch (rs & 0xff) { 15 | 16 | default: 17 | c.writeErrMessage(ErrorCode.ER_YES, "Unsupported statement"); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /tddl-server/src/main/java/com/alibaba/cobar/server/exception/ErrorPacketException.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.server.exception; 2 | 3 | /** 4 | * @author xianmao.hexm 5 | */ 6 | public class ErrorPacketException extends RuntimeException { 7 | 8 | private static final long serialVersionUID = -2692093550257870555L; 9 | 10 | public ErrorPacketException(){ 11 | super(); 12 | } 13 | 14 | public ErrorPacketException(String message, Throwable cause){ 15 | super(message, cause); 16 | } 17 | 18 | public ErrorPacketException(String message){ 19 | super(message); 20 | } 21 | 22 | public ErrorPacketException(Throwable cause){ 23 | super(cause); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /tddl-server/src/main/java/com/alibaba/cobar/server/exception/HeartbeatException.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.server.exception; 2 | 3 | /** 4 | * @author xianmao.hexm 5 | */ 6 | public class HeartbeatException extends RuntimeException { 7 | 8 | private static final long serialVersionUID = 7639414445868741580L; 9 | 10 | public HeartbeatException(){ 11 | super(); 12 | } 13 | 14 | public HeartbeatException(String message, Throwable cause){ 15 | super(message, cause); 16 | } 17 | 18 | public HeartbeatException(String message){ 19 | super(message); 20 | } 21 | 22 | public HeartbeatException(Throwable cause){ 23 | super(cause); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /tddl-server/src/main/java/com/alibaba/cobar/server/exception/UnknownCharsetException.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.server.exception; 2 | 3 | /** 4 | * 未知字符集异常 5 | * 6 | * @author xianmao.hexm 7 | */ 8 | public class UnknownCharsetException extends RuntimeException { 9 | 10 | private static final long serialVersionUID = 552833416065882969L; 11 | 12 | public UnknownCharsetException(){ 13 | super(); 14 | } 15 | 16 | public UnknownCharsetException(String message, Throwable cause){ 17 | super(message, cause); 18 | } 19 | 20 | public UnknownCharsetException(String message){ 21 | super(message); 22 | } 23 | 24 | public UnknownCharsetException(Throwable cause){ 25 | super(cause); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /tddl-server/src/main/java/com/alibaba/cobar/server/exception/UnknownDataNodeException.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.server.exception; 2 | 3 | /** 4 | * @author xianmao.hexm 5 | */ 6 | public class UnknownDataNodeException extends RuntimeException { 7 | 8 | private static final long serialVersionUID = -3752985849571697432L; 9 | 10 | public UnknownDataNodeException(){ 11 | super(); 12 | } 13 | 14 | public UnknownDataNodeException(String message, Throwable cause){ 15 | super(message, cause); 16 | } 17 | 18 | public UnknownDataNodeException(String message){ 19 | super(message); 20 | } 21 | 22 | public UnknownDataNodeException(Throwable cause){ 23 | super(cause); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /tddl-server/src/main/java/com/alibaba/cobar/server/exception/UnknownPacketException.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.server.exception; 2 | 3 | /** 4 | * 未知数据包异常 5 | * 6 | * @author xianmao.hexm 7 | */ 8 | public class UnknownPacketException extends RuntimeException { 9 | 10 | private static final long serialVersionUID = 3152986441780514147L; 11 | 12 | public UnknownPacketException(){ 13 | super(); 14 | } 15 | 16 | public UnknownPacketException(String message, Throwable cause){ 17 | super(message, cause); 18 | } 19 | 20 | public UnknownPacketException(String message){ 21 | super(message); 22 | } 23 | 24 | public UnknownPacketException(Throwable cause){ 25 | super(cause); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /tddl-server/src/main/java/com/alibaba/cobar/server/exception/UnknownTxIsolationException.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.server.exception; 2 | 3 | /** 4 | * 未知事物隔离级别异常 5 | * 6 | * @author xianmao.hexm 7 | */ 8 | public class UnknownTxIsolationException extends RuntimeException { 9 | 10 | private static final long serialVersionUID = -3911059999308980358L; 11 | 12 | public UnknownTxIsolationException(){ 13 | super(); 14 | } 15 | 16 | public UnknownTxIsolationException(String message, Throwable cause){ 17 | super(message, cause); 18 | } 19 | 20 | public UnknownTxIsolationException(String message){ 21 | super(message); 22 | } 23 | 24 | public UnknownTxIsolationException(Throwable cause){ 25 | super(cause); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /tddl-server/src/main/java/com/alibaba/cobar/server/handler/BeginHandler.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.server.handler; 2 | 3 | import com.alibaba.cobar.ErrorCode; 4 | import com.alibaba.cobar.server.ServerConnection; 5 | 6 | /** 7 | * @author xianmao.hexm 8 | */ 9 | public final class BeginHandler { 10 | 11 | public static void handle(String stmt, ServerConnection c) { 12 | c.writeErrMessage(ErrorCode.ER_UNKNOWN_COM_ERROR, "Unsupported statement"); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /tddl-server/src/main/java/com/alibaba/cobar/server/handler/CommitHandler.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.server.handler; 2 | 3 | import com.alibaba.cobar.server.ServerConnection; 4 | 5 | /** 6 | * @author xianmao.hexm 7 | */ 8 | public final class CommitHandler { 9 | 10 | public static void handle(ServerConnection c) { 11 | c.commit(); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /tddl-server/src/main/java/com/alibaba/cobar/server/handler/RollbackHandler.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.server.handler; 2 | 3 | import com.alibaba.cobar.server.ServerConnection; 4 | 5 | /** 6 | * @author xianmao.hexm 7 | */ 8 | public final class RollbackHandler { 9 | 10 | public static void handle(String stmt, ServerConnection c) { 11 | c.rollback(); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /tddl-server/src/main/java/com/alibaba/cobar/server/handler/SavepointHandler.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.server.handler; 2 | 3 | import com.alibaba.cobar.ErrorCode; 4 | import com.alibaba.cobar.server.ServerConnection; 5 | 6 | /** 7 | * @author xianmao.hexm 8 | */ 9 | public final class SavepointHandler { 10 | 11 | public static void handle(String stmt, ServerConnection c) { 12 | c.writeErrMessage(ErrorCode.ER_UNKNOWN_COM_ERROR, "Unsupported statement"); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /tddl-server/src/main/java/com/alibaba/cobar/server/response/SqlMode.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.server.response; 2 | 3 | import com.alibaba.cobar.net.packet.OkPacket; 4 | import com.alibaba.cobar.server.ServerConnection; 5 | 6 | public class SqlMode { 7 | 8 | public static void response(String stmt, ServerConnection c, int rs) { 9 | String sqlMode = stmt.substring(rs >>> 8).trim(); 10 | if (sqlMode.startsWith("'") || sqlMode.startsWith("`") || sqlMode.startsWith("\"")) { 11 | sqlMode = sqlMode.substring(1, sqlMode.length() - 1); 12 | } 13 | 14 | c.setSqlMode(sqlMode); 15 | c.write(c.writeToBuffer(OkPacket.OK, c.allocate())); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /tddl-server/src/main/java/com/alibaba/cobar/server/statistics/DataSourceCount.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.cobar.server.statistics; 2 | 3 | /** 4 | * @author xianmao.hexm 2010-9-30 上午10:47:47 5 | */ 6 | public final class DataSourceCount { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /tddl-server/src/main/java/com/alibaba/cobar/server/util/ArrayUtil.java: -------------------------------------------------------------------------------- 1 | /** 2 | * (created at 2011-10-24) 3 | */ 4 | package com.alibaba.cobar.server.util; 5 | 6 | /** 7 | * @author QIU Shuo 8 | */ 9 | public class ArrayUtil { 10 | 11 | public static boolean contains(String[] list, String str) { 12 | if (list == null) return false; 13 | for (String string : list) { 14 | if (StringUtil.equals(str, string)) { 15 | return true; 16 | } 17 | } 18 | return false; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /tddl-server/src/main/resources/server.properties: -------------------------------------------------------------------------------- 1 | serverPort=8507 2 | managerPort=9507 3 | charset=utf-8 4 | processors=4 5 | processorHandler=16 6 | processorKillExecutor=16 7 | initExecutor=8 8 | timerExecutor=8 9 | managerExecutor=8 10 | serverExecutor=256 11 | timeUpdatePeriod=20 12 | idleTimeout= 13 | txIsolation= 14 | #txIsolation=READ_COMMITTED 15 | 16 | cluster=corona_qatest 17 | #cluster=tddl_server_sample 18 | #cluster=tddl511 19 | #cluster=daily3A 20 | #trustedips=127.0.0.1,127.0.0.*,127.0.0.0/24,127.0.0.1-127.0.0.10 21 | -------------------------------------------------------------------------------- /tddl-server/src/test/java/com/alibaba/cobar/util/BitTest.java: -------------------------------------------------------------------------------- 1 | //package com.alibaba.cobar.util; 2 | // 3 | ///** 4 | // * @author xianmao.hexm 5 | // */ 6 | //public class BitTest { 7 | // 8 | // public static void main(String[] args) { 9 | // System.out.println(0xffff0001 & 0xffff);//低16位 10 | // System.out.println(0x0002ffff >>> 16);//高16位 11 | // } 12 | //} 13 | -------------------------------------------------------------------------------- /tddl-server/src/test/java/com/alibaba/cobar/util/MetaUtilTest.java: -------------------------------------------------------------------------------- 1 | //package com.alibaba.cobar.util; 2 | // 3 | //import java.util.Map; 4 | //import java.util.Set; 5 | // 6 | //import junit.framework.TestCase; 7 | // 8 | //import com.alibaba.cobar.server.util.MetaUtil; 9 | // 10 | //public class MetaUtilTest extends TestCase { 11 | // 12 | // public void testMetaUtil() { 13 | // Map>> appTopo = MetaUtil.getAppTopo("ACSS_BILL_APP"); 14 | // for(String logicTable: appTopo.keySet()) { 15 | // System.out.println(logicTable); 16 | // System.out.println(appTopo.get(logicTable)); 17 | // } 18 | // } 19 | // 20 | //} 21 | --------------------------------------------------------------------------------