├── README.md └── code_reading └── canal ├── .codecov.yml ├── .gitignore ├── .mvn └── wrapper │ ├── maven-wrapper.jar │ └── maven-wrapper.properties ├── .travis.yml ├── LICENSE.txt ├── README.md ├── RELEASE.txt ├── admin ├── admin-ui │ ├── .editorconfig │ ├── .env.development │ ├── .env.production │ ├── .env.staging │ ├── .eslintignore │ ├── .eslintrc.js │ ├── .gitignore │ ├── .travis.yml │ ├── LICENSE │ ├── babel.config.js │ ├── build │ │ └── index.js │ ├── jest.config.js │ ├── mock │ │ ├── index.js │ │ ├── mock-server.js │ │ ├── table.js │ │ └── user.js │ ├── node │ │ └── node │ ├── package.json │ ├── pom.xml │ ├── postcss.config.js │ ├── public │ │ ├── avatar.gif │ │ ├── favicon.ico │ │ ├── index.html │ │ └── logo.png │ ├── src │ │ ├── App.vue │ │ ├── api │ │ │ ├── canalCluster.js │ │ │ ├── canalConfig.js │ │ │ ├── canalInstance.js │ │ │ ├── nodeServer.js │ │ │ ├── table.js │ │ │ └── user.js │ │ ├── assets │ │ │ └── 404_images │ │ │ │ ├── 404.png │ │ │ │ └── 404_cloud.png │ │ ├── components │ │ │ ├── Breadcrumb │ │ │ │ └── index.vue │ │ │ ├── Hamburger │ │ │ │ └── index.vue │ │ │ ├── Pagination │ │ │ │ └── index.vue │ │ │ └── SvgIcon │ │ │ │ └── index.vue │ │ ├── icons │ │ │ ├── index.js │ │ │ ├── svg │ │ │ │ ├── dashboard.svg │ │ │ │ ├── example.svg │ │ │ │ ├── eye-open.svg │ │ │ │ ├── eye.svg │ │ │ │ ├── form.svg │ │ │ │ ├── link.svg │ │ │ │ ├── nested.svg │ │ │ │ ├── password.svg │ │ │ │ ├── table.svg │ │ │ │ ├── tree.svg │ │ │ │ └── user.svg │ │ │ └── svgo.yml │ │ ├── layout │ │ │ ├── components │ │ │ │ ├── AppMain.vue │ │ │ │ ├── Navbar.vue │ │ │ │ ├── Sidebar │ │ │ │ │ ├── FixiOSBug.js │ │ │ │ │ ├── Item.vue │ │ │ │ │ ├── Link.vue │ │ │ │ │ ├── Logo.vue │ │ │ │ │ ├── SidebarItem.vue │ │ │ │ │ └── index.vue │ │ │ │ └── index.js │ │ │ ├── index.vue │ │ │ └── mixin │ │ │ │ └── ResizeHandler.js │ │ ├── main.js │ │ ├── permission.js │ │ ├── router │ │ │ └── index.js │ │ ├── settings.js │ │ ├── store │ │ │ ├── getters.js │ │ │ ├── index.js │ │ │ └── modules │ │ │ │ ├── app.js │ │ │ │ ├── settings.js │ │ │ │ └── user.js │ │ ├── styles │ │ │ ├── element-ui.scss │ │ │ ├── index.scss │ │ │ ├── mixin.scss │ │ │ ├── sidebar.scss │ │ │ ├── transition.scss │ │ │ └── variables.scss │ │ ├── utils │ │ │ ├── auth.js │ │ │ ├── get-page-title.js │ │ │ ├── index.js │ │ │ ├── request.js │ │ │ ├── scrollTo.js │ │ │ └── validate.js │ │ └── views │ │ │ ├── 404.vue │ │ │ ├── canalServer │ │ │ ├── CanalCluster.vue │ │ │ ├── CanalConfig.vue │ │ │ ├── CanalInstance.vue │ │ │ ├── CanalInstanceAdd.vue │ │ │ ├── CanalInstanceLogDetail.vue │ │ │ ├── CanalInstanceUpdate.vue │ │ │ ├── CanalLogDetail.vue │ │ │ └── NodeServer.vue │ │ │ ├── dashboard │ │ │ └── index.vue │ │ │ ├── login │ │ │ └── index.vue │ │ │ └── sys │ │ │ └── UserInfo.vue │ ├── tests │ │ └── unit │ │ │ ├── .eslintrc.js │ │ │ ├── components │ │ │ ├── Breadcrumb.spec.js │ │ │ ├── Hamburger.spec.js │ │ │ └── SvgIcon.spec.js │ │ │ └── utils │ │ │ ├── formatTime.spec.js │ │ │ ├── parseTime.spec.js │ │ │ └── validate.spec.js │ └── vue.config.js ├── admin-web │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── assembly │ │ │ ├── dev.xml │ │ │ └── release.xml │ │ ├── bin │ │ │ ├── restart.sh │ │ │ ├── startup.bat │ │ │ ├── startup.sh │ │ │ └── stop.sh │ │ ├── java │ │ │ └── com │ │ │ │ └── alibaba │ │ │ │ └── otter │ │ │ │ └── canal │ │ │ │ └── admin │ │ │ │ ├── CanalAdminApplication.java │ │ │ │ ├── common │ │ │ │ ├── DaemonThreadFactory.java │ │ │ │ ├── TemplateConfigLoader.java │ │ │ │ ├── Threads.java │ │ │ │ └── exception │ │ │ │ │ └── ServiceException.java │ │ │ │ ├── config │ │ │ │ ├── EbeanConfig.java │ │ │ │ ├── SpringContext.java │ │ │ │ └── WebConfig.java │ │ │ │ ├── connector │ │ │ │ ├── AdminConnector.java │ │ │ │ ├── SimpleAdminConnector.java │ │ │ │ └── SimpleAdminConnectors.java │ │ │ │ ├── controller │ │ │ │ ├── CanalClusterController.java │ │ │ │ ├── CanalConfigController.java │ │ │ │ ├── CanalInstanceController.java │ │ │ │ ├── NodeServerController.java │ │ │ │ ├── PollingConfigController.java │ │ │ │ └── UserController.java │ │ │ │ ├── handler │ │ │ │ └── CustomExceptionHandler.java │ │ │ │ ├── model │ │ │ │ ├── BaseModel.java │ │ │ │ ├── CanalCluster.java │ │ │ │ ├── CanalConfig.java │ │ │ │ ├── CanalInstanceConfig.java │ │ │ │ ├── Model.java │ │ │ │ ├── NodeServer.java │ │ │ │ ├── Pager.java │ │ │ │ └── User.java │ │ │ │ └── service │ │ │ │ ├── CanalClusterService.java │ │ │ │ ├── CanalConfigService.java │ │ │ │ ├── CanalInstanceService.java │ │ │ │ ├── NodeServerService.java │ │ │ │ ├── PollingConfigService.java │ │ │ │ ├── UserService.java │ │ │ │ └── impl │ │ │ │ ├── CanalClusterServiceImpl.java │ │ │ │ ├── CanalConfigServiceImpl.java │ │ │ │ ├── CanalInstanceServiceImpl.java │ │ │ │ ├── NodeServerServiceImpl.java │ │ │ │ ├── PollingConfigServiceImpl.java │ │ │ │ └── UserServiceImpl.java │ │ └── resources │ │ │ ├── application.yml │ │ │ ├── canal-template.properties │ │ │ ├── canal_manager.sql │ │ │ ├── instance-template.properties │ │ │ ├── logback.xml │ │ │ └── public │ │ │ ├── avatar.gif │ │ │ ├── index.html │ │ │ ├── logo.png │ │ │ └── static │ │ │ ├── css │ │ │ ├── app.bb951cb3.css │ │ │ ├── chunk-101fc062.fad9926f.css │ │ │ ├── chunk-14b5f7a4.f3e06673.css │ │ │ ├── chunk-22553be3.f3e06673.css │ │ │ ├── chunk-2301924a.160e7b4a.css │ │ │ ├── chunk-2b9b6c5c.c89f8844.css │ │ │ ├── chunk-37c49cbf.efc21a9c.css │ │ │ ├── chunk-49959c8b.e8e2beee.css │ │ │ ├── chunk-4f09fed2.70ec0b86.css │ │ │ ├── chunk-5afa45f5.a34bb177.css │ │ │ ├── chunk-5b373aad.b966d36b.css │ │ │ ├── chunk-69386cf0.741ff14e.css │ │ │ ├── chunk-7ec889b7.c0585512.css │ │ │ ├── chunk-98f505d0.5280f88f.css │ │ │ ├── chunk-bd1d44ee.1528199a.css │ │ │ ├── chunk-da289616.c89f8844.css │ │ │ ├── chunk-elementUI.18b11d0e.css │ │ │ └── chunk-libs.5cf311f0.css │ │ │ ├── fonts │ │ │ ├── element-icons.2fad952a.woff │ │ │ └── element-icons.6f0a7632.ttf │ │ │ ├── img │ │ │ ├── 404.a57b6f31.png │ │ │ └── 404_cloud.0f4bc32b.png │ │ │ └── js │ │ │ ├── app.6845b228.js │ │ │ ├── app.eee35d99.js │ │ │ ├── chunk-0dca2f22.a2bc28b8.js │ │ │ ├── chunk-101fc062.372a5ca5.js │ │ │ ├── chunk-101fc062.bc898027.js │ │ │ ├── chunk-14b5f7a4.013449e9.js │ │ │ ├── chunk-22553be3.e6d72de5.js │ │ │ ├── chunk-2301924a.1774b851.js │ │ │ ├── chunk-2b9b6c5c.cc2181b9.js │ │ │ ├── chunk-37c49cbf.64d26540.js │ │ │ ├── chunk-37c49cbf.92ebe0ae.js │ │ │ ├── chunk-49959c8b.058266cb.js │ │ │ ├── chunk-49959c8b.6d226f70.js │ │ │ ├── chunk-4f09fed2.d107437b.js │ │ │ ├── chunk-4f09fed2.ff28d88d.js │ │ │ ├── chunk-55380ff2.430ee174.js │ │ │ ├── chunk-55380ff2.681c71c9.js │ │ │ ├── chunk-5afa45f5.79ddcc04.js │ │ │ ├── chunk-5b373aad.90a2d8e7.js │ │ │ ├── chunk-69386cf0.76d77f5c.js │ │ │ ├── chunk-69386cf0.bdbe3f0c.js │ │ │ ├── chunk-7ec889b7.5f730d9b.js │ │ │ ├── chunk-7ec889b7.bd1ca803.js │ │ │ ├── chunk-98f505d0.f3096ce7.js │ │ │ ├── chunk-bd1d44ee.8c8282cc.js │ │ │ ├── chunk-bd1d44ee.8e2c4851.js │ │ │ ├── chunk-da289616.7def925e.js │ │ │ ├── chunk-elementUI.667f4c87.js │ │ │ └── chunk-libs.c04beefc.js │ │ └── test │ │ └── java │ │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── admin │ │ └── SimpleAdminConnectorTest.java └── pom.xml ├── client-adapter ├── README.md ├── common │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── alibaba │ │ │ └── otter │ │ │ └── canal │ │ │ └── client │ │ │ └── adapter │ │ │ ├── OuterAdapter.java │ │ │ ├── config │ │ │ ├── YmlConfigBinder.java │ │ │ ├── bind │ │ │ │ ├── DefaultPropertyNamePatternsMatcher.java │ │ │ │ ├── InetAddressEditor.java │ │ │ │ ├── OriginCapablePropertyValue.java │ │ │ │ ├── PatternPropertyNamePatternsMatcher.java │ │ │ │ ├── PropertiesConfigurationFactory.java │ │ │ │ ├── PropertyNamePatternsMatcher.java │ │ │ │ ├── PropertyOrigin.java │ │ │ │ ├── PropertySourcesPropertyResolver.java │ │ │ │ ├── PropertySourcesPropertyValues.java │ │ │ │ ├── RelaxedConversionService.java │ │ │ │ ├── RelaxedDataBinder.java │ │ │ │ ├── RelaxedNames.java │ │ │ │ └── StringToCharArrayConverter.java │ │ │ └── common │ │ │ │ ├── AbstractResource.java │ │ │ │ ├── ByteArrayResource.java │ │ │ │ ├── CompositePropertySource.java │ │ │ │ ├── EnumerablePropertySource.java │ │ │ │ ├── MapPropertySource.java │ │ │ │ ├── MutablePropertySources.java │ │ │ │ ├── PropertiesPropertySource.java │ │ │ │ ├── PropertySource.java │ │ │ │ ├── PropertySourceLoader.java │ │ │ │ ├── PropertySources.java │ │ │ │ ├── Resource.java │ │ │ │ ├── SpringProfileDocumentMatcher.java │ │ │ │ ├── YamlProcessor.java │ │ │ │ └── YamlPropertySourceLoader.java │ │ │ └── support │ │ │ ├── AbstractEtlService.java │ │ │ ├── AdapterConfig.java │ │ │ ├── CanalClientConfig.java │ │ │ ├── Constant.java │ │ │ ├── DaemonThreadFactory.java │ │ │ ├── DatasourceConfig.java │ │ │ ├── Dml.java │ │ │ ├── EtlResult.java │ │ │ ├── ExtensionLoader.java │ │ │ ├── JdbcTypeUtil.java │ │ │ ├── MappingConfigsLoader.java │ │ │ ├── MessageUtil.java │ │ │ ├── OuterAdapterConfig.java │ │ │ ├── Result.java │ │ │ ├── SPI.java │ │ │ ├── URLClassExtensionLoader.java │ │ │ └── Util.java │ │ └── test │ │ └── java │ │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── client │ │ └── adapter │ │ └── support │ │ ├── JdbcTypeUtilTest.java │ │ └── UtilTest.java ├── es6x │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ ├── com │ │ │ │ └── alibaba │ │ │ │ │ └── otter │ │ │ │ │ └── canal │ │ │ │ │ └── client │ │ │ │ │ └── adapter │ │ │ │ │ └── es6x │ │ │ │ │ ├── ES6xAdapter.java │ │ │ │ │ ├── etl │ │ │ │ │ └── ESEtlService.java │ │ │ │ │ └── support │ │ │ │ │ ├── ES6xTemplate.java │ │ │ │ │ └── ESConnection.java │ │ │ └── org │ │ │ │ └── elasticsearch │ │ │ │ └── client │ │ │ │ ├── RequestConvertersExt.java │ │ │ │ └── RestHighLevelClientExt.java │ │ └── resources │ │ │ ├── META-INF │ │ │ └── canal │ │ │ │ └── com.alibaba.otter.canal.client.adapter.OuterAdapter │ │ │ └── es6 │ │ │ ├── biz_order.yml │ │ │ ├── customer.yml │ │ │ └── mytest_user.yml │ │ └── test │ │ ├── java │ │ └── com │ │ │ └── alibaba │ │ │ └── otter │ │ │ └── canal │ │ │ └── client │ │ │ └── adapter │ │ │ └── es6x │ │ │ └── test │ │ │ ├── ConfigLoadTest.java │ │ │ ├── ESTest.java │ │ │ ├── SqlParseTest.java │ │ │ ├── TestConstant.java │ │ │ └── sync │ │ │ ├── Common.java │ │ │ ├── LabelSyncJoinSub2Test.java │ │ │ ├── LabelSyncJoinSubTest.java │ │ │ ├── RoleSyncJoinOne2Test.java │ │ │ ├── RoleSyncJoinOneTest.java │ │ │ ├── UserSyncJoinOneTest.java │ │ │ ├── UserSyncSingleTest.java │ │ │ ├── db_schema.sql │ │ │ └── es_mapping.json │ │ └── resources │ │ ├── es6 │ │ └── mytest_user_single.yml │ │ ├── log4j2-test.xml │ │ └── logback-test.xml ├── es7x │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── alibaba │ │ │ │ └── otter │ │ │ │ └── canal │ │ │ │ └── client │ │ │ │ └── adapter │ │ │ │ └── es7x │ │ │ │ ├── ES7xAdapter.java │ │ │ │ ├── etl │ │ │ │ └── ESEtlService.java │ │ │ │ └── support │ │ │ │ ├── ES7xTemplate.java │ │ │ │ └── ESConnection.java │ │ └── resources │ │ │ ├── META-INF │ │ │ └── canal │ │ │ │ └── com.alibaba.otter.canal.client.adapter.OuterAdapter │ │ │ └── es7 │ │ │ ├── biz_order.yml │ │ │ ├── customer.yml │ │ │ └── mytest_user.yml │ │ └── test │ │ └── java │ │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── client │ │ └── adapter │ │ └── es7x │ │ └── test │ │ ├── ES7xTest.java │ │ ├── ESConnectionTest.java │ │ └── TestConstant.java ├── escore │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── client │ │ └── adapter │ │ └── es │ │ └── core │ │ ├── ESAdapter.java │ │ ├── config │ │ ├── ESSyncConfig.java │ │ ├── ESSyncConfigLoader.java │ │ ├── SchemaItem.java │ │ └── SqlParser.java │ │ ├── monitor │ │ └── ESConfigMonitor.java │ │ ├── service │ │ └── ESSyncService.java │ │ └── support │ │ ├── ESBulkRequest.java │ │ ├── ESSyncUtil.java │ │ └── ESTemplate.java ├── hbase │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── alibaba │ │ │ │ └── otter │ │ │ │ └── canal │ │ │ │ └── client │ │ │ │ └── adapter │ │ │ │ └── hbase │ │ │ │ ├── HbaseAdapter.java │ │ │ │ ├── config │ │ │ │ ├── MappingConfig.java │ │ │ │ └── MappingConfigLoader.java │ │ │ │ ├── monitor │ │ │ │ └── HbaseConfigMonitor.java │ │ │ │ ├── service │ │ │ │ ├── HbaseEtlService.java │ │ │ │ └── HbaseSyncService.java │ │ │ │ └── support │ │ │ │ ├── HRow.java │ │ │ │ ├── HbaseTemplate.java │ │ │ │ ├── PhType.java │ │ │ │ ├── PhTypeUtil.java │ │ │ │ ├── Type.java │ │ │ │ └── TypeUtil.java │ │ └── resources │ │ │ ├── META-INF │ │ │ └── canal │ │ │ │ └── com.alibaba.otter.canal.client.adapter.OuterAdapter │ │ │ └── hbase │ │ │ └── mytest_person2.yml │ │ └── test │ │ └── java │ │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── client │ │ └── adapter │ │ └── hbase │ │ └── test │ │ └── HBaseConnectionTest.java ├── kudu │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── alibaba │ │ │ │ └── otter │ │ │ │ └── canal │ │ │ │ └── client │ │ │ │ └── adapter │ │ │ │ └── kudu │ │ │ │ ├── KuduAdapter.java │ │ │ │ ├── config │ │ │ │ ├── KuduMappingConfig.java │ │ │ │ └── KuduMappingConfigLoader.java │ │ │ │ ├── monitor │ │ │ │ └── KuduConfigMonitor.java │ │ │ │ ├── service │ │ │ │ ├── KuduEtlService.java │ │ │ │ └── KuduSyncService.java │ │ │ │ └── support │ │ │ │ ├── KuduTemplate.java │ │ │ │ └── SyncUtil.java │ │ └── resources │ │ │ ├── META-INF.canal │ │ │ └── com.alibaba.otter.canal.client.adapter.OuterAdapter │ │ │ └── kudu │ │ │ └── kudutest_user.yml │ │ └── test │ │ └── java │ │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── client │ │ └── adapter │ │ └── kudu │ │ └── test │ │ ├── KuduConnectionTest.java │ │ ├── TestConfig.java │ │ ├── TestConstant.java │ │ └── sync │ │ ├── Common.java │ │ └── TestSyncKudu.java ├── launcher │ ├── pom.xml │ └── src │ │ └── main │ │ ├── assembly │ │ ├── dev.xml │ │ └── release.xml │ │ ├── bin │ │ ├── restart.sh │ │ ├── startup.bat │ │ ├── startup.sh │ │ └── stop.sh │ │ ├── java │ │ └── com │ │ │ └── alibaba │ │ │ └── otter │ │ │ └── canal │ │ │ └── adapter │ │ │ └── launcher │ │ │ ├── CanalAdapterApplication.java │ │ │ ├── common │ │ │ ├── EtlLock.java │ │ │ ├── Mode.java │ │ │ └── SyncSwitch.java │ │ │ ├── config │ │ │ ├── AdapterCanalConfig.java │ │ │ ├── AdapterConfigHolder.java │ │ │ ├── BootstrapConfiguration.java │ │ │ ├── CuratorClient.java │ │ │ └── SpringContext.java │ │ │ ├── loader │ │ │ ├── AdapterProcessor.java │ │ │ ├── CanalAdapterLoader.java │ │ │ └── CanalAdapterService.java │ │ │ ├── monitor │ │ │ ├── ApplicationConfigMonitor.java │ │ │ └── remote │ │ │ │ ├── ConfigItem.java │ │ │ │ ├── DbRemoteConfigLoader.java │ │ │ │ ├── RemoteAdapterMonitor.java │ │ │ │ ├── RemoteAdapterMonitorImpl.java │ │ │ │ ├── RemoteConfigLoader.java │ │ │ │ └── RemoteConfigLoaderFactory.java │ │ │ └── rest │ │ │ └── CommonRest.java │ │ └── resources │ │ ├── META-INF │ │ └── spring.factories │ │ ├── application.yml │ │ ├── bootstrap.yml │ │ └── logback.xml ├── logger │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── alibaba │ │ │ └── otter │ │ │ └── canal │ │ │ └── client │ │ │ └── adapter │ │ │ └── logger │ │ │ └── LoggerAdapterExample.java │ │ └── resources │ │ └── META-INF │ │ └── canal │ │ └── com.alibaba.otter.canal.client.adapter.OuterAdapter ├── pom.xml └── rdb │ ├── pom.xml │ └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── alibaba │ │ │ └── otter │ │ │ └── canal │ │ │ └── client │ │ │ └── adapter │ │ │ └── rdb │ │ │ ├── RdbAdapter.java │ │ │ ├── config │ │ │ ├── ConfigLoader.java │ │ │ ├── MappingConfig.java │ │ │ └── MirrorDbConfig.java │ │ │ ├── monitor │ │ │ └── RdbConfigMonitor.java │ │ │ ├── service │ │ │ ├── RdbEtlService.java │ │ │ ├── RdbMirrorDbSyncService.java │ │ │ └── RdbSyncService.java │ │ │ └── support │ │ │ ├── BatchExecutor.java │ │ │ ├── SingleDml.java │ │ │ └── SyncUtil.java │ └── resources │ │ ├── META-INF │ │ └── canal │ │ │ └── com.alibaba.otter.canal.client.adapter.OuterAdapter │ │ └── rdb │ │ └── mytest_user.yml │ └── test │ ├── java │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── client │ │ └── adapter │ │ └── rdb │ │ └── test │ │ ├── ConfigLoadTest.java │ │ ├── DBTest.java │ │ ├── SqlParserTest.java │ │ ├── TestConstant.java │ │ └── sync │ │ ├── Common.java │ │ └── OracleSyncTest.java │ └── resources │ ├── log4j2-test.xml │ ├── logback-test.xml │ └── rdb │ └── mytest_user.yml ├── client ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── client │ │ ├── CanalConnector.java │ │ ├── CanalConnectors.java │ │ ├── CanalMQConnector.java │ │ ├── CanalMessageDeserializer.java │ │ ├── CanalNodeAccessStrategy.java │ │ ├── ConsumerBatchMessage.java │ │ ├── impl │ │ ├── ClusterCanalConnector.java │ │ ├── ClusterNodeAccessStrategy.java │ │ ├── ServerNotFoundException.java │ │ ├── SimpleCanalConnector.java │ │ ├── SimpleNodeAccessStrategy.java │ │ └── running │ │ │ ├── ClientRunningData.java │ │ │ ├── ClientRunningListener.java │ │ │ └── ClientRunningMonitor.java │ │ ├── kafka │ │ ├── KafkaCanalConnector.java │ │ ├── KafkaOffsetCanalConnector.java │ │ ├── MessageDeserializer.java │ │ └── protocol │ │ │ ├── KafkaFlatMessage.java │ │ │ └── KafkaMessage.java │ │ ├── rabbitmq │ │ ├── AliyunCredentialsProvider.java │ │ └── RabbitMQCanalConnector.java │ │ └── rocketmq │ │ └── RocketMQCanalConnector.java │ └── test │ └── java │ ├── com │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── client │ │ └── running │ │ ├── AbstractZkTest.java │ │ └── ClientRunningTest.java │ └── logback.xml ├── codeformat.xml ├── codetemplates.xml ├── common ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ ├── alibaba │ │ └── otter │ │ │ └── canal │ │ │ └── common │ │ │ ├── AbstractCanalLifeCycle.java │ │ │ ├── CanalException.java │ │ │ ├── CanalLifeCycle.java │ │ │ ├── alarm │ │ │ ├── CanalAlarmHandler.java │ │ │ └── LogAlarmHandler.java │ │ │ ├── utils │ │ │ ├── AddressUtils.java │ │ │ ├── BooleanMutex.java │ │ │ ├── CanalToStringStyle.java │ │ │ ├── CommonUtils.java │ │ │ ├── ExecutorTemplate.java │ │ │ ├── FileUtils.java │ │ │ ├── JsonUtils.java │ │ │ ├── NamedThreadFactory.java │ │ │ └── UriUtils.java │ │ │ └── zookeeper │ │ │ ├── ByteSerializer.java │ │ │ ├── StringSerializer.java │ │ │ ├── ZkClientx.java │ │ │ ├── ZooKeeperx.java │ │ │ ├── ZookeeperPathUtils.java │ │ │ └── running │ │ │ ├── ServerRunningData.java │ │ │ ├── ServerRunningListener.java │ │ │ ├── ServerRunningMonitor.java │ │ │ └── ServerRunningMonitors.java │ │ └── google │ │ └── common │ │ └── collect │ │ └── MigrateMap.java │ └── test │ └── java │ ├── com │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── common │ │ ├── AbstractZkTest.java │ │ └── ServerRunningTest.java │ └── logback.xml ├── connector ├── core │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── connector │ │ └── core │ │ ├── config │ │ ├── CanalConstants.java │ │ └── MQProperties.java │ │ ├── consumer │ │ └── CommonMessage.java │ │ ├── filter │ │ ├── AviaterRegexFilter.java │ │ ├── PatternUtils.java │ │ └── RegexFunction.java │ │ ├── producer │ │ ├── AbstractMQProducer.java │ │ ├── MQDestination.java │ │ └── MQMessageUtils.java │ │ ├── spi │ │ ├── CanalMQProducer.java │ │ ├── CanalMsgConsumer.java │ │ ├── ExtensionLoader.java │ │ ├── SPI.java │ │ └── URLClassExtensionLoader.java │ │ └── util │ │ ├── Callback.java │ │ ├── CanalMessageSerializerUtil.java │ │ ├── DateUtil.java │ │ ├── JdbcTypeUtil.java │ │ ├── MessageUtil.java │ │ └── TimeZone.java ├── kafka-connector │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── alibaba │ │ │ │ └── otter │ │ │ │ └── canal │ │ │ │ └── connector │ │ │ │ └── kafka │ │ │ │ ├── config │ │ │ │ ├── KafkaConstants.java │ │ │ │ └── KafkaProducerConfig.java │ │ │ │ ├── consumer │ │ │ │ ├── CanalKafkaConsumer.java │ │ │ │ └── KafkaMessageDeserializer.java │ │ │ │ └── producer │ │ │ │ ├── CanalKafkaProducer.java │ │ │ │ └── KafkaMessageSerializer.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── canal │ │ │ ├── com.alibaba.otter.canal.connector.core.spi.CanalMQProducer │ │ │ └── com.alibaba.otter.canal.connector.core.spi.CanalMsgConsumer │ │ └── test │ │ └── java │ │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── connector │ │ └── kafka │ │ └── test │ │ └── CanalKafkaProducerTest.java ├── pom.xml ├── rabbitmq-connector │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── alibaba │ │ │ └── otter │ │ │ └── canal │ │ │ └── connector │ │ │ └── rabbitmq │ │ │ ├── config │ │ │ ├── RabbitMQConstants.java │ │ │ └── RabbitMQProducerConfig.java │ │ │ ├── consumer │ │ │ ├── CanalRabbitMQConsumer.java │ │ │ └── ConsumerBatchMessage.java │ │ │ └── producer │ │ │ ├── AliyunCredentialsProvider.java │ │ │ └── CanalRabbitMQProducer.java │ │ └── resources │ │ └── META-INF │ │ └── canal │ │ ├── com.alibaba.otter.canal.connector.core.spi.CanalMQProducer │ │ └── com.alibaba.otter.canal.connector.core.spi.CanalMsgConsumer ├── rocketmq-connector │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── alibaba │ │ │ └── otter │ │ │ └── canal │ │ │ └── connector │ │ │ └── rocketmq │ │ │ ├── config │ │ │ ├── RocketMQConstants.java │ │ │ └── RocketMQProducerConfig.java │ │ │ ├── consumer │ │ │ ├── CanalRocketMQConsumer.java │ │ │ └── ConsumerBatchMessage.java │ │ │ └── producer │ │ │ └── CanalRocketMQProducer.java │ │ └── resources │ │ └── META-INF │ │ └── canal │ │ ├── com.alibaba.otter.canal.connector.core.spi.CanalMQProducer │ │ └── com.alibaba.otter.canal.connector.core.spi.CanalMsgConsumer └── tcp-connector │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── connector │ │ └── tcp │ │ ├── config │ │ └── TCPConstants.java │ │ └── consumer │ │ └── CanalTCPConsumer.java │ └── resources │ └── META-INF │ └── canal │ └── com.alibaba.otter.canal.connector.core.spi.CanalMsgConsumer ├── dbsync ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── taobao │ │ └── tddl │ │ └── dbsync │ │ └── binlog │ │ ├── CharsetConversion.java │ │ ├── DirectLogFetcher.java │ │ ├── FileLogFetcher.java │ │ ├── JsonConversion.java │ │ ├── JsonDiffConversion.java │ │ ├── LogBuffer.java │ │ ├── LogContext.java │ │ ├── LogDecoder.java │ │ ├── LogEvent.java │ │ ├── LogFetcher.java │ │ ├── LogPosition.java │ │ ├── event │ │ ├── AppendBlockLogEvent.java │ │ ├── BeginLoadQueryLogEvent.java │ │ ├── CreateFileLogEvent.java │ │ ├── DeleteFileLogEvent.java │ │ ├── DeleteRowsLogEvent.java │ │ ├── ExecuteLoadLogEvent.java │ │ ├── ExecuteLoadQueryLogEvent.java │ │ ├── FormatDescriptionLogEvent.java │ │ ├── GtidLogEvent.java │ │ ├── HeartbeatLogEvent.java │ │ ├── IgnorableLogEvent.java │ │ ├── IncidentLogEvent.java │ │ ├── IntvarLogEvent.java │ │ ├── LoadLogEvent.java │ │ ├── LogHeader.java │ │ ├── PreviousGtidsLogEvent.java │ │ ├── QueryLogEvent.java │ │ ├── RandLogEvent.java │ │ ├── RotateLogEvent.java │ │ ├── RowsLogBuffer.java │ │ ├── RowsLogEvent.java │ │ ├── RowsQueryLogEvent.java │ │ ├── StartLogEventV3.java │ │ ├── StopLogEvent.java │ │ ├── TableMapLogEvent.java │ │ ├── TransactionContextLogEvent.java │ │ ├── UnknownLogEvent.java │ │ ├── UpdateRowsLogEvent.java │ │ ├── UserVarLogEvent.java │ │ ├── ViewChangeEvent.java │ │ ├── WriteRowsLogEvent.java │ │ ├── XaPrepareLogEvent.java │ │ ├── XidLogEvent.java │ │ └── mariadb │ │ │ ├── AnnotateRowsEvent.java │ │ │ ├── BinlogCheckPointLogEvent.java │ │ │ ├── MariaGtidListLogEvent.java │ │ │ ├── MariaGtidLogEvent.java │ │ │ └── StartEncryptionLogEvent.java │ │ └── exception │ │ └── TableIdNotFoundException.java │ └── test │ ├── java │ └── com │ │ └── taobao │ │ └── tddl │ │ └── dbsync │ │ ├── FetcherPerformanceTest.java │ │ └── binlog │ │ ├── BaseLogFetcherTest.java │ │ ├── DirectLogFetcherTest.java │ │ ├── FileLogFetcherTest.java │ │ ├── JsonConversion_Json_ValueTest.java │ │ ├── JsonDiffConversionTest.java │ │ ├── LogEventTest.java │ │ └── event │ │ └── LogHeaderTest.java │ └── resources │ ├── binlog │ └── mysql-bin.000001 │ └── dummy.txt ├── deployer ├── pom.xml └── src │ └── main │ ├── assembly │ ├── dev.xml │ └── release.xml │ ├── bin │ ├── restart.sh │ ├── startup.bat │ ├── startup.sh │ └── stop.sh │ ├── java │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── deployer │ │ ├── CanalConstants.java │ │ ├── CanalController.java │ │ ├── CanalLauncher.java │ │ ├── CanalStarter.java │ │ ├── InstanceConfig.java │ │ ├── admin │ │ └── CanalAdminController.java │ │ └── monitor │ │ ├── InstanceAction.java │ │ ├── InstanceConfigMonitor.java │ │ ├── ManagerInstanceConfigMonitor.java │ │ └── SpringInstanceConfigMonitor.java │ └── resources │ ├── canal.properties │ ├── canal_local.properties │ ├── example │ └── instance.properties │ ├── logback.xml │ ├── metrics │ └── Canal_instances_tmpl.json │ └── spring │ ├── base-instance.xml │ ├── default-instance.xml │ ├── file-instance.xml │ ├── group-instance.xml │ ├── memory-instance.xml │ └── tsdb │ ├── h2-tsdb.xml │ ├── mysql-tsdb.xml │ ├── sql-map │ ├── sqlmap-config.xml │ ├── sqlmap_history.xml │ └── sqlmap_snapshot.xml │ └── sql │ └── create_table.sql ├── docker ├── Dockerfile ├── Dockerfile_admin ├── base │ ├── Dockerfile │ ├── Dockerfile_admin │ └── Dockerfile_v2 ├── build.sh ├── image │ ├── admin │ │ ├── bin │ │ │ ├── clean_log │ │ │ └── clean_log.sh │ │ └── health.sh │ ├── alidata │ │ ├── bin │ │ │ ├── exec_rc_local.sh │ │ │ ├── lark-wait │ │ │ └── main.sh │ │ ├── init │ │ │ ├── 02init-sshd.sh │ │ │ └── fix-hosts.py │ │ └── lib │ │ │ └── proc.sh │ ├── app.sh │ ├── app_admin.sh │ └── canal_manager.sql ├── run.sh └── run_admin.sh ├── driver ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── parse │ │ └── driver │ │ └── mysql │ │ ├── MysqlConnector.java │ │ ├── MysqlQueryExecutor.java │ │ ├── MysqlUpdateExecutor.java │ │ ├── packets │ │ ├── Capability.java │ │ ├── CommandPacket.java │ │ ├── GTIDSet.java │ │ ├── HeaderPacket.java │ │ ├── IPacket.java │ │ ├── MysqlGTIDSet.java │ │ ├── PacketWithHeaderPacket.java │ │ ├── UUIDSet.java │ │ ├── client │ │ │ ├── AuthSwitchResponsePacket.java │ │ │ ├── BinlogDumpCommandPacket.java │ │ │ ├── BinlogDumpGTIDCommandPacket.java │ │ │ ├── ClientAuthenticationPacket.java │ │ │ ├── QueryCommandPacket.java │ │ │ ├── QuitCommandPacket.java │ │ │ ├── RegisterSlaveCommandPacket.java │ │ │ └── SemiAckCommandPacket.java │ │ └── server │ │ │ ├── AuthSwitchRequestMoreData.java │ │ │ ├── AuthSwitchRequestPacket.java │ │ │ ├── DataPacket.java │ │ │ ├── EOFPacket.java │ │ │ ├── ErrorPacket.java │ │ │ ├── FieldPacket.java │ │ │ ├── HandshakeInitializationPacket.java │ │ │ ├── OKPacket.java │ │ │ ├── Reply323Packet.java │ │ │ ├── ResultSetHeaderPacket.java │ │ │ ├── ResultSetPacket.java │ │ │ └── RowDataPacket.java │ │ ├── socket │ │ ├── BioSocketChannel.java │ │ ├── BioSocketChannelPool.java │ │ ├── NettySocketChannel.java │ │ ├── NettySocketChannelPool.java │ │ ├── SocketChannel.java │ │ └── SocketChannelPool.java │ │ └── utils │ │ ├── BinlogDumpCommandBuilder.java │ │ ├── ByteHelper.java │ │ ├── ChannelBufferHelper.java │ │ ├── CharsetUtil.java │ │ ├── LengthCodedStringReader.java │ │ ├── MSC.java │ │ ├── MySQLPasswordEncrypter.java │ │ └── PacketManager.java │ └── test │ └── java │ └── com │ └── alibaba │ └── otter │ └── canal │ └── parse │ └── driver │ └── mysql │ ├── CharsetUtilTest.java │ ├── MysqlConnectorTest.java │ ├── MysqlGTIDSetTest.java │ ├── UUIDSetTest.java │ ├── packets │ └── client │ │ └── RegisterSlaveCommandPacketTest.java │ └── utils │ ├── ByteHelperTest.java │ └── MySQLPasswordEncrypterTest.java ├── example ├── pom.xml └── src │ └── main │ ├── assembly │ ├── dev.xml │ └── release.xml │ ├── bin │ ├── init.sh │ ├── startup.bat │ ├── startup.sh │ └── stop.sh │ ├── java │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── example │ │ ├── AbstractCanalClientTest.java │ │ ├── BaseCanalClientTest.java │ │ ├── ClusterCanalClientTest.java │ │ ├── SimpleCanalClientPermanceTest.java │ │ ├── SimpleCanalClientTest.java │ │ ├── kafka │ │ ├── AbstractKafkaTest.java │ │ ├── CanalKafkaClientExample.java │ │ ├── CanalKafkaClientFlatMessageExample.java │ │ ├── CanalKafkaOffsetClientExample.java │ │ └── KafkaClientRunningTest.java │ │ └── rocketmq │ │ ├── AbstractRocektMQTest.java │ │ ├── CanalRocketMQClientExample.java │ │ └── CanalRocketMQClientFlatMessageExample.java │ └── resources │ ├── client-spring.xml │ ├── client.properties │ └── logback.xml ├── filter ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── filter │ │ ├── CanalEventFilter.java │ │ ├── PatternUtils.java │ │ ├── aviater │ │ ├── AviaterELFilter.java │ │ ├── AviaterRegexFilter.java │ │ ├── AviaterSimpleFilter.java │ │ └── RegexFunction.java │ │ └── exception │ │ └── CanalFilterException.java │ └── test │ └── java │ └── com │ └── alibaba │ └── otter │ └── canal │ └── filter │ ├── AviaterFilterTest.java │ └── MutliAviaterFilterTest.java ├── images ├── QPS.PNG ├── TPS.PNG ├── basic.PNG ├── clients.PNG ├── delay.PNG ├── empty.PNG ├── idle.PNG ├── instance.PNG ├── latency.PNG ├── network.PNG ├── overview.PNG ├── remain_events.PNG ├── remain_mem.PNG ├── reqs.PNG ├── rows.PNG ├── store.PNG ├── throughput.PNG └── transactions.PNG ├── instance ├── core │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── instance │ │ └── core │ │ ├── AbstractCanalInstance.java │ │ ├── CanalInstance.java │ │ ├── CanalInstanceGenerator.java │ │ └── CanalMQConfig.java ├── manager │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── alibaba │ │ │ └── otter │ │ │ └── canal │ │ │ └── instance │ │ │ └── manager │ │ │ ├── CanalConfigClient.java │ │ │ ├── CanalInstanceWithManager.java │ │ │ ├── ManagerCanalInstanceGenerator.java │ │ │ ├── PlainCanalInstanceGenerator.java │ │ │ ├── model │ │ │ ├── Canal.java │ │ │ ├── CanalParameter.java │ │ │ └── CanalStatus.java │ │ │ └── plain │ │ │ ├── HttpHelper.java │ │ │ ├── PlainCanal.java │ │ │ └── PlainCanalConfigClient.java │ │ └── test │ │ └── java │ │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── instance │ │ └── manager │ │ └── PlainCanalConfigClientIntegration.java ├── pom.xml └── spring │ ├── pom.xml │ └── src │ ├── main │ └── java │ │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── instance │ │ └── spring │ │ ├── CanalInstanceWithSpring.java │ │ ├── SpringCanalInstanceGenerator.java │ │ └── support │ │ ├── PropertyPlaceholderConfigurer.java │ │ └── SocketAddressEditor.java │ └── test │ ├── java │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── instance │ │ └── spring │ │ └── integrated │ │ ├── DefaultSpringInstanceTest.java │ │ ├── GroupSpringInstanceTest.java │ │ └── MemorySpringInstanceTest.java │ └── resources │ ├── canal.properties │ ├── retl │ └── instance.properties │ └── spring │ ├── default-instance.xml │ ├── file-instance.xml │ ├── group-instance.xml │ └── memory-instance.xml ├── logo.png ├── meta ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── meta │ │ ├── CanalMetaManager.java │ │ ├── FileMixedMetaManager.java │ │ ├── MemoryMetaManager.java │ │ ├── MixedMetaManager.java │ │ ├── PeriodMixedMetaManager.java │ │ ├── ZooKeeperMetaManager.java │ │ └── exception │ │ └── CanalMetaManagerException.java │ └── test │ └── java │ └── com │ └── alibaba │ └── otter │ └── canal │ └── meta │ ├── AbstractMetaManagerTest.java │ ├── AbstractZkTest.java │ ├── FileMixedMetaManagerTest.java │ ├── MemoryMetaManagerTest.java │ ├── MixedMetaManagerTest.java │ ├── PeriodMixedMetaManagerTest.java │ └── ZooKeeperMetaManagerTest.java ├── mvnw ├── parse ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── alibaba │ │ │ └── otter │ │ │ └── canal │ │ │ └── parse │ │ │ ├── CanalEventParser.java │ │ │ ├── CanalHASwitchable.java │ │ │ ├── exception │ │ │ ├── CanalHAException.java │ │ │ ├── CanalParseException.java │ │ │ ├── PositionNotFoundException.java │ │ │ └── ServerIdNotMatchException.java │ │ │ ├── ha │ │ │ ├── CanalHAController.java │ │ │ └── HeartBeatHAController.java │ │ │ ├── inbound │ │ │ ├── AbstractBinlogParser.java │ │ │ ├── AbstractEventParser.java │ │ │ ├── BinlogParser.java │ │ │ ├── ErosaConnection.java │ │ │ ├── EventTransactionBuffer.java │ │ │ ├── HeartBeatCallback.java │ │ │ ├── MultiStageCoprocessor.java │ │ │ ├── ParserExceptionHandler.java │ │ │ ├── SinkFunction.java │ │ │ ├── TableMeta.java │ │ │ ├── group │ │ │ │ └── GroupEventParser.java │ │ │ └── mysql │ │ │ │ ├── AbstractMysqlEventParser.java │ │ │ │ ├── DbsyncMysqlEventParser.java │ │ │ │ ├── LocalBinLogConnection.java │ │ │ │ ├── LocalBinlogEventParser.java │ │ │ │ ├── MysqlConnection.java │ │ │ │ ├── MysqlEventParser.java │ │ │ │ ├── MysqlMultiStageCoprocessor.java │ │ │ │ ├── SlaveEntryPosition.java │ │ │ │ ├── dbsync │ │ │ │ ├── DirectLogFetcher.java │ │ │ │ ├── LogEventConvert.java │ │ │ │ └── TableMetaCache.java │ │ │ │ ├── ddl │ │ │ │ ├── DdlResult.java │ │ │ │ ├── DruidDdlParser.java │ │ │ │ └── SimpleDdlParser.java │ │ │ │ ├── local │ │ │ │ ├── BinLogFileQueue.java │ │ │ │ └── BufferedFileDataInput.java │ │ │ │ ├── rds │ │ │ │ ├── BinlogDownloadQueue.java │ │ │ │ ├── HttpHelper.java │ │ │ │ ├── RdsBinlogEventParserProxy.java │ │ │ │ ├── RdsBinlogOpenApi.java │ │ │ │ ├── RdsLocalBinlogEventParser.java │ │ │ │ ├── data │ │ │ │ │ ├── BinlogFile.java │ │ │ │ │ ├── DescribeBinlogFileResult.java │ │ │ │ │ ├── RdsBackupPolicy.java │ │ │ │ │ └── RdsItem.java │ │ │ │ └── request │ │ │ │ │ ├── AbstractRequest.java │ │ │ │ │ ├── DescribeBackupPolicyRequest.java │ │ │ │ │ └── DescribeBinlogFilesRequest.java │ │ │ │ └── tsdb │ │ │ │ ├── DatabaseTableMeta.java │ │ │ │ ├── DefaultTableMetaTSDBFactory.java │ │ │ │ ├── MemoryTableMeta.java │ │ │ │ ├── TableMetaTSDB.java │ │ │ │ ├── TableMetaTSDBBuilder.java │ │ │ │ ├── TableMetaTSDBFactory.java │ │ │ │ └── dao │ │ │ │ ├── MetaBaseDAO.java │ │ │ │ ├── MetaHistoryDAO.java │ │ │ │ ├── MetaHistoryDO.java │ │ │ │ ├── MetaSnapshotDAO.java │ │ │ │ └── MetaSnapshotDO.java │ │ │ ├── index │ │ │ ├── AbstractLogPositionManager.java │ │ │ ├── CanalLogPositionManager.java │ │ │ ├── FailbackLogPositionManager.java │ │ │ ├── FileMixedLogPositionManager.java │ │ │ ├── MemoryLogPositionManager.java │ │ │ ├── MetaLogPositionManager.java │ │ │ ├── MixedLogPositionManager.java │ │ │ ├── PeriodMixedLogPositionManager.java │ │ │ └── ZooKeeperLogPositionManager.java │ │ │ └── support │ │ │ ├── AuthenticationInfo.java │ │ │ └── HaAuthenticationInfo.java │ └── resources │ │ └── ddl │ │ ├── derby │ │ ├── meta_history.sql │ │ └── meta_snapshot.sql │ │ ├── h2 │ │ ├── meta_history.sql │ │ └── meta_snapshot.sql │ │ └── mysql │ │ ├── meta_history.sql │ │ └── meta_snapshot.sql │ └── test │ ├── java │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── parse │ │ ├── DirectLogFetcherTest.java │ │ ├── MysqlBinlogDumpPerformanceTest.java │ │ ├── MysqlBinlogEventPerformanceTest.java │ │ ├── MysqlBinlogParsePerformanceTest.java │ │ ├── helper │ │ └── TimeoutChecker.java │ │ ├── inbound │ │ ├── EventTransactionBufferTest.java │ │ ├── TableMetaCacheTest.java │ │ ├── group │ │ │ ├── DummyEventStore.java │ │ │ └── GroupEventPaserTest.java │ │ └── mysql │ │ │ ├── DruidDdlParserTest.java │ │ │ ├── LocalBinlogDumpTest.java │ │ │ ├── LocalBinlogEventParserTest.java │ │ │ ├── MysqlDumpTest.java │ │ │ ├── MysqlEventParserTest.java │ │ │ ├── RdsBinlogEventParserProxyTest.java │ │ │ ├── RdsBinlogOpenApiTest.java │ │ │ ├── RdsLocalBinlogDumpTest.java │ │ │ ├── SimpleDdlParserTest.java │ │ │ ├── ddl │ │ │ └── DdlResultTest.java │ │ │ └── tsdb │ │ │ ├── FastsqlSchemaTest.java │ │ │ ├── MemoryTableMetaTest.java │ │ │ ├── MemoryTableMeta_DDL_Test.java │ │ │ ├── MemoryTableMeta_Random_DDL_Test.java │ │ │ ├── MetaHistoryDAOTest.java │ │ │ ├── MetaSnapshotDAOTest.java │ │ │ ├── TableMetaManagerBuilderTest.java │ │ │ └── TableMetaManagerTest.java │ │ ├── index │ │ ├── AbstractLogPositionManagerTest.java │ │ ├── AbstractZkTest.java │ │ ├── FileMixedLogPositionManagerTest.java │ │ ├── MemoryLogPositionManagerTest.java │ │ ├── MetaLogPositionManagerTest.java │ │ ├── MixedLogPositionManagerTest.java │ │ ├── PeriodMixedLogPositionManagerTest.java │ │ └── ZooKeeperLogPositionManagerTest.java │ │ └── stub │ │ └── AbstractCanalEventSinkTest.java │ └── resources │ ├── binlog │ ├── mysql-bin.000001 │ ├── mysql-bin.000002 │ └── tsdb │ │ ├── mysql-bin.000001 │ │ ├── mysql-bin.000002 │ │ └── mysql-bin.000003 │ ├── ddl │ ├── alter │ │ ├── mysql_1.sql │ │ ├── mysql_10.sql │ │ ├── mysql_11.sql │ │ ├── mysql_12.sql │ │ ├── mysql_13.sql │ │ ├── mysql_14.sql │ │ ├── mysql_15.sql │ │ ├── mysql_16.sql │ │ ├── mysql_17.sql │ │ ├── mysql_18.sql │ │ ├── mysql_19.sql │ │ ├── mysql_2.sql │ │ ├── mysql_20.sql │ │ ├── mysql_21.sql │ │ ├── mysql_22.sql │ │ ├── mysql_23.sql │ │ ├── mysql_24.sql │ │ ├── mysql_25.sql │ │ ├── mysql_26.sql │ │ ├── mysql_27.sql │ │ ├── mysql_28.sql │ │ ├── mysql_29.sql │ │ ├── mysql_3.sql │ │ ├── mysql_30.sql │ │ ├── mysql_31.sql │ │ ├── mysql_32.sql │ │ ├── mysql_33.sql │ │ ├── mysql_34.sql │ │ ├── mysql_35.sql │ │ ├── mysql_36.sql │ │ ├── mysql_37.sql │ │ ├── mysql_38.sql │ │ ├── mysql_39.sql │ │ ├── mysql_4.sql │ │ ├── mysql_40.sql │ │ ├── mysql_41.sql │ │ ├── mysql_42.sql │ │ ├── mysql_43.sql │ │ ├── mysql_44.sql │ │ ├── mysql_45.sql │ │ ├── mysql_46.sql │ │ ├── mysql_47.sql │ │ ├── mysql_48.sql │ │ ├── mysql_49.sql │ │ ├── mysql_5.sql │ │ ├── mysql_50.sql │ │ ├── mysql_51.sql │ │ ├── mysql_52.sql │ │ ├── mysql_53.sql │ │ ├── mysql_54.sql │ │ ├── mysql_55.sql │ │ ├── mysql_56.sql │ │ ├── mysql_57.sql │ │ ├── mysql_58.sql │ │ ├── mysql_59.sql │ │ ├── mysql_6.sql │ │ ├── mysql_60.sql │ │ ├── mysql_61.sql │ │ ├── mysql_62.sql │ │ ├── mysql_63.sql │ │ ├── mysql_64.sql │ │ ├── mysql_65.sql │ │ ├── mysql_66.sql │ │ ├── mysql_67.sql │ │ ├── mysql_68.sql │ │ ├── mysql_69.sql │ │ ├── mysql_7.sql │ │ ├── mysql_70.sql │ │ ├── mysql_71.sql │ │ ├── mysql_72.sql │ │ ├── mysql_73.sql │ │ ├── mysql_74.sql │ │ ├── mysql_75.sql │ │ ├── mysql_76.sql │ │ ├── mysql_77.sql │ │ ├── mysql_78.sql │ │ ├── mysql_79.sql │ │ ├── mysql_8.sql │ │ ├── mysql_80.sql │ │ ├── mysql_9.sql │ │ ├── test_1.sql │ │ ├── test_10.sql │ │ ├── test_11.sql │ │ ├── test_12.sql │ │ ├── test_13.sql │ │ ├── test_14.sql │ │ ├── test_15.sql │ │ ├── test_16.sql │ │ ├── test_17.sql │ │ ├── test_18.sql │ │ ├── test_19.sql │ │ ├── test_2.sql │ │ ├── test_20.sql │ │ ├── test_21.sql │ │ ├── test_22.sql │ │ ├── test_23.sql │ │ ├── test_24.sql │ │ ├── test_25.sql │ │ ├── test_26.sql │ │ ├── test_27.sql │ │ ├── test_28.sql │ │ ├── test_29.sql │ │ ├── test_3.sql │ │ ├── test_30.sql │ │ ├── test_31.sql │ │ ├── test_32.sql │ │ ├── test_33.sql │ │ ├── test_34.sql │ │ ├── test_35.sql │ │ ├── test_36.sql │ │ ├── test_37.sql │ │ ├── test_38.sql │ │ ├── test_39.sql │ │ ├── test_4.sql │ │ ├── test_40.sql │ │ ├── test_41.sql │ │ ├── test_42.sql │ │ ├── test_43.sql │ │ ├── test_44.sql │ │ ├── test_45.sql │ │ ├── test_46.sql │ │ ├── test_47.sql │ │ ├── test_48.sql │ │ ├── test_49.sql │ │ ├── test_5.sql │ │ ├── test_50.sql │ │ ├── test_51.sql │ │ ├── test_52.sql │ │ ├── test_53.sql │ │ ├── test_54.sql │ │ ├── test_55.sql │ │ ├── test_56.sql │ │ ├── test_57.sql │ │ ├── test_58.sql │ │ ├── test_59.sql │ │ ├── test_6.sql │ │ ├── test_60.sql │ │ ├── test_61.sql │ │ ├── test_62.sql │ │ ├── test_63.sql │ │ ├── test_64.sql │ │ ├── test_65.sql │ │ ├── test_66.sql │ │ ├── test_67.sql │ │ ├── test_68.sql │ │ ├── test_69.sql │ │ ├── test_7.sql │ │ ├── test_70.sql │ │ ├── test_71.sql │ │ ├── test_72.sql │ │ ├── test_73.sql │ │ ├── test_74.sql │ │ ├── test_75.sql │ │ ├── test_76.sql │ │ ├── test_77.sql │ │ ├── test_78.sql │ │ ├── test_79.sql │ │ ├── test_8.sql │ │ ├── test_80.sql │ │ └── test_9.sql │ ├── create.sql │ ├── ddl_any.sql │ ├── ddl_test1.sql │ ├── ddl_test2.sql │ ├── ddl_test3.sql │ └── table │ │ ├── mysql_1.sql │ │ ├── mysql_10.sql │ │ ├── mysql_11.sql │ │ ├── mysql_12.sql │ │ ├── mysql_13.sql │ │ ├── mysql_14.sql │ │ ├── mysql_15.sql │ │ ├── mysql_16.sql │ │ ├── mysql_17.sql │ │ ├── mysql_18.sql │ │ ├── mysql_19.sql │ │ ├── mysql_2.sql │ │ ├── mysql_20.sql │ │ ├── mysql_21.sql │ │ ├── mysql_22.sql │ │ ├── mysql_23.sql │ │ ├── mysql_24.sql │ │ ├── mysql_25.sql │ │ ├── mysql_26.sql │ │ ├── mysql_27.sql │ │ ├── mysql_28.sql │ │ ├── mysql_29.sql │ │ ├── mysql_3.sql │ │ ├── mysql_30.sql │ │ ├── mysql_31.sql │ │ ├── mysql_32.sql │ │ ├── mysql_33.sql │ │ ├── mysql_34.sql │ │ ├── mysql_35.sql │ │ ├── mysql_36.sql │ │ ├── mysql_37.sql │ │ ├── mysql_38.sql │ │ ├── mysql_39.sql │ │ ├── mysql_4.sql │ │ ├── mysql_5.sql │ │ ├── mysql_6.sql │ │ ├── mysql_7.sql │ │ ├── mysql_8.sql │ │ ├── mysql_9.sql │ │ ├── test_1.sql │ │ ├── test_10.sql │ │ ├── test_11.sql │ │ ├── test_12.sql │ │ ├── test_13.sql │ │ ├── test_14.sql │ │ ├── test_15.sql │ │ ├── test_16.sql │ │ ├── test_17.sql │ │ ├── test_18.sql │ │ ├── test_19.sql │ │ ├── test_2.sql │ │ ├── test_20.sql │ │ ├── test_21.sql │ │ ├── test_22.sql │ │ ├── test_23.sql │ │ ├── test_24.sql │ │ ├── test_25.sql │ │ ├── test_26.sql │ │ ├── test_27.sql │ │ ├── test_28.sql │ │ ├── test_29.sql │ │ ├── test_3.sql │ │ ├── test_30.sql │ │ ├── test_31.sql │ │ ├── test_32.sql │ │ ├── test_33.sql │ │ ├── test_34.sql │ │ ├── test_35.sql │ │ ├── test_36.sql │ │ ├── test_37.sql │ │ ├── test_38.sql │ │ ├── test_39.sql │ │ ├── test_4.sql │ │ ├── test_5.sql │ │ ├── test_6.sql │ │ ├── test_7.sql │ │ ├── test_8.sql │ │ └── test_9.sql │ ├── dummy.txt │ └── tsdb │ ├── derby-tsdb.xml │ ├── h2-tsdb.xml │ ├── mysql-tsdb.xml │ └── sql-map │ ├── sqlmap-config.xml │ ├── sqlmap_history.xml │ └── sqlmap_snapshot.xml ├── pom.xml ├── prometheus ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── prometheus │ │ ├── CanalInstanceExports.java │ │ ├── InstanceRegistry.java │ │ ├── PrometheusProvider.java │ │ ├── PrometheusService.java │ │ └── impl │ │ ├── EntryCollector.java │ │ ├── MetaCollector.java │ │ ├── ParserCollector.java │ │ ├── PrometheusCanalEventDownStreamHandler.java │ │ ├── PrometheusClientInstanceProfiler.java │ │ ├── SinkCollector.java │ │ └── StoreCollector.java │ └── resources │ └── META-INF │ └── services │ └── com.alibaba.otter.canal.spi.CanalMetricsProvider ├── protocol ├── pom.xml └── src │ └── main │ └── java │ └── com │ └── alibaba │ └── otter │ └── canal │ └── protocol │ ├── AdminPacket.java │ ├── AdminProtocol.proto │ ├── CanalEntry.java │ ├── CanalPacket.java │ ├── CanalProtocol.proto │ ├── ClientIdentity.java │ ├── EntryProtocol.proto │ ├── FlatMessage.java │ ├── Message.java │ ├── SecurityUtil.java │ ├── exception │ └── CanalClientException.java │ └── position │ ├── EntryPosition.java │ ├── LogIdentity.java │ ├── LogPosition.java │ ├── MetaqPosition.java │ ├── Position.java │ ├── PositionRange.java │ └── TimePosition.java ├── server ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ ├── admin │ │ ├── CanalAdmin.java │ │ ├── handler │ │ │ ├── ClientAuthenticationHandler.java │ │ │ ├── HandshakeInitializationHandler.java │ │ │ └── SessionHandler.java │ │ └── netty │ │ │ ├── AdminNettyUtils.java │ │ │ └── CanalAdminWithNetty.java │ │ ├── server │ │ ├── CanalMQStarter.java │ │ ├── CanalServer.java │ │ ├── CanalServerStarter.java │ │ ├── CanalService.java │ │ ├── embedded │ │ │ └── CanalServerWithEmbedded.java │ │ ├── exception │ │ │ └── CanalServerException.java │ │ └── netty │ │ │ ├── CanalServerWithNetty.java │ │ │ ├── CanalServerWithNettyProfiler.java │ │ │ ├── ClientInstanceProfiler.java │ │ │ ├── NettyUtils.java │ │ │ ├── handler │ │ │ ├── ClientAuthenticationHandler.java │ │ │ ├── FixedHeaderFrameDecoder.java │ │ │ ├── HandshakeInitializationHandler.java │ │ │ └── SessionHandler.java │ │ │ └── listener │ │ │ └── ChannelFutureAggregator.java │ │ └── spi │ │ ├── CanalMetricsProvider.java │ │ ├── CanalMetricsService.java │ │ └── NopCanalMetricsService.java │ └── test │ └── java │ └── com │ └── alibaba │ └── otter │ └── canal │ └── server │ ├── CanalServerTest.java │ ├── ProtocolTest.java │ ├── SecurityUtilTest.java │ └── embedded │ ├── BaseCanalServerWithEmbededTest.java │ ├── CanalServerWithEmbedded_FileModeTest.java │ ├── CanalServerWithEmbedded_StandaloneTest.java │ └── CanalServerWithEmbedded_StandbyTest.java ├── sink ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── alibaba │ │ └── otter │ │ └── canal │ │ └── sink │ │ ├── AbstractCanalEventDownStreamHandler.java │ │ ├── AbstractCanalEventSink.java │ │ ├── CanalEventDownStreamHandler.java │ │ ├── CanalEventSink.java │ │ ├── entry │ │ ├── EntryEventSink.java │ │ ├── HeartBeatEntryEventHandler.java │ │ └── group │ │ │ ├── GroupBarrier.java │ │ │ ├── GroupEventSink.java │ │ │ ├── TimelineBarrier.java │ │ │ └── TimelineTransactionBarrier.java │ │ └── exception │ │ └── CanalSinkException.java │ └── test │ └── java │ └── com │ └── alibaba │ └── otter │ └── canal │ └── sink │ ├── GroupEventSinkTest.java │ └── stub │ └── DummyEventStore.java └── store ├── pom.xml └── src ├── main └── java │ └── com │ └── alibaba │ └── otter │ └── canal │ └── store │ ├── AbstractCanalGroupStore.java │ ├── AbstractCanalStoreScavenge.java │ ├── CanalEventStore.java │ ├── CanalGroupEventStore.java │ ├── CanalStoreConstants.java │ ├── CanalStoreException.java │ ├── CanalStoreScavenge.java │ ├── StoreInfo.java │ ├── helper │ └── CanalEventUtils.java │ ├── memory │ └── MemoryEventStoreWithBuffer.java │ └── model │ ├── BatchMode.java │ ├── Event.java │ └── Events.java └── test └── java └── com └── alibaba └── otter └── canal └── store └── memory └── buffer ├── MemoryEventStoreBase.java ├── MemoryEventStoreMemBatchTest.java ├── MemoryEventStoreMultiThreadTest.java ├── MemoryEventStorePutAndGetTest.java └── MemoryEventStoreRollbackAndAckTest.java /code_reading/canal/.codecov.yml: -------------------------------------------------------------------------------- 1 | coverage: 2 | status: 3 | # pull-requests only 4 | patch: 5 | default: 6 | threshold: 0.1% 7 | -------------------------------------------------------------------------------- /code_reading/canal/.gitignore: -------------------------------------------------------------------------------- 1 | .svn/ 2 | target/ 3 | test-output/ 4 | *.class 5 | .classpath 6 | .project 7 | .settings/ 8 | tmp 9 | temp 10 | *.log 11 | antx.properties 12 | otter.properties 13 | jtester.properties 14 | .idea/ 15 | *.iml 16 | .DS_Store 17 | *.tar.gz 18 | *.rpm 19 | client-adapter/example/ 20 | *.dat 21 | conf/ 22 | canal-admin/canal-admin-ui/dist/ 23 | canal-admin/canal-admin-ui/node/ 24 | canal-admin/canal-admin-ui/node_modules/ 25 | canal-admin/canal-admin-server/src/main/resources/conf/ 26 | -------------------------------------------------------------------------------- /code_reading/canal/.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /code_reading/canal/.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.0/apache-maven-3.5.0-bin.zip 2 | -------------------------------------------------------------------------------- /code_reading/canal/.travis.yml: -------------------------------------------------------------------------------- 1 | language: java 2 | sudo: false # faster builds 3 | 4 | jdk: 5 | - oraclejdk12 6 | - openjdk11 7 | - oraclejdk11 8 | - openjdk8 9 | 10 | cache: 11 | directories: 12 | - $HOME/.m2 13 | 14 | install: true 15 | 16 | script: 17 | - travis_wait 30 ./mvnw clean install -DskipTests=false -Dcheckstyle.skip=true -Dmaven.javadoc.skip=true 18 | 19 | after_success: 20 | - bash <(curl -s https://codecov.io/bash) 21 | 22 | after_failure: 23 | - if [ -f canal.log ]; then echo "------TAIL of canal.log------"; tail -n 1000 canal.log; echo "------END of canal.log------"; fi 24 | -------------------------------------------------------------------------------- /code_reading/canal/RELEASE.txt: -------------------------------------------------------------------------------- 1 | release link : https://alibaba.github.com/canal/release.html 2 | 3 | download link : https://github.com/alibaba/canal/releases 4 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | end_of_line = lf 9 | insert_final_newline = true 10 | trim_trailing_whitespace = true 11 | 12 | [*.md] 13 | insert_final_newline = false 14 | trim_trailing_whitespace = false 15 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/.env.development: -------------------------------------------------------------------------------- 1 | # just a flag 2 | ENV = 'development' 3 | 4 | # base api 5 | VUE_APP_BASE_API = 'http://127.0.0.1:8089/api/v1' 6 | 7 | # vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable, 8 | # to control whether the babel-plugin-dynamic-import-node plugin is enabled. 9 | # It only does one thing by converting all import() to require(). 10 | # This configuration can significantly increase the speed of hot updates, 11 | # when you have a large number of pages. 12 | # Detail: https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/babel-preset-app/index.js 13 | 14 | VUE_CLI_BABEL_TRANSPILE_MODULES = true 15 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/.env.production: -------------------------------------------------------------------------------- 1 | # just a flag 2 | ENV = 'production' 3 | 4 | # base api 5 | VUE_APP_BASE_API = '/api/v1' 6 | 7 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/.env.staging: -------------------------------------------------------------------------------- 1 | NODE_ENV = production 2 | 3 | # just a flag 4 | ENV = 'staging' 5 | 6 | # base api 7 | VUE_APP_BASE_API = '/stage-api' 8 | 9 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/.eslintignore: -------------------------------------------------------------------------------- 1 | build/*.js 2 | src/assets 3 | public 4 | dist 5 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | package-lock.json 8 | tests/**/coverage/ 9 | target/ 10 | 11 | # Editor directories and files 12 | .idea 13 | .vscode 14 | *.suo 15 | *.ntvs* 16 | *.njsproj 17 | *.sln 18 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 10 3 | script: npm run test 4 | notifications: 5 | email: false 6 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/app' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | moduleFileExtensions: ['js', 'jsx', 'json', 'vue'], 3 | transform: { 4 | '^.+\\.vue$': 'vue-jest', 5 | '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 6 | 'jest-transform-stub', 7 | '^.+\\.jsx?$': 'babel-jest' 8 | }, 9 | moduleNameMapper: { 10 | '^@/(.*)$': '/src/$1' 11 | }, 12 | snapshotSerializers: ['jest-serializer-vue'], 13 | testMatch: [ 14 | '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)' 15 | ], 16 | collectCoverageFrom: ['src/utils/**/*.{js,vue}', '!src/utils/auth.js', '!src/utils/request.js', 'src/components/**/*.{js,vue}'], 17 | coverageDirectory: '/tests/unit/coverage', 18 | // 'collectCoverage': true, 19 | 'coverageReporters': [ 20 | 'lcov', 21 | 'text-summary' 22 | ], 23 | testURL: 'http://localhost/' 24 | } 25 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/mock/table.js: -------------------------------------------------------------------------------- 1 | import Mock from 'mockjs' 2 | 3 | const data = Mock.mock({ 4 | 'items|30': [{ 5 | id: '@id', 6 | title: '@sentence(10, 20)', 7 | 'status|1': ['published', 'draft', 'deleted'], 8 | author: 'name', 9 | display_time: '@datetime', 10 | pageviews: '@integer(300, 5000)' 11 | }] 12 | }) 13 | 14 | export default [ 15 | { 16 | url: '/table/list', 17 | type: 'get', 18 | response: config => { 19 | const items = data.items 20 | return { 21 | code: 20000, 22 | data: { 23 | total: items.length, 24 | items: items 25 | } 26 | } 27 | } 28 | } 29 | ] 30 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/node/node: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/admin/admin-ui/node/node -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/postcss.config.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | 'plugins': { 5 | // to edit target browsers: use "browserslist" field in package.json 6 | 'autoprefixer': {} 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/public/avatar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/admin/admin-ui/public/avatar.gif -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/admin/admin-ui/public/favicon.ico -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <%= webpackConfig.name %> 9 | 10 | 11 | 14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/admin/admin-ui/public/logo.png -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/api/canalConfig.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function getCanalConfig(clusterId, serverId) { 4 | return request({ 5 | url: '/canal/config/' + clusterId + '/' + serverId, 6 | method: 'get' 7 | }) 8 | } 9 | 10 | export function updateCanalConfig(data) { 11 | return request({ 12 | url: '/canal/config', 13 | method: 'put', 14 | data 15 | }) 16 | } 17 | 18 | export function getTemplateConfig() { 19 | return request({ 20 | url: '/canal/config/template', 21 | method: 'get' 22 | }) 23 | } 24 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/api/table.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function getList(params) { 4 | return request({ 5 | url: '/table/list', 6 | method: 'get', 7 | params 8 | }) 9 | } 10 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/api/user.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function login(data) { 4 | return request({ 5 | url: '/user/login', 6 | method: 'post', 7 | data 8 | }) 9 | } 10 | 11 | export function getInfo(token) { 12 | return request({ 13 | url: '/user/info', 14 | method: 'get', 15 | params: { token } 16 | }) 17 | } 18 | 19 | export function logout() { 20 | return request({ 21 | url: '/user/logout', 22 | method: 'post' 23 | }) 24 | } 25 | 26 | export function updateUser(data) { 27 | return request({ 28 | url: '/user', 29 | method: 'put', 30 | data 31 | }) 32 | } 33 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/assets/404_images/404.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/admin/admin-ui/src/assets/404_images/404.png -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/assets/404_images/404_cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/admin/admin-ui/src/assets/404_images/404_cloud.png -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/icons/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import SvgIcon from '@/components/SvgIcon'// svg component 3 | 4 | // register globally 5 | Vue.component('svg-icon', SvgIcon) 6 | 7 | const req = require.context('./svg', false, /\.svg$/) 8 | const requireAll = requireContext => requireContext.keys().map(requireContext) 9 | requireAll(req) 10 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/icons/svg/example.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/icons/svg/link.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/icons/svg/nested.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/icons/svg/password.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/icons/svg/table.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/icons/svg/user.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/icons/svgo.yml: -------------------------------------------------------------------------------- 1 | # replace default config 2 | 3 | # multipass: true 4 | # full: true 5 | 6 | plugins: 7 | 8 | # - name 9 | # 10 | # or: 11 | # - name: false 12 | # - name: true 13 | # 14 | # or: 15 | # - name: 16 | # param1: 1 17 | # param2: 2 18 | 19 | - removeAttrs: 20 | attrs: 21 | - 'fill' 22 | - 'fill-rule' 23 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/layout/components/AppMain.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 19 | 20 | 32 | 33 | 41 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/layout/components/Sidebar/FixiOSBug.js: -------------------------------------------------------------------------------- 1 | export default { 2 | computed: { 3 | device() { 4 | return this.$store.state.app.device 5 | } 6 | }, 7 | mounted() { 8 | // In order to fix the click on menu on the ios device will trigger the mouseleave bug 9 | // https://github.com/PanJiaChen/vue-element-admin/issues/1135 10 | this.fixBugIniOS() 11 | }, 12 | methods: { 13 | fixBugIniOS() { 14 | const $subMenu = this.$refs.subMenu 15 | if ($subMenu) { 16 | const handleMouseleave = $subMenu.handleMouseleave 17 | $subMenu.handleMouseleave = (e) => { 18 | if (this.device === 'mobile') { 19 | return 20 | } 21 | handleMouseleave(e) 22 | } 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/layout/components/Sidebar/Item.vue: -------------------------------------------------------------------------------- 1 | 30 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/layout/components/Sidebar/Link.vue: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 37 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/layout/components/index.js: -------------------------------------------------------------------------------- 1 | export { default as Navbar } from './Navbar' 2 | export { default as Sidebar } from './Sidebar' 3 | export { default as AppMain } from './AppMain' 4 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/settings.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 3 | title: 'Canal Admin', 4 | 5 | /** 6 | * @type {boolean} true | false 7 | * @description Whether fix the header 8 | */ 9 | fixedHeader: true, 10 | 11 | /** 12 | * @type {boolean} true | false 13 | * @description Whether show the logo in sidebar 14 | */ 15 | sidebarLogo: true 16 | } 17 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/store/getters.js: -------------------------------------------------------------------------------- 1 | const getters = { 2 | sidebar: state => state.app.sidebar, 3 | device: state => state.app.device, 4 | token: state => state.user.token, 5 | avatar: state => state.user.avatar, 6 | name: state => state.user.name 7 | } 8 | export default getters 9 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | import getters from './getters' 4 | import app from './modules/app' 5 | import settings from './modules/settings' 6 | import user from './modules/user' 7 | 8 | Vue.use(Vuex) 9 | 10 | const store = new Vuex.Store({ 11 | modules: { 12 | app, 13 | settings, 14 | user 15 | }, 16 | getters 17 | }) 18 | 19 | export default store 20 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/store/modules/settings.js: -------------------------------------------------------------------------------- 1 | import defaultSettings from '@/settings' 2 | 3 | const { showSettings, fixedHeader, sidebarLogo } = defaultSettings 4 | 5 | const state = { 6 | showSettings: showSettings, 7 | fixedHeader: fixedHeader, 8 | sidebarLogo: sidebarLogo 9 | } 10 | 11 | const mutations = { 12 | CHANGE_SETTING: (state, { key, value }) => { 13 | if (state.hasOwnProperty(key)) { 14 | state[key] = value 15 | } 16 | } 17 | } 18 | 19 | const actions = { 20 | changeSetting({ commit }, data) { 21 | commit('CHANGE_SETTING', data) 22 | } 23 | } 24 | 25 | export default { 26 | namespaced: true, 27 | state, 28 | mutations, 29 | actions 30 | } 31 | 32 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/styles/element-ui.scss: -------------------------------------------------------------------------------- 1 | // cover some element-ui styles 2 | 3 | .el-breadcrumb__inner, 4 | .el-breadcrumb__inner a { 5 | font-weight: 400 !important; 6 | } 7 | 8 | .el-upload { 9 | input[type="file"] { 10 | display: none !important; 11 | } 12 | } 13 | 14 | .el-upload__input { 15 | display: none; 16 | } 17 | 18 | 19 | // to fixed https://github.com/ElemeFE/element/issues/2461 20 | .el-dialog { 21 | transform: none; 22 | left: 0; 23 | position: relative; 24 | margin: 0 auto; 25 | } 26 | 27 | // refine element ui upload 28 | .upload-container { 29 | .el-upload { 30 | width: 100%; 31 | 32 | .el-upload-dragger { 33 | width: 100%; 34 | height: 200px; 35 | } 36 | } 37 | } 38 | 39 | // dropdown 40 | .el-dropdown-menu { 41 | a { 42 | display: block 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/styles/mixin.scss: -------------------------------------------------------------------------------- 1 | @mixin clearfix { 2 | &:after { 3 | content: ""; 4 | display: table; 5 | clear: both; 6 | } 7 | } 8 | 9 | @mixin scrollBar { 10 | &::-webkit-scrollbar-track-piece { 11 | background: #d3dce6; 12 | } 13 | 14 | &::-webkit-scrollbar { 15 | width: 6px; 16 | } 17 | 18 | &::-webkit-scrollbar-thumb { 19 | background: #99a9bf; 20 | border-radius: 20px; 21 | } 22 | } 23 | 24 | @mixin relative { 25 | position: relative; 26 | width: 100%; 27 | height: 100%; 28 | } 29 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/styles/variables.scss: -------------------------------------------------------------------------------- 1 | // sidebar 2 | $menuText:#bfcbd9; 3 | $menuActiveText:#409EFF; 4 | $subMenuActiveText:#f4f4f5; //https://github.com/ElemeFE/element/issues/12951 5 | 6 | $menuBg:#304156; 7 | $menuHover:#263445; 8 | 9 | $subMenuBg:#1f2d3d; 10 | $subMenuHover:#001528; 11 | 12 | $sideBarWidth: 210px; 13 | 14 | // the :export directive is the magic sauce for webpack 15 | // https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass 16 | :export { 17 | menuText: $menuText; 18 | menuActiveText: $menuActiveText; 19 | subMenuActiveText: $subMenuActiveText; 20 | menuBg: $menuBg; 21 | menuHover: $menuHover; 22 | subMenuBg: $subMenuBg; 23 | subMenuHover: $subMenuHover; 24 | sideBarWidth: $sideBarWidth; 25 | } 26 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/utils/auth.js: -------------------------------------------------------------------------------- 1 | import Cookies from 'js-cookie' 2 | 3 | const TokenKey = 'canal_admin_token' 4 | 5 | export function getToken() { 6 | return Cookies.get(TokenKey) 7 | } 8 | 9 | export function setToken(token) { 10 | return Cookies.set(TokenKey, token, { maxAge: 0 }) 11 | } 12 | 13 | export function removeToken() { 14 | return Cookies.remove(TokenKey) 15 | } 16 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/utils/get-page-title.js: -------------------------------------------------------------------------------- 1 | import defaultSettings from '@/settings' 2 | 3 | const title = defaultSettings.title || 'Vue Admin Template' 4 | 5 | export default function getPageTitle(pageTitle) { 6 | if (pageTitle) { 7 | return `${pageTitle} - ${title}` 8 | } 9 | return `${title}` 10 | } 11 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/utils/validate.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by PanJiaChen on 16/11/18. 3 | */ 4 | 5 | /** 6 | * @param {string} path 7 | * @returns {Boolean} 8 | */ 9 | export function isExternal(path) { 10 | return /^(https?:|mailto:|tel:)/.test(path) 11 | } 12 | 13 | /** 14 | * @param {string} str 15 | * @returns {Boolean} 16 | */ 17 | export function validUsername(str) { 18 | const valid_map = ['admin', 'editor'] 19 | return valid_map.indexOf(str.trim()) >= 0 20 | } 21 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/src/views/dashboard/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 22 | 23 | 34 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/tests/unit/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | jest: true 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/tests/unit/components/Hamburger.spec.js: -------------------------------------------------------------------------------- 1 | import { shallowMount } from '@vue/test-utils' 2 | import Hamburger from '@/components/Hamburger/index.vue' 3 | describe('Hamburger.vue', () => { 4 | it('toggle click', () => { 5 | const wrapper = shallowMount(Hamburger) 6 | const mockFn = jest.fn() 7 | wrapper.vm.$on('toggleClick', mockFn) 8 | wrapper.find('.hamburger').trigger('click') 9 | expect(mockFn).toBeCalled() 10 | }) 11 | it('prop isActive', () => { 12 | const wrapper = shallowMount(Hamburger) 13 | wrapper.setProps({ isActive: true }) 14 | expect(wrapper.contains('.is-active')).toBe(true) 15 | wrapper.setProps({ isActive: false }) 16 | expect(wrapper.contains('.is-active')).toBe(false) 17 | }) 18 | }) 19 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/tests/unit/components/SvgIcon.spec.js: -------------------------------------------------------------------------------- 1 | import { shallowMount } from '@vue/test-utils' 2 | import SvgIcon from '@/components/SvgIcon/index.vue' 3 | describe('SvgIcon.vue', () => { 4 | it('iconClass', () => { 5 | const wrapper = shallowMount(SvgIcon, { 6 | propsData: { 7 | iconClass: 'test' 8 | } 9 | }) 10 | expect(wrapper.find('use').attributes().href).toBe('#icon-test') 11 | }) 12 | it('className', () => { 13 | const wrapper = shallowMount(SvgIcon, { 14 | propsData: { 15 | iconClass: 'test' 16 | } 17 | }) 18 | expect(wrapper.classes().length).toBe(1) 19 | wrapper.setProps({ className: 'test' }) 20 | expect(wrapper.classes().includes('test')).toBe(true) 21 | }) 22 | }) 23 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-ui/tests/unit/utils/validate.spec.js: -------------------------------------------------------------------------------- 1 | import { validUsername, isExternal } from '@/utils/validate.js' 2 | 3 | describe('Utils:validate', () => { 4 | it('validUsername', () => { 5 | expect(validUsername('admin')).toBe(true) 6 | expect(validUsername('editor')).toBe(true) 7 | expect(validUsername('xxxx')).toBe(false) 8 | }) 9 | it('isExternal', () => { 10 | expect(isExternal('https://github.com/PanJiaChen/vue-element-admin')).toBe(true) 11 | expect(isExternal('http://github.com/PanJiaChen/vue-element-admin')).toBe(true) 12 | expect(isExternal('github.com/PanJiaChen/vue-element-admin')).toBe(false) 13 | expect(isExternal('/dashboard')).toBe(false) 14 | expect(isExternal('./dashboard')).toBe(false) 15 | expect(isExternal('dashboard')).toBe(false) 16 | }) 17 | }) 18 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/bin/restart.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | sh stop.sh 4 | 5 | sh startup.sh 6 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/bin/startup.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | @if not "%ECHO%" == "" echo %ECHO% 3 | @if "%OS%" == "Windows_NT" setlocal 4 | 5 | set ENV_PATH=.\ 6 | if "%OS%" == "Windows_NT" set ENV_PATH=%~dp0% 7 | 8 | set conf_dir=%ENV_PATH%\..\conf 9 | 10 | set CLASSPATH=%conf_dir% 11 | set CLASSPATH=%conf_dir%\..\lib\*;%CLASSPATH% 12 | 13 | set JAVA_MEM_OPTS= -Xms128m -Xmx512m 14 | set JAVA_OPTS_EXT= -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dapplication.codeset=UTF-8 -Dfile.encoding=UTF-8 15 | set ADAPTER_OPTS= -DappName=canal-admin 16 | 17 | set JAVA_OPTS= %JAVA_MEM_OPTS% %JAVA_OPTS_EXT% %ADAPTER_OPTS% 18 | 19 | set CMD_STR= java %JAVA_OPTS% -classpath "%CLASSPATH%" com.alibaba.otter.canal.admin.CanalAdminApplication 20 | echo start cmd : %CMD_STR% 21 | 22 | java %JAVA_OPTS% -classpath "%CLASSPATH%" com.alibaba.otter.canal.admin.CanalAdminApplication -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/java/com/alibaba/otter/canal/admin/CanalAdminApplication.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.admin; 2 | 3 | import org.springframework.boot.Banner; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | 7 | /** 8 | * 启动入口 9 | * 10 | * @author rewerma @ 2018-10-20 11 | * @version 1.0.0 12 | */ 13 | @SpringBootApplication 14 | public class CanalAdminApplication { 15 | 16 | public static void main(String[] args) { 17 | SpringApplication application = new SpringApplication(CanalAdminApplication.class); 18 | application.setBannerMode(Banner.Mode.OFF); 19 | application.run(args); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/java/com/alibaba/otter/canal/admin/common/DaemonThreadFactory.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.admin.common; 2 | 3 | import java.util.concurrent.Executors; 4 | import java.util.concurrent.ThreadFactory; 5 | 6 | public class DaemonThreadFactory implements ThreadFactory { 7 | 8 | public static final ThreadFactory daemonThreadFactory = new DaemonThreadFactory(); 9 | 10 | public Thread newThread(Runnable r) { 11 | Thread t = Executors.defaultThreadFactory().newThread(r); 12 | t.setDaemon(true); 13 | return t; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/java/com/alibaba/otter/canal/admin/service/CanalClusterService.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.admin.service; 2 | 3 | import java.util.List; 4 | 5 | import com.alibaba.otter.canal.admin.model.CanalCluster; 6 | 7 | public interface CanalClusterService { 8 | 9 | void save(CanalCluster canalCluster); 10 | 11 | CanalCluster detail(Long id); 12 | 13 | void update(CanalCluster canalCluster); 14 | 15 | void delete(Long id); 16 | 17 | List findList(CanalCluster canalCluster); 18 | } 19 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/java/com/alibaba/otter/canal/admin/service/CanalConfigService.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.admin.service; 2 | 3 | import com.alibaba.otter.canal.admin.model.CanalConfig; 4 | 5 | public interface CanalConfigService { 6 | 7 | CanalConfig getCanalConfig(Long clusterId, Long serverId); 8 | 9 | CanalConfig getCanalConfigSummary(); 10 | 11 | CanalConfig getAdapterConfig(); 12 | 13 | void updateContent(CanalConfig canalConfig); 14 | } 15 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/java/com/alibaba/otter/canal/admin/service/NodeServerService.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.admin.service; 2 | 3 | import java.util.List; 4 | 5 | import com.alibaba.otter.canal.admin.model.NodeServer; 6 | import com.alibaba.otter.canal.admin.model.Pager; 7 | 8 | public interface NodeServerService { 9 | 10 | void save(NodeServer nodeServer); 11 | 12 | NodeServer detail(Long id); 13 | 14 | void update(NodeServer nodeServer); 15 | 16 | void delete(Long id); 17 | 18 | List findAll(NodeServer nodeServer); 19 | 20 | Pager findList(NodeServer nodeServer, Pager pager); 21 | 22 | int remoteNodeStatus(String ip, Integer port); 23 | 24 | String remoteCanalLog(Long id); 25 | 26 | boolean remoteOperation(Long id, String option); 27 | } 28 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/java/com/alibaba/otter/canal/admin/service/PollingConfigService.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.admin.service; 2 | 3 | import com.alibaba.otter.canal.admin.model.CanalConfig; 4 | import com.alibaba.otter.canal.admin.model.CanalInstanceConfig; 5 | 6 | public interface PollingConfigService { 7 | 8 | public boolean autoRegister(String ip, Integer adminPort, String cluster); 9 | 10 | CanalConfig getChangedConfig(String ip, Integer port, String md5); 11 | 12 | CanalInstanceConfig getInstancesConfig(String ip, Integer port, String md5); 13 | 14 | CanalInstanceConfig getInstanceConfig(String destination, String md5); 15 | } 16 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/java/com/alibaba/otter/canal/admin/service/UserService.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.admin.service; 2 | 3 | import com.alibaba.otter.canal.admin.model.User; 4 | 5 | public interface UserService { 6 | 7 | User find4Login(String username, String password); 8 | 9 | void update(User user); 10 | } 11 | -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8089 3 | spring: 4 | jackson: 5 | date-format: yyyy-MM-dd HH:mm:ss 6 | time-zone: GMT+8 7 | 8 | spring.datasource: 9 | address: 127.0.0.1:3306 10 | database: canal_manager 11 | username: canal 12 | password: canal 13 | driver-class-name: com.mysql.jdbc.Driver 14 | url: jdbc:mysql://${spring.datasource.address}/${spring.datasource.database}?useUnicode=true&characterEncoding=UTF-8&useSSL=false 15 | hikari: 16 | maximum-pool-size: 30 17 | minimum-idle: 1 18 | 19 | canal: 20 | adminUser: admin 21 | adminPasswd: admin -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/resources/public/avatar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/admin/admin-web/src/main/resources/public/avatar.gif -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/resources/public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/admin/admin-web/src/main/resources/public/logo.png -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/resources/public/static/css/chunk-14b5f7a4.f3e06673.css: -------------------------------------------------------------------------------- 1 | .pagination-container[data-v-cebf2f0c]{background:#fff;padding:32px 16px}.pagination-container.hidden[data-v-cebf2f0c]{display:none} -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/resources/public/static/css/chunk-22553be3.f3e06673.css: -------------------------------------------------------------------------------- 1 | .pagination-container[data-v-cebf2f0c]{background:#fff;padding:32px 16px}.pagination-container.hidden[data-v-cebf2f0c]{display:none} -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/resources/public/static/css/chunk-2301924a.160e7b4a.css: -------------------------------------------------------------------------------- 1 | .line[data-v-28f0cd0f]{text-align:center} -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/resources/public/static/css/chunk-2b9b6c5c.c89f8844.css: -------------------------------------------------------------------------------- 1 | .pagination-container[data-v-38ef71f0]{background:#fff;padding:32px 16px}.pagination-container.hidden[data-v-38ef71f0]{display:none} -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/resources/public/static/css/chunk-37c49cbf.efc21a9c.css: -------------------------------------------------------------------------------- 1 | .dashboard-container[data-v-42037c2b]{margin:30px}.dashboard-text[data-v-42037c2b]{font-size:30px;line-height:46px} -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/resources/public/static/css/chunk-4f09fed2.70ec0b86.css: -------------------------------------------------------------------------------- 1 | .line[data-v-64c3fae5]{text-align:center} -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/resources/public/static/css/chunk-5afa45f5.a34bb177.css: -------------------------------------------------------------------------------- 1 | .line[data-v-2e6a6604]{text-align:center} -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/resources/public/static/css/chunk-5b373aad.b966d36b.css: -------------------------------------------------------------------------------- 1 | .line[data-v-e884438a]{text-align:center} -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/resources/public/static/css/chunk-69386cf0.741ff14e.css: -------------------------------------------------------------------------------- 1 | .line[data-v-756ebb70]{text-align:center} -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/resources/public/static/css/chunk-7ec889b7.c0585512.css: -------------------------------------------------------------------------------- 1 | .line[data-v-0b80198c]{text-align:center} -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/resources/public/static/css/chunk-98f505d0.5280f88f.css: -------------------------------------------------------------------------------- 1 | .line[data-v-35af5ff9]{text-align:center} -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/resources/public/static/css/chunk-bd1d44ee.1528199a.css: -------------------------------------------------------------------------------- 1 | .line[data-v-5c332416]{text-align:center} -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/resources/public/static/css/chunk-da289616.c89f8844.css: -------------------------------------------------------------------------------- 1 | .pagination-container[data-v-38ef71f0]{background:#fff;padding:32px 16px}.pagination-container.hidden[data-v-38ef71f0]{display:none} -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/resources/public/static/fonts/element-icons.2fad952a.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/admin/admin-web/src/main/resources/public/static/fonts/element-icons.2fad952a.woff -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/resources/public/static/fonts/element-icons.6f0a7632.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/admin/admin-web/src/main/resources/public/static/fonts/element-icons.6f0a7632.ttf -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/resources/public/static/img/404.a57b6f31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/admin/admin-web/src/main/resources/public/static/img/404.a57b6f31.png -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/resources/public/static/img/404_cloud.0f4bc32b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/admin/admin-web/src/main/resources/public/static/img/404_cloud.0f4bc32b.png -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/resources/public/static/js/chunk-37c49cbf.64d26540.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-37c49cbf"],{3671:function(t,e,n){"use strict";var a=n("afe4"),c=n.n(a);c.a},9406:function(t,e,n){"use strict";n.r(e);var a=function(){var t=this,e=t.$createElement;t._self._c;return t._m(0)},c=[function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"dashboard-container"},[n("div",{staticClass:"dashboard-text"},[t._v(" ")])])}],s=n("db72"),r=n("2f62"),u={name:"Dashboard",computed:Object(s["a"])({},Object(r["b"])(["name"])),mounted:function(){this.$router.push("/canalServer")}},i=u,o=(n("3671"),n("2877")),d=Object(o["a"])(i,a,c,!1,null,"42037c2b",null);e["default"]=d.exports},afe4:function(t,e,n){}}]); -------------------------------------------------------------------------------- /code_reading/canal/admin/admin-web/src/main/resources/public/static/js/chunk-37c49cbf.92ebe0ae.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-37c49cbf"],{3671:function(t,e,n){"use strict";var a=n("afe4"),c=n.n(a);c.a},9406:function(t,e,n){"use strict";n.r(e);var a=function(){var t=this,e=t.$createElement;t._self._c;return t._m(0)},c=[function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"dashboard-container"},[n("div",{staticClass:"dashboard-text"},[t._v(" ")])])}],s=n("db72"),r=n("2f62"),u={name:"Dashboard",computed:Object(s["a"])({},Object(r["b"])(["name"])),mounted:function(){this.$router.push("/canalServer")}},i=u,o=(n("3671"),n("2877")),d=Object(o["a"])(i,a,c,!1,null,"42037c2b",null);e["default"]=d.exports},afe4:function(t,e,n){}}]); -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/config/bind/PropertyOrigin.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.client.adapter.config.bind; 2 | 3 | import com.alibaba.otter.canal.client.adapter.config.common.PropertySource; 4 | 5 | /** 6 | * The origin of a property, specifically its source and its name before any 7 | * prefix was removed. 8 | * 9 | * @author Andy Wilkinson 10 | * @since 1.3.0 11 | */ 12 | public class PropertyOrigin { 13 | 14 | private final PropertySource source; 15 | 16 | private final String name; 17 | 18 | PropertyOrigin(PropertySource source, String name){ 19 | this.name = name; 20 | this.source = source; 21 | } 22 | 23 | public PropertySource getSource() { 24 | return this.source; 25 | } 26 | 27 | public String getName() { 28 | return this.name; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/config/bind/StringToCharArrayConverter.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.client.adapter.config.bind; 2 | 3 | import org.springframework.core.convert.converter.Converter; 4 | 5 | /** 6 | * Converts a String to a Char Array. 7 | * 8 | * @author Phillip Webb 9 | */ 10 | class StringToCharArrayConverter implements Converter { 11 | 12 | @Override 13 | public char[] convert(String source) { 14 | return source.toCharArray(); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/config/common/PropertySources.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.client.adapter.config.common; 2 | 3 | /** 4 | * Holder containing one or more {@link PropertySource} objects. 5 | * 6 | * @author Chris Beams 7 | * @since 3.1 8 | */ 9 | public interface PropertySources extends Iterable> { 10 | 11 | /** 12 | * Return whether a property source with the given name is contained. 13 | * 14 | * @param name the {@linkplain PropertySource#getName() name of the property source} to find 15 | */ 16 | boolean contains(String name); 17 | 18 | /** 19 | * Return the property source with the given name, {@code null} if not found. 20 | * 21 | * @param name the {@linkplain PropertySource#getName() name of the property source} to find 22 | */ 23 | PropertySource get(String name); 24 | 25 | } 26 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/AdapterConfig.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.client.adapter.support; 2 | 3 | public interface AdapterConfig { 4 | String getDataSourceKey(); 5 | 6 | AdapterMapping getMapping(); 7 | 8 | interface AdapterMapping { 9 | String getEtlCondition(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/Constant.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.client.adapter.support; 2 | 3 | public class Constant { 4 | 5 | public static final String CONF_DIR = "conf"; 6 | } 7 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/DaemonThreadFactory.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.client.adapter.support; 2 | 3 | import java.util.concurrent.Executors; 4 | import java.util.concurrent.ThreadFactory; 5 | 6 | public class DaemonThreadFactory implements ThreadFactory { 7 | 8 | public static final ThreadFactory daemonThreadFactory = new DaemonThreadFactory(); 9 | 10 | public Thread newThread(Runnable r) { 11 | Thread t = Executors.defaultThreadFactory().newThread(r); 12 | t.setDaemon(true); 13 | return t; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/SPI.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.client.adapter.support; 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 | * SPI装载器注解 11 | * 12 | * @author rewerma @ 2018-10-20 13 | * @version 1.0.0 14 | */ 15 | @Documented 16 | @Retention(RetentionPolicy.RUNTIME) 17 | @Target({ ElementType.TYPE }) 18 | public @interface SPI { 19 | 20 | // Default SPI name 21 | String value() default ""; 22 | } 23 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/es6x/src/main/resources/META-INF/canal/com.alibaba.otter.canal.client.adapter.OuterAdapter: -------------------------------------------------------------------------------- 1 | es6=com.alibaba.otter.canal.client.adapter.es6x.ES6xAdapter 2 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/es6x/src/main/resources/es6/biz_order.yml: -------------------------------------------------------------------------------- 1 | dataSourceKey: defaultDS 2 | destination: example 3 | groupId: g1 4 | esMapping: 5 | _index: customer 6 | _type: _doc 7 | _id: _id 8 | relations: 9 | customer_order: 10 | name: order 11 | parent: customer_id 12 | sql: "select concat('oid_', t.id) as _id, 13 | t.customer_id, 14 | t.id as order_id, 15 | t.serial_code as order_serial, 16 | t.c_time as order_time 17 | from biz_order t" 18 | skips: 19 | - customer_id 20 | etlCondition: "where t.c_time>={}" 21 | commitBatch: 3000 22 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/es6x/src/main/resources/es6/mytest_user.yml: -------------------------------------------------------------------------------- 1 | dataSourceKey: defaultDS 2 | destination: example 3 | groupId: g1 4 | esMapping: 5 | _index: mytest_user 6 | _type: _doc 7 | _id: _id 8 | upsert: true 9 | # pk: id 10 | sql: "select a.id as _id, a.name as _name, a.role_id as _role_id, b.role_name as _role_name, 11 | a.c_time as _c_time from user a 12 | left join role b on b.id=a.role_id" 13 | # objFields: 14 | # _labels: array:; 15 | etlCondition: "where a.c_time>={}" 16 | commitBatch: 3000 17 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/es6x/src/test/java/com/alibaba/otter/canal/client/adapter/es6x/test/sync/es_mapping.json: -------------------------------------------------------------------------------- 1 | { 2 | "_doc": { 3 | "properties": { 4 | "_name": { 5 | "type": "text" 6 | }, 7 | "_role_id": { 8 | "type": "long" 9 | }, 10 | "_role_name": { 11 | "type": "text" 12 | }, 13 | "_labels": { 14 | "type": "text" 15 | }, 16 | "_c_time": { 17 | "type": "date" 18 | } 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/es6x/src/test/resources/es6/mytest_user_single.yml: -------------------------------------------------------------------------------- 1 | dataSourceKey: defaultDS 2 | destination: example 3 | esMapping: 4 | _index: mytest_user 5 | _type: _doc 6 | _id: _id 7 | sql: "select a.id as _id, a.name as _name, a.role_id as _role_id, a.c_time as _c_time from user a" 8 | commitBatch: 3000 -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/es6x/src/test/resources/log4j2-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/es6x/src/test/resources/logback-test.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 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/es7x/src/main/resources/META-INF/canal/com.alibaba.otter.canal.client.adapter.OuterAdapter: -------------------------------------------------------------------------------- 1 | es7=com.alibaba.otter.canal.client.adapter.es7x.ES7xAdapter 2 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/es7x/src/main/resources/es7/biz_order.yml: -------------------------------------------------------------------------------- 1 | dataSourceKey: defaultDS 2 | destination: example 3 | groupId: g1 4 | esMapping: 5 | _index: customer 6 | _id: _id 7 | relations: 8 | customer_order: 9 | name: order 10 | parent: customer_id 11 | sql: "select concat('oid_', t.id) as _id, 12 | t.customer_id, 13 | t.id as order_id, 14 | t.serial_code as order_serial, 15 | t.c_time as order_time 16 | from biz_order t" 17 | skips: 18 | - customer_id 19 | etlCondition: "where t.c_time>={}" 20 | commitBatch: 3000 21 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/es7x/src/main/resources/es7/mytest_user.yml: -------------------------------------------------------------------------------- 1 | dataSourceKey: defaultDS 2 | destination: example 3 | groupId: g1 4 | esMapping: 5 | _index: mytest_user 6 | _id: _id 7 | # upsert: true 8 | # pk: id 9 | sql: "select a.id as _id, a.name, a.role_id, b.role_name, 10 | a.c_time from user a 11 | left join role b on b.id=a.role_id" 12 | # objFields: 13 | # _labels: array:; 14 | etlCondition: "where a.c_time>={}" 15 | commitBatch: 3000 16 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/hbase/src/main/resources/META-INF/canal/com.alibaba.otter.canal.client.adapter.OuterAdapter: -------------------------------------------------------------------------------- 1 | hbase=com.alibaba.otter.canal.client.adapter.hbase.HbaseAdapter -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/hbase/src/test/java/com/alibaba/otter/canal/client/adapter/hbase/test/HBaseConnectionTest.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.client.adapter.hbase.test; 2 | 3 | import com.alibaba.otter.canal.client.adapter.hbase.support.HbaseTemplate; 4 | import org.apache.hadoop.conf.Configuration; 5 | import org.apache.hadoop.hbase.HBaseConfiguration; 6 | import org.junit.Test; 7 | 8 | public class HBaseConnectionTest { 9 | 10 | @Test 11 | public void test01() { 12 | Configuration hbaseConfig = HBaseConfiguration.create(); 13 | hbaseConfig.set("hbase.zookeeper.quorum", "127.0.0.1"); 14 | hbaseConfig.set("hbase.zookeeper.property.clientPort", "2181"); 15 | hbaseConfig.set("zookeeper.znode.parent", "/hbase"); 16 | HbaseTemplate hbaseTemplate = new HbaseTemplate(hbaseConfig); 17 | System.out.println(hbaseTemplate.tableExists("ttt")); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/kudu/src/main/resources/META-INF.canal/com.alibaba.otter.canal.client.adapter.OuterAdapter: -------------------------------------------------------------------------------- 1 | kudu=com.alibaba.otter.canal.client.adapter.kudu.KuduAdapter -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/kudu/src/main/resources/kudu/kudutest_user.yml: -------------------------------------------------------------------------------- 1 | dataSourceKey: defaultDS 2 | destination: test_instance 3 | outerAdapterKey: kudu 4 | groupId: g1 5 | kuduMapping: 6 | database: test 7 | table: test 8 | targetTable: test 9 | targetPk: 10 | id: id 11 | mapAll: true 12 | targetColumns: 13 | id: 14 | name: 15 | role_id: 16 | c_time: 17 | test1: 18 | etlCondition: 19 | commitBatch: 3000 # 批量提交的大小 -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/launcher/src/main/bin/restart.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | sh stop.sh 4 | 5 | sh startup.sh 6 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/launcher/src/main/bin/startup.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | @if not "%ECHO%" == "" echo %ECHO% 3 | @if "%OS%" == "Windows_NT" setlocal 4 | 5 | set ENV_PATH=.\ 6 | if "%OS%" == "Windows_NT" set ENV_PATH=%~dp0% 7 | 8 | set conf_dir=%ENV_PATH%\..\conf 9 | 10 | set CLASSPATH=%conf_dir% 11 | set CLASSPATH=%conf_dir%\..\lib\*;%CLASSPATH% 12 | 13 | set JAVA_MEM_OPTS= -Xms128m -Xmx512m -XX:PermSize=128m 14 | set JAVA_OPTS_EXT= -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dapplication.codeset=UTF-8 -Dfile.encoding=UTF-8 15 | set ADAPTER_OPTS= -DappName=canal-adapter 16 | 17 | set JAVA_OPTS= %JAVA_MEM_OPTS% %JAVA_OPTS_EXT% %ADAPTER_OPTS% 18 | 19 | set CMD_STR= java %JAVA_OPTS% -classpath "%CLASSPATH%" com.alibaba.otter.canal.adapter.launcher.CanalAdapterApplication 20 | echo start cmd : %CMD_STR% 21 | 22 | java %JAVA_OPTS% -classpath "%CLASSPATH%" com.alibaba.otter.canal.adapter.launcher.CanalAdapterApplication -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/launcher/src/main/java/com/alibaba/otter/canal/adapter/launcher/CanalAdapterApplication.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.adapter.launcher; 2 | 3 | import org.springframework.boot.Banner; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | 7 | /** 8 | * 启动入口 9 | * 10 | * @author rewerma @ 2018-10-20 11 | * @version 1.0.0 12 | */ 13 | @SpringBootApplication 14 | public class CanalAdapterApplication { 15 | 16 | public static void main(String[] args) { 17 | SpringApplication application = new SpringApplication(CanalAdapterApplication.class); 18 | application.setBannerMode(Banner.Mode.OFF); 19 | application.run(args); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/launcher/src/main/java/com/alibaba/otter/canal/adapter/launcher/common/Mode.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.adapter.launcher.common; 2 | 3 | public enum Mode { 4 | LOCAL, // 本地模式 5 | DISTRIBUTED // 分布式 6 | } 7 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/launcher/src/main/java/com/alibaba/otter/canal/adapter/launcher/monitor/remote/RemoteAdapterMonitor.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.adapter.launcher.monitor.remote; 2 | 3 | /** 4 | * 远程配置监听器接口 5 | * 6 | * @author rewerma 2019-01-25 下午05:20:16 7 | * @version 1.0.0 8 | */ 9 | public interface RemoteAdapterMonitor { 10 | 11 | /** 12 | * 新增配置事件 13 | * 14 | * @param configItem 配置项 15 | */ 16 | void onAdd(ConfigItem configItem); 17 | 18 | /** 19 | * 修改配置事件 20 | * 21 | * @param configItem 配置项 22 | */ 23 | void onModify(ConfigItem configItem); 24 | 25 | /** 26 | * 删除配置事件 27 | * 28 | * @param name 配置名 29 | */ 30 | void onDelete(String name); 31 | } 32 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/launcher/src/main/java/com/alibaba/otter/canal/adapter/launcher/monitor/remote/RemoteConfigLoader.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.adapter.launcher.monitor.remote; 2 | 3 | /** 4 | * 远程配置装载器接口 5 | * 6 | * @author rewerma 2019-01-25 下午05:20:16 7 | * @version 1.0.0 8 | */ 9 | public interface RemoteConfigLoader { 10 | 11 | /** 12 | * 加载远程application.yml配置到本地 13 | */ 14 | void loadRemoteConfig(); 15 | 16 | /** 17 | * 加载adapter配置 18 | */ 19 | void loadRemoteAdapterConfigs(); 20 | 21 | /** 22 | * 启动监听数据库变化 23 | */ 24 | void startMonitor(); 25 | 26 | /** 27 | * 销毁 28 | */ 29 | void destroy(); 30 | } 31 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/launcher/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Bootstrap Configuration 2 | org.springframework.cloud.bootstrap.BootstrapConfiguration=\ 3 | com.alibaba.otter.canal.adapter.launcher.config.BootstrapConfiguration -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/launcher/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | #canal: 2 | # manager: 3 | # jdbc: 4 | # url: jdbc:mysql://127.0.0.1:3306/canal_manager?useUnicode=true&characterEncoding=UTF-8 5 | # username: root 6 | # password: 121212 -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/logger/src/main/resources/META-INF/canal/com.alibaba.otter.canal.client.adapter.OuterAdapter: -------------------------------------------------------------------------------- 1 | logger=com.alibaba.otter.canal.client.adapter.logger.LoggerAdapterExample -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/rdb/src/main/resources/META-INF/canal/com.alibaba.otter.canal.client.adapter.OuterAdapter: -------------------------------------------------------------------------------- 1 | rdb=com.alibaba.otter.canal.client.adapter.rdb.RdbAdapter -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/rdb/src/main/resources/rdb/mytest_user.yml: -------------------------------------------------------------------------------- 1 | dataSourceKey: defaultDS 2 | destination: example 3 | groupId: g1 4 | outerAdapterKey: mysql1 5 | concurrent: true 6 | dbMapping: 7 | database: mytest 8 | table: user 9 | targetTable: mytest2.user 10 | targetPk: 11 | id: id 12 | # mapAll: true 13 | targetColumns: 14 | id: 15 | name: 16 | role_id: 17 | c_time: 18 | test1: 19 | etlCondition: "where c_time>={}" 20 | commitBatch: 3000 # 批量提交的大小 21 | 22 | 23 | ## Mirror schema synchronize config 24 | #dataSourceKey: defaultDS 25 | #destination: example 26 | #groupId: g1 27 | #outerAdapterKey: mysql1 28 | #concurrent: true 29 | #dbMapping: 30 | # mirrorDb: true 31 | # database: mytest 32 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/rdb/src/test/resources/log4j2-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/rdb/src/test/resources/logback-test.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 | -------------------------------------------------------------------------------- /code_reading/canal/client-adapter/rdb/src/test/resources/rdb/mytest_user.yml: -------------------------------------------------------------------------------- 1 | dataSourceKey: defaultDS 2 | destination: example 3 | outerAdapterKey: oracle1 4 | concurrent: true 5 | dbMapping: 6 | database: mytest 7 | table: user 8 | targetTable: mytest.tb_user 9 | targetPk: 10 | id: id 11 | mapAll: true 12 | # targetColumns: 13 | # id: 14 | # name: 15 | # role_id: 16 | # c_time: 17 | # test1: -------------------------------------------------------------------------------- /code_reading/canal/client/src/main/java/com/alibaba/otter/canal/client/CanalNodeAccessStrategy.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.client; 2 | 3 | import java.net.SocketAddress; 4 | 5 | /** 6 | * 集群节点访问控制接口 7 | * 8 | * @author jianghang 2012-10-29 下午07:55:41 9 | * @version 1.0.0 10 | */ 11 | public interface CanalNodeAccessStrategy { 12 | 13 | SocketAddress currentNode(); 14 | 15 | SocketAddress nextNode(); 16 | } 17 | -------------------------------------------------------------------------------- /code_reading/canal/client/src/main/java/com/alibaba/otter/canal/client/impl/running/ClientRunningListener.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.client.impl.running; 2 | 3 | import java.net.InetSocketAddress; 4 | 5 | /** 6 | * 触发一下mainstem发生切换 7 | * 8 | * @author jianghang 2012-9-11 下午02:26:03 9 | * @version 1.0.0 10 | */ 11 | public interface ClientRunningListener { 12 | 13 | /** 14 | * 触发现在轮到自己做为active,需要载入上一个active的上下文数据 15 | */ 16 | public InetSocketAddress processActiveEnter(); 17 | 18 | /** 19 | * 触发一下当前active模式失败 20 | */ 21 | public void processActiveExit(); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /code_reading/canal/client/src/main/java/com/alibaba/otter/canal/client/kafka/MessageDeserializer.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.client.kafka; 2 | 3 | import java.util.Map; 4 | 5 | import org.apache.kafka.common.serialization.Deserializer; 6 | 7 | import com.alibaba.otter.canal.client.CanalMessageDeserializer; 8 | import com.alibaba.otter.canal.protocol.Message; 9 | 10 | /** 11 | * Kafka Message类的反序列化 12 | * 13 | * @author machengyuan @ 2018-6-12 14 | * @version 1.0.0 15 | */ 16 | public class MessageDeserializer implements Deserializer { 17 | 18 | @Override 19 | public void configure(Map configs, boolean isKey) { 20 | } 21 | 22 | @Override 23 | public Message deserialize(String topic1, byte[] data) { 24 | return CanalMessageDeserializer.deserializer(data); 25 | } 26 | 27 | @Override 28 | public void close() { 29 | // nothing to do 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /code_reading/canal/client/src/test/java/com/alibaba/otter/canal/client/running/AbstractZkTest.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.client.running; 2 | 3 | import org.junit.Assert; 4 | 5 | public class AbstractZkTest { 6 | 7 | protected String destination = "ljhtest1"; 8 | protected String cluster1 = "127.0.0.1:2188"; 9 | protected String cluster2 = "127.0.0.1:2188,127.0.0.1:2188"; 10 | 11 | public void sleep(long time) { 12 | try { 13 | Thread.sleep(time); 14 | } catch (InterruptedException e) { 15 | Assert.fail(e.getMessage()); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /code_reading/canal/client/src/test/java/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56} - %msg%n 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /code_reading/canal/common/src/main/java/com/alibaba/otter/canal/common/AbstractCanalLifeCycle.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.common; 2 | 3 | /** 4 | * 基本实现 5 | * 6 | * @author jianghang 2012-7-12 上午10:11:07 7 | * @version 1.0.0 8 | */ 9 | public abstract class AbstractCanalLifeCycle implements CanalLifeCycle { 10 | 11 | protected volatile boolean running = false; // 是否处于运行中 12 | 13 | public boolean isStart() { 14 | return running; 15 | } 16 | 17 | public void start() { 18 | if (running) { 19 | throw new CanalException(this.getClass().getName() + " has startup , don't repeat start"); 20 | } 21 | 22 | running = true; 23 | } 24 | 25 | public void stop() { 26 | if (!running) { 27 | throw new CanalException(this.getClass().getName() + " isn't start , please check"); 28 | } 29 | 30 | running = false; 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /code_reading/canal/common/src/main/java/com/alibaba/otter/canal/common/CanalLifeCycle.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.common; 2 | 3 | /** 4 | * @author jianghang 2012-7-12 上午09:39:33 5 | * @version 1.0.0 6 | */ 7 | public interface CanalLifeCycle { 8 | 9 | void start(); 10 | 11 | void stop(); 12 | 13 | boolean isStart(); 14 | } 15 | -------------------------------------------------------------------------------- /code_reading/canal/common/src/main/java/com/alibaba/otter/canal/common/alarm/CanalAlarmHandler.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.common.alarm; 2 | 3 | import com.alibaba.otter.canal.common.CanalLifeCycle; 4 | 5 | /** 6 | * canal报警处理机制 7 | * 8 | * @author jianghang 2012-8-22 下午10:08:56 9 | * @version 1.0.0 10 | */ 11 | public interface CanalAlarmHandler extends CanalLifeCycle { 12 | 13 | /** 14 | * 发送对应destination的报警 15 | * 16 | * @param destination 17 | * @param msg 18 | */ 19 | void sendAlarm(String destination, String msg); 20 | } 21 | -------------------------------------------------------------------------------- /code_reading/canal/common/src/main/java/com/alibaba/otter/canal/common/alarm/LogAlarmHandler.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.common.alarm; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import com.alibaba.otter.canal.common.AbstractCanalLifeCycle; 7 | 8 | /** 9 | * 基于log的alarm机制实现 10 | * 11 | * @author jianghang 2012-8-22 下午10:12:35 12 | * @version 1.0.0 13 | */ 14 | public class LogAlarmHandler extends AbstractCanalLifeCycle implements CanalAlarmHandler { 15 | 16 | private static final Logger logger = LoggerFactory.getLogger(LogAlarmHandler.class); 17 | 18 | public void sendAlarm(String destination, String msg) { 19 | logger.error("destination:{}[{}]", new Object[] { destination, msg }); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /code_reading/canal/common/src/main/java/com/alibaba/otter/canal/common/zookeeper/running/ServerRunningListener.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.common.zookeeper.running; 2 | 3 | /** 4 | * 触发一下mainstem发生切换 5 | * 6 | * @author jianghang 2012-9-11 下午02:26:03 7 | * @version 1.0.0 8 | */ 9 | public interface ServerRunningListener { 10 | 11 | /** 12 | * 启动时回调做点事情 13 | */ 14 | public void processStart(); 15 | 16 | /** 17 | * 关闭时回调做点事情 18 | */ 19 | public void processStop(); 20 | 21 | /** 22 | * 触发现在轮到自己做为active,需要载入上一个active的上下文数据 23 | */ 24 | public void processActiveEnter(); 25 | 26 | /** 27 | * 触发一下当前active模式失败 28 | */ 29 | public void processActiveExit(); 30 | 31 | } 32 | -------------------------------------------------------------------------------- /code_reading/canal/common/src/test/java/com/alibaba/otter/canal/common/AbstractZkTest.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.common; 2 | 3 | import org.junit.Assert; 4 | 5 | public class AbstractZkTest { 6 | 7 | protected String destination = "ljhtest1"; 8 | protected String cluster1 = "127.0.0.1:2188"; 9 | protected String cluster2 = "127.0.0.1:2188,127.0.0.1:2188"; 10 | 11 | public void sleep(long time) { 12 | try { 13 | Thread.sleep(time); 14 | } catch (InterruptedException e) { 15 | Assert.fail(e.getMessage()); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /code_reading/canal/common/src/test/java/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56} - %msg%n 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /code_reading/canal/connector/core/src/main/java/com/alibaba/otter/canal/connector/core/spi/SPI.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.connector.core.spi; 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 | * SPI装载器注解 11 | * 12 | * @author rewerma @ 2018-10-20 13 | * @version 1.0.0 14 | */ 15 | @Documented 16 | @Retention(RetentionPolicy.RUNTIME) 17 | @Target({ ElementType.TYPE }) 18 | public @interface SPI { 19 | 20 | // Default SPI name 21 | String value() default ""; 22 | } 23 | -------------------------------------------------------------------------------- /code_reading/canal/connector/core/src/main/java/com/alibaba/otter/canal/connector/core/util/Callback.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.connector.core.util; 2 | 3 | /** 4 | * MQ 回调类 5 | * 6 | * @author rewerma 2020-01-27 7 | * @version 1.0.0 8 | */ 9 | public interface Callback { 10 | 11 | void commit(); 12 | 13 | void rollback(); 14 | } 15 | -------------------------------------------------------------------------------- /code_reading/canal/connector/kafka-connector/src/main/java/com/alibaba/otter/canal/connector/kafka/config/KafkaConstants.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.connector.kafka.config; 2 | 3 | /** 4 | * Kafka 配置常量类 5 | * 6 | * @author rewerma 2020-01-27 7 | * @version 1.0.0 8 | */ 9 | public class KafkaConstants { 10 | 11 | public static final String ROOT = "canal"; 12 | 13 | public static final String CANAL_MQ_KAFKA_KERBEROS_ENABLE = ROOT + "." + "mq.kafka.kerberos.enable"; 14 | public static final String CANAL_MQ_KAFKA_KERBEROS_KRB5_FILE = ROOT + "." + "mq.kafka.kerberos.krb5.file"; 15 | public static final String CANAL_MQ_KAFKA_KERBEROS_JAAS_FILE = ROOT + "." + "mq.kafka.kerberos.jaas.file"; 16 | } 17 | -------------------------------------------------------------------------------- /code_reading/canal/connector/kafka-connector/src/main/java/com/alibaba/otter/canal/connector/kafka/producer/KafkaMessageSerializer.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.connector.kafka.producer; 2 | 3 | import java.util.Map; 4 | 5 | import org.apache.kafka.common.serialization.Serializer; 6 | 7 | /** 8 | * Kafka Message类的序列化 9 | * 10 | * @author rewerma 2018-6-11 下午05:30:49 11 | * @version 1.0.0 12 | */ 13 | public class KafkaMessageSerializer implements Serializer { 14 | 15 | @Override 16 | public void configure(Map configs, boolean isKey) { 17 | } 18 | 19 | @Override 20 | public byte[] serialize(String topic, byte[] data) { 21 | return data; 22 | } 23 | 24 | @Override 25 | public void close() { 26 | // nothing to do 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /code_reading/canal/connector/kafka-connector/src/main/resources/META-INF/canal/com.alibaba.otter.canal.connector.core.spi.CanalMQProducer: -------------------------------------------------------------------------------- 1 | kafka=com.alibaba.otter.canal.connector.kafka.producer.CanalKafkaProducer -------------------------------------------------------------------------------- /code_reading/canal/connector/kafka-connector/src/main/resources/META-INF/canal/com.alibaba.otter.canal.connector.core.spi.CanalMsgConsumer: -------------------------------------------------------------------------------- 1 | kafka=com.alibaba.otter.canal.connector.kafka.consumer.CanalKafkaConsumer -------------------------------------------------------------------------------- /code_reading/canal/connector/rabbitmq-connector/src/main/resources/META-INF/canal/com.alibaba.otter.canal.connector.core.spi.CanalMQProducer: -------------------------------------------------------------------------------- 1 | rabbitmq=com.alibaba.otter.canal.connector.rabbitmq.producer.CanalRabbitMQProducer -------------------------------------------------------------------------------- /code_reading/canal/connector/rabbitmq-connector/src/main/resources/META-INF/canal/com.alibaba.otter.canal.connector.core.spi.CanalMsgConsumer: -------------------------------------------------------------------------------- 1 | rabbitmq=com.alibaba.otter.canal.connector.rabbitmq.consumer.CanalRabbitMQConsumer -------------------------------------------------------------------------------- /code_reading/canal/connector/rocketmq-connector/src/main/resources/META-INF/canal/com.alibaba.otter.canal.connector.core.spi.CanalMQProducer: -------------------------------------------------------------------------------- 1 | rocketmq=com.alibaba.otter.canal.connector.rocketmq.producer.CanalRocketMQProducer -------------------------------------------------------------------------------- /code_reading/canal/connector/rocketmq-connector/src/main/resources/META-INF/canal/com.alibaba.otter.canal.connector.core.spi.CanalMsgConsumer: -------------------------------------------------------------------------------- 1 | rocketmq=com.alibaba.otter.canal.connector.rocketmq.consumer.CanalRocketMQConsumer -------------------------------------------------------------------------------- /code_reading/canal/connector/tcp-connector/src/main/java/com/alibaba/otter/canal/connector/tcp/config/TCPConstants.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.connector.tcp.config; 2 | 3 | public class TCPConstants { 4 | 5 | public static final String ROOT = "canal"; 6 | 7 | public static final String CANAL_TCP_HOST = ROOT + "." + "tcp.server.host"; 8 | public static final String CANAL_TCP_ZK_HOSTS = ROOT + "." + "tcp.zookeeper.hosts"; 9 | public static final String CANAL_TCP_USERNAME = ROOT + "." + "tcp.username"; 10 | public static final String CANAL_TCP_PASSWORD = ROOT + "." + "tcp.password"; 11 | public static final String CANAL_TCP_BATCH_SIZE = ROOT + "." + "tcp.batch.size"; 12 | } 13 | -------------------------------------------------------------------------------- /code_reading/canal/connector/tcp-connector/src/main/resources/META-INF/canal/com.alibaba.otter.canal.connector.core.spi.CanalMsgConsumer: -------------------------------------------------------------------------------- 1 | tcp=com.alibaba.otter.canal.connector.tcp.consumer.CanalTCPConsumer -------------------------------------------------------------------------------- /code_reading/canal/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/BeginLoadQueryLogEvent.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.dbsync.binlog.event; 2 | 3 | import com.taobao.tddl.dbsync.binlog.LogBuffer; 4 | 5 | /** 6 | * Event for the first block of file to be loaded, its only difference from 7 | * Append_block event is that this event creates or truncates existing file 8 | * before writing data. 9 | * 10 | * @author Changyuan.lh 11 | * @version 1.0 12 | */ 13 | public final class BeginLoadQueryLogEvent extends AppendBlockLogEvent { 14 | 15 | public BeginLoadQueryLogEvent(LogHeader header, LogBuffer buffer, FormatDescriptionLogEvent descriptionEvent){ 16 | super(header, buffer, descriptionEvent); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /code_reading/canal/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/DeleteRowsLogEvent.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.dbsync.binlog.event; 2 | 3 | import com.taobao.tddl.dbsync.binlog.LogBuffer; 4 | 5 | /** 6 | * Log row deletions. The event contain several delete rows for a table. Note 7 | * that each event contains only rows for one table. 8 | * 9 | * @author Changyuan.lh 10 | * @version 1.0 11 | */ 12 | public final class DeleteRowsLogEvent extends RowsLogEvent { 13 | 14 | public DeleteRowsLogEvent(LogHeader header, LogBuffer buffer, FormatDescriptionLogEvent descriptionEvent){ 15 | super(header, buffer, descriptionEvent); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /code_reading/canal/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/PreviousGtidsLogEvent.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.dbsync.binlog.event; 2 | 3 | import com.taobao.tddl.dbsync.binlog.LogBuffer; 4 | import com.taobao.tddl.dbsync.binlog.LogEvent; 5 | 6 | /** 7 | * @author jianghang 2013-4-8 上午12:36:29 8 | * @version 1.0.3 9 | * @since mysql 5.6 10 | */ 11 | public class PreviousGtidsLogEvent extends LogEvent { 12 | 13 | public PreviousGtidsLogEvent(LogHeader header, LogBuffer buffer, FormatDescriptionLogEvent descriptionEvent){ 14 | super(header); 15 | // do nothing , just for mysql gtid search function 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /code_reading/canal/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/StopLogEvent.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.dbsync.binlog.event; 2 | 3 | import com.taobao.tddl.dbsync.binlog.LogBuffer; 4 | import com.taobao.tddl.dbsync.binlog.LogEvent; 5 | 6 | /** 7 | * Stop_log_event. The Post-Header and Body for this event type are empty; it 8 | * only has the Common-Header. 9 | * 10 | * @author Changyuan.lh 11 | * @version 1.0 12 | */ 13 | public final class StopLogEvent extends LogEvent { 14 | 15 | public StopLogEvent(LogHeader header, LogBuffer buffer, FormatDescriptionLogEvent description_event){ 16 | super(header); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /code_reading/canal/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/TransactionContextLogEvent.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.dbsync.binlog.event; 2 | 3 | import com.taobao.tddl.dbsync.binlog.LogBuffer; 4 | import com.taobao.tddl.dbsync.binlog.LogEvent; 5 | 6 | /** 7 | * @author agapple 2018年5月7日 下午7:05:39 8 | * @version 1.0.26 9 | * @since mysql 5.7 10 | */ 11 | public class TransactionContextLogEvent extends LogEvent { 12 | 13 | public TransactionContextLogEvent(LogHeader header, LogBuffer buffer, FormatDescriptionLogEvent descriptionEvent){ 14 | super(header); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /code_reading/canal/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/UnknownLogEvent.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.dbsync.binlog.event; 2 | 3 | import com.taobao.tddl.dbsync.binlog.LogEvent; 4 | 5 | /** 6 | * Unknown_log_event 7 | * 8 | * @author Changyuan.lh 9 | * @version 1.0 10 | */ 11 | public final class UnknownLogEvent extends LogEvent { 12 | 13 | public UnknownLogEvent(LogHeader header){ 14 | super(header); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /code_reading/canal/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/ViewChangeEvent.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.dbsync.binlog.event; 2 | 3 | import com.taobao.tddl.dbsync.binlog.LogBuffer; 4 | import com.taobao.tddl.dbsync.binlog.LogEvent; 5 | 6 | /** 7 | * @author agapple 2018年5月7日 下午7:05:39 8 | * @version 1.0.26 9 | * @since mysql 5.7 10 | */ 11 | public class ViewChangeEvent extends LogEvent { 12 | 13 | public ViewChangeEvent(LogHeader header, LogBuffer buffer, FormatDescriptionLogEvent descriptionEvent){ 14 | super(header); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /code_reading/canal/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/WriteRowsLogEvent.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.dbsync.binlog.event; 2 | 3 | import com.taobao.tddl.dbsync.binlog.LogBuffer; 4 | 5 | /** 6 | * Log row insertions and updates. The event contain several insert/update rows 7 | * for a table. Note that each event contains only rows for one table. 8 | * 9 | * @author Changyuan.lh 10 | * @version 1.0 11 | */ 12 | public final class WriteRowsLogEvent extends RowsLogEvent { 13 | 14 | public WriteRowsLogEvent(LogHeader header, LogBuffer buffer, FormatDescriptionLogEvent descriptionEvent){ 15 | super(header, buffer, descriptionEvent); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /code_reading/canal/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/mariadb/BinlogCheckPointLogEvent.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.dbsync.binlog.event.mariadb; 2 | 3 | import com.taobao.tddl.dbsync.binlog.LogBuffer; 4 | import com.taobao.tddl.dbsync.binlog.event.FormatDescriptionLogEvent; 5 | import com.taobao.tddl.dbsync.binlog.event.IgnorableLogEvent; 6 | import com.taobao.tddl.dbsync.binlog.event.LogHeader; 7 | 8 | /** 9 | * mariadb10的BINLOG_CHECKPOINT_EVENT类型 10 | * 11 | * @author jianghang 2014-1-20 下午2:22:04 12 | * @since 1.0.17 13 | */ 14 | public class BinlogCheckPointLogEvent extends IgnorableLogEvent { 15 | 16 | public BinlogCheckPointLogEvent(LogHeader header, LogBuffer buffer, FormatDescriptionLogEvent descriptionEvent){ 17 | super(header, buffer, descriptionEvent); 18 | // do nothing , just mariadb binlog checkpoint 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /code_reading/canal/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/mariadb/MariaGtidListLogEvent.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.dbsync.binlog.event.mariadb; 2 | 3 | import com.taobao.tddl.dbsync.binlog.LogBuffer; 4 | import com.taobao.tddl.dbsync.binlog.event.FormatDescriptionLogEvent; 5 | import com.taobao.tddl.dbsync.binlog.event.IgnorableLogEvent; 6 | import com.taobao.tddl.dbsync.binlog.event.LogHeader; 7 | 8 | /** 9 | * mariadb的GTID_LIST_EVENT类型 10 | * 11 | * @author jianghang 2014-1-20 下午4:51:50 12 | * @since 1.0.17 13 | */ 14 | public class MariaGtidListLogEvent extends IgnorableLogEvent { 15 | 16 | public MariaGtidListLogEvent(LogHeader header, LogBuffer buffer, FormatDescriptionLogEvent descriptionEvent){ 17 | super(header, buffer, descriptionEvent); 18 | // do nothing , just ignore log event 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /code_reading/canal/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/mariadb/StartEncryptionLogEvent.java: -------------------------------------------------------------------------------- 1 | package com.taobao.tddl.dbsync.binlog.event.mariadb; 2 | 3 | import com.taobao.tddl.dbsync.binlog.LogBuffer; 4 | import com.taobao.tddl.dbsync.binlog.LogEvent; 5 | import com.taobao.tddl.dbsync.binlog.event.FormatDescriptionLogEvent; 6 | import com.taobao.tddl.dbsync.binlog.event.LogHeader; 7 | 8 | /** 9 | * mariadb的Start_encryption_log_event 10 | * 11 | * @author agapple 2018年5月7日 下午7:23:02 12 | * @version 1.0.26 13 | */ 14 | public class StartEncryptionLogEvent extends LogEvent { 15 | 16 | public StartEncryptionLogEvent(LogHeader header, LogBuffer buffer, FormatDescriptionLogEvent descriptionEvent){ 17 | super(header); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /code_reading/canal/dbsync/src/test/resources/binlog/mysql-bin.000001: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/dbsync/src/test/resources/binlog/mysql-bin.000001 -------------------------------------------------------------------------------- /code_reading/canal/dbsync/src/test/resources/dummy.txt: -------------------------------------------------------------------------------- 1 | 本文件仅仅为定位绝对路径使用 -------------------------------------------------------------------------------- /code_reading/canal/deployer/src/main/bin/restart.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | args=$@ 4 | 5 | sh stop.sh $args 6 | sh startup.sh $args -------------------------------------------------------------------------------- /code_reading/canal/deployer/src/main/java/com/alibaba/otter/canal/deployer/monitor/InstanceAction.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.deployer.monitor; 2 | 3 | /** 4 | * config配置变化后的动作 5 | * 6 | * @author jianghang 2013-2-18 下午01:19:29 7 | * @version 1.0.1 8 | */ 9 | public interface InstanceAction { 10 | 11 | /** 12 | * 启动destination 13 | */ 14 | void start(String destination); 15 | 16 | /** 17 | * 主动释放destination运行 18 | */ 19 | void release(String destination); 20 | 21 | /** 22 | * 停止destination 23 | */ 24 | void stop(String destination); 25 | 26 | /** 27 | * 重载destination,可能需要stop,start操作,或者只是更新下内存配置 28 | */ 29 | void reload(String destination); 30 | } 31 | -------------------------------------------------------------------------------- /code_reading/canal/deployer/src/main/java/com/alibaba/otter/canal/deployer/monitor/InstanceConfigMonitor.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.deployer.monitor; 2 | 3 | import com.alibaba.otter.canal.common.CanalLifeCycle; 4 | 5 | /** 6 | * 监听instance file的文件变化,触发instance start/stop等操作 7 | * 8 | * @author jianghang 2013-2-6 下午06:19:56 9 | * @version 1.0.1 10 | */ 11 | public interface InstanceConfigMonitor extends CanalLifeCycle { 12 | 13 | void register(String destination, InstanceAction action); 14 | 15 | void unregister(String destination); 16 | } 17 | -------------------------------------------------------------------------------- /code_reading/canal/deployer/src/main/resources/canal_local.properties: -------------------------------------------------------------------------------- 1 | # register ip 2 | canal.register.ip = 3 | 4 | # canal admin config 5 | canal.admin.manager = 127.0.0.1:8089 6 | canal.admin.port = 11110 7 | canal.admin.user = admin 8 | canal.admin.passwd = 4ACFE3202A5FF5CF467898FC58AAB1D615029441 9 | # admin auto register 10 | canal.admin.register.auto = true 11 | canal.admin.register.cluster = -------------------------------------------------------------------------------- /code_reading/canal/deployer/src/main/resources/spring/tsdb/sql-map/sqlmap-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /code_reading/canal/docker/base/Dockerfile_admin: -------------------------------------------------------------------------------- 1 | FROM canal/osbase:v1 2 | 3 | MAINTAINER agapple (jianghang115@gmail.com) 4 | 5 | RUN \ 6 | groupadd -r mysql && useradd -r -g mysql mysql && \ 7 | yum -y install wget mysql-server --nogpgcheck && \ 8 | yum clean all && \ 9 | true 10 | 11 | CMD ["/bin/bash"] -------------------------------------------------------------------------------- /code_reading/canal/docker/base/Dockerfile_v2: -------------------------------------------------------------------------------- 1 | FROM canal/osbase:v1 2 | 3 | MAINTAINER agapple (jianghang115@gmail.com) 4 | 5 | env NODE_EPORTER_LINK="https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-arm64.tar.gz" 6 | 7 | RUN \ 8 | wget "$NODE_EPORTER_LINK" -O /tmp/node_exporter.tar.gz && \ 9 | true 10 | 11 | CMD ["/bin/bash"] -------------------------------------------------------------------------------- /code_reading/canal/docker/image/admin/bin/clean_log: -------------------------------------------------------------------------------- 1 | # cron clean log once per minute 2 | */2 * * * * admin /home/admin/bin/clean_log.sh >>/tmp/clean_log.log 2>&1 3 | -------------------------------------------------------------------------------- /code_reading/canal/docker/image/admin/health.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ -d "/home/admin/canal-server" ]; then 4 | serverPort=`perl -le 'print $ENV{"server.port"}'` 5 | if [ -z "$serverPort" ] ; then 6 | serverPort=8089 7 | fi 8 | 9 | CHECK_URL="http://127.0.0.1:$serverPort/index.html" 10 | CHECK_POINT="Canal" 11 | else 12 | metrics_port=`perl -le 'print $ENV{"canal.metrics.pull.port"}'` 13 | if [ "$metrics_port" == "" ]; then 14 | metrics_port="11112" 15 | fi 16 | 17 | CHECK_URL="http://127.0.0.1:$metrics_port/metrics" 18 | CHECK_POINT="canal" 19 | fi 20 | 21 | CHECK_COUNT=`curl -s --connect-timeout 7 --max-time 7 $CHECK_URL | grep -c $CHECK_POINT` 22 | if [ $CHECK_COUNT -eq 0 ]; then 23 | echo "[FAILED]" 24 | status=0 25 | error=1 26 | else 27 | echo "[ OK ]" 28 | status=1 29 | error=0 30 | fi -------------------------------------------------------------------------------- /code_reading/canal/docker/image/alidata/bin/exec_rc_local.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ "${SKIP_EXEC_RC_LOCAL}" = "YES" ] ; then 4 | echo "skip /etc/rc.local: SKIP_EXEC_RC_LOCAL=${SKIP_EXEC_RC_LOCAL}" 5 | exit 6 | fi 7 | 8 | if [ "${DOCKER_DEPLOY_TYPE}" = "HOST" ] ; then 9 | echo "skip /etc/rc.local: DOCKER_DEPLOY_TYPE=${DOCKER_DEPLOY_TYPE}" 10 | exit 11 | fi -------------------------------------------------------------------------------- /code_reading/canal/docker/image/alidata/bin/lark-wait: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | chown admin: -R /home/admin/ 5 | source /alidata/lib/proc.sh 6 | waitterm 7 | -------------------------------------------------------------------------------- /code_reading/canal/docker/image/alidata/bin/main.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | [ -n "${DOCKER_DEPLOY_TYPE}" ] || DOCKER_DEPLOY_TYPE="VM" 4 | echo "DOCKER_DEPLOY_TYPE=${DOCKER_DEPLOY_TYPE}" 5 | 6 | # run init scripts 7 | for e in $(ls /alidata/init/*) ; do 8 | [ -x "${e}" ] || continue 9 | echo "==> INIT $e" 10 | $e 11 | echo "==> EXIT CODE: $?" 12 | done 13 | 14 | echo "==> INIT DEFAULT" 15 | service sshd start 16 | service crond start 17 | 18 | #echo "check hostname -i: `hostname -i`" 19 | #hti_num=`hostname -i|awk '{print NF}'` 20 | #if [ $hti_num -gt 1 ];then 21 | # echo "hostname -i result error:`hostname -i`" 22 | # exit 120 23 | #fi 24 | 25 | echo "==> INIT DONE" 26 | echo "==> RUN ${*}" 27 | exec "${@}" -------------------------------------------------------------------------------- /code_reading/canal/docker/image/alidata/init/02init-sshd.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # set port 4 | if [ -z "${SSHD_PORT}" ] ; then 5 | SSHD_PORT=22 6 | [ "${DOCKER_DEPLOY_TYPE}" = "HOST" ] && SSHD_PORT=2222 7 | fi 8 | 9 | sed -r -i '/^OPTIONS=/ d' /etc/sysconfig/sshd 10 | echo 'OPTIONS="-p '"${SSHD_PORT}"'"' >> /etc/sysconfig/sshd 11 | 12 | # set admin ssh pulic key 13 | if [ "${USE_ADMIN_PASSAGE}" = "YES" ] ; then 14 | echo "set admin passage" 15 | mkdir -p /home/admin/.ssh 16 | chown admin:admin /home/admin/.ssh 17 | chown admin:admin /home/admin/.ssh/authorized_keys 18 | chmod 644 /home/admin/.ssh/authorized_keys 19 | fi 20 | -------------------------------------------------------------------------------- /code_reading/canal/driver/src/main/java/com/alibaba/otter/canal/parse/driver/mysql/packets/CommandPacket.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.driver.mysql.packets; 2 | 3 | import org.apache.commons.lang.builder.ToStringBuilder; 4 | 5 | import com.alibaba.otter.canal.common.utils.CanalToStringStyle; 6 | 7 | public abstract class CommandPacket implements IPacket { 8 | 9 | private byte command; 10 | 11 | // arg 12 | 13 | public void setCommand(byte command) { 14 | this.command = command; 15 | } 16 | 17 | public byte getCommand() { 18 | return command; 19 | } 20 | 21 | public String toString() { 22 | return ToStringBuilder.reflectionToString(this, CanalToStringStyle.DEFAULT_STYLE); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /code_reading/canal/driver/src/main/java/com/alibaba/otter/canal/parse/driver/mysql/packets/GTIDSet.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.driver.mysql.packets; 2 | 3 | import java.io.IOException; 4 | 5 | /** 6 | * Created by hiwjd on 2018/4/23. hiwjd0@gmail.com 7 | */ 8 | public interface GTIDSet { 9 | 10 | /** 11 | * 序列化成字节数组 12 | * 13 | * @return 14 | */ 15 | byte[] encode() throws IOException; 16 | 17 | /** 18 | * 更新当前实例 19 | * 20 | * @param str 21 | * @throws Exception 22 | */ 23 | void update(String str); 24 | } 25 | -------------------------------------------------------------------------------- /code_reading/canal/driver/src/main/java/com/alibaba/otter/canal/parse/driver/mysql/packets/client/AuthSwitchResponsePacket.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.driver.mysql.packets.client; 2 | 3 | import java.io.ByteArrayOutputStream; 4 | import java.io.IOException; 5 | 6 | import com.alibaba.otter.canal.parse.driver.mysql.packets.CommandPacket; 7 | 8 | public class AuthSwitchResponsePacket extends CommandPacket { 9 | 10 | public byte[] authData; 11 | 12 | public void fromBytes(byte[] data) { 13 | } 14 | 15 | public byte[] toBytes() throws IOException { 16 | ByteArrayOutputStream out = new ByteArrayOutputStream(); 17 | out.write(authData); 18 | return out.toByteArray(); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /code_reading/canal/driver/src/main/java/com/alibaba/otter/canal/parse/driver/mysql/packets/server/AuthSwitchRequestMoreData.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.driver.mysql.packets.server; 2 | 3 | import java.io.IOException; 4 | 5 | import com.alibaba.otter.canal.parse.driver.mysql.packets.CommandPacket; 6 | import com.alibaba.otter.canal.parse.driver.mysql.utils.ByteHelper; 7 | 8 | public class AuthSwitchRequestMoreData extends CommandPacket { 9 | 10 | public int status; 11 | public byte[] authData; 12 | 13 | public void fromBytes(byte[] data) { 14 | int index = 0; 15 | // 1. read status 16 | status = data[index]; 17 | index += 1; 18 | authData = ByteHelper.readNullTerminatedBytes(data, index); 19 | } 20 | 21 | public byte[] toBytes() throws IOException { 22 | return null; 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /code_reading/canal/driver/src/main/java/com/alibaba/otter/canal/parse/driver/mysql/packets/server/DataPacket.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.driver.mysql.packets.server; 2 | 3 | import java.io.IOException; 4 | 5 | import com.alibaba.otter.canal.parse.driver.mysql.packets.CommandPacket; 6 | 7 | public class DataPacket extends CommandPacket { 8 | 9 | public void fromBytes(byte[] data) { 10 | 11 | } 12 | 13 | public byte[] toBytes() throws IOException { 14 | return null; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /code_reading/canal/driver/src/main/java/com/alibaba/otter/canal/parse/driver/mysql/socket/BioSocketChannelPool.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.driver.mysql.socket; 2 | 3 | import java.net.Socket; 4 | import java.net.SocketAddress; 5 | 6 | /** 7 | * @author luoyaogui 实现channel的管理(监听连接、读数据、回收) 2016-12-28 8 | * @author chuanyi 2018-3-3 保留open减少文件变更数量 9 | */ 10 | public abstract class BioSocketChannelPool { 11 | 12 | public static BioSocketChannel open(SocketAddress address) throws Exception { 13 | Socket socket = new Socket(); 14 | socket.setSoTimeout(BioSocketChannel.SO_TIMEOUT); 15 | socket.setTcpNoDelay(true); 16 | socket.setKeepAlive(true); 17 | socket.setReuseAddress(true); 18 | socket.connect(address, BioSocketChannel.DEFAULT_CONNECT_TIMEOUT); 19 | return new BioSocketChannel(socket); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /code_reading/canal/driver/src/main/java/com/alibaba/otter/canal/parse/driver/mysql/socket/SocketChannel.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.driver.mysql.socket; 2 | 3 | import java.io.IOException; 4 | import java.net.SocketAddress; 5 | 6 | /** 7 | * @author agapple 2018年3月12日 下午10:36:44 8 | * @since 1.0.26 9 | */ 10 | public interface SocketChannel { 11 | 12 | public void write(byte[]... buf) throws IOException; 13 | 14 | public byte[] read(int readSize) throws IOException; 15 | 16 | public byte[] read(int readSize, int timeout) throws IOException; 17 | 18 | public void read(byte[] data, int off, int len, int timeout) throws IOException; 19 | 20 | public boolean isConnected(); 21 | 22 | public SocketAddress getRemoteSocketAddress(); 23 | 24 | public SocketAddress getLocalSocketAddress(); 25 | 26 | public void close(); 27 | } 28 | -------------------------------------------------------------------------------- /code_reading/canal/example/src/main/java/com/alibaba/otter/canal/example/kafka/AbstractKafkaTest.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.example.kafka; 2 | 3 | import com.alibaba.otter.canal.example.BaseCanalClientTest; 4 | 5 | /** 6 | * Kafka 测试基类 7 | * 8 | * @author machengyuan @ 2018-6-12 9 | * @version 1.0.0 10 | */ 11 | public abstract class AbstractKafkaTest extends BaseCanalClientTest { 12 | 13 | public static String topic = "example"; 14 | public static Integer partition = null; 15 | public static String groupId = "g4"; 16 | public static String servers = "slave1:6667,slave2:6667,slave3:6667"; 17 | public static String zkServers = "slave1:2181,slave2:2181,slave3:2181"; 18 | 19 | public void sleep(long time) { 20 | try { 21 | Thread.sleep(time); 22 | } catch (InterruptedException e) { 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /code_reading/canal/example/src/main/java/com/alibaba/otter/canal/example/rocketmq/AbstractRocektMQTest.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.example.rocketmq; 2 | 3 | import com.alibaba.otter.canal.example.BaseCanalClientTest; 4 | 5 | public abstract class AbstractRocektMQTest extends BaseCanalClientTest { 6 | 7 | public static String topic = "example"; 8 | public static String groupId = "group"; 9 | public static String nameServers = "localhost:9876"; 10 | public static String accessKey = ""; 11 | public static String secretKey = ""; 12 | public static boolean enableMessageTrace = false; 13 | public static String accessChannel = "local"; 14 | public static String namespace = ""; 15 | } 16 | -------------------------------------------------------------------------------- /code_reading/canal/example/src/main/resources/client.properties: -------------------------------------------------------------------------------- 1 | # client 配置 2 | zk.servers=127.0.0.1:2181 3 | # 5 * 1024 4 | client.batch.size=5120 5 | client.debug=false 6 | client.destination=example 7 | client.username=canal 8 | client.password=canal 9 | client.exceptionstrategy=1 10 | client.retrytimes=3 11 | client.filter=.*\\..* 12 | 13 | # 同步目标: mysql 配置 14 | target.mysql.url=jdbc:mysql://127.0.0.1:4306 15 | target.mysql.username=root 16 | target.mysql.password=123456 17 | -------------------------------------------------------------------------------- /code_reading/canal/example/src/main/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56} - %msg%n 7 | 8 | 9 | 10 | 11 | 12 | 13 | %msg 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /code_reading/canal/filter/src/main/java/com/alibaba/otter/canal/filter/CanalEventFilter.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.filter; 2 | 3 | import com.alibaba.otter.canal.filter.exception.CanalFilterException; 4 | 5 | /** 6 | * 数据过滤机制 7 | * 8 | * @author jianghang 2012-7-20 下午03:51:27 9 | */ 10 | public interface CanalEventFilter { 11 | 12 | boolean filter(T event) throws CanalFilterException; 13 | } 14 | -------------------------------------------------------------------------------- /code_reading/canal/images/QPS.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/images/QPS.PNG -------------------------------------------------------------------------------- /code_reading/canal/images/TPS.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/images/TPS.PNG -------------------------------------------------------------------------------- /code_reading/canal/images/basic.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/images/basic.PNG -------------------------------------------------------------------------------- /code_reading/canal/images/clients.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/images/clients.PNG -------------------------------------------------------------------------------- /code_reading/canal/images/delay.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/images/delay.PNG -------------------------------------------------------------------------------- /code_reading/canal/images/empty.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/images/empty.PNG -------------------------------------------------------------------------------- /code_reading/canal/images/idle.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/images/idle.PNG -------------------------------------------------------------------------------- /code_reading/canal/images/instance.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/images/instance.PNG -------------------------------------------------------------------------------- /code_reading/canal/images/latency.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/images/latency.PNG -------------------------------------------------------------------------------- /code_reading/canal/images/network.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/images/network.PNG -------------------------------------------------------------------------------- /code_reading/canal/images/overview.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/images/overview.PNG -------------------------------------------------------------------------------- /code_reading/canal/images/remain_events.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/images/remain_events.PNG -------------------------------------------------------------------------------- /code_reading/canal/images/remain_mem.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/images/remain_mem.PNG -------------------------------------------------------------------------------- /code_reading/canal/images/reqs.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/images/reqs.PNG -------------------------------------------------------------------------------- /code_reading/canal/images/rows.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/images/rows.PNG -------------------------------------------------------------------------------- /code_reading/canal/images/store.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/images/store.PNG -------------------------------------------------------------------------------- /code_reading/canal/images/throughput.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/images/throughput.PNG -------------------------------------------------------------------------------- /code_reading/canal/images/transactions.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/images/transactions.PNG -------------------------------------------------------------------------------- /code_reading/canal/instance/core/src/main/java/com/alibaba/otter/canal/instance/core/CanalInstanceGenerator.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.instance.core; 2 | 3 | /** 4 | * @author zebin.xuzb @ 2012-7-12 5 | * @version 1.0.0 6 | */ 7 | public interface CanalInstanceGenerator { 8 | 9 | /** 10 | * 通过 destination 产生特定的 {@link CanalInstance} 11 | * 12 | * @param destination 13 | * @return 14 | */ 15 | CanalInstance generate(String destination); 16 | } 17 | -------------------------------------------------------------------------------- /code_reading/canal/instance/manager/src/main/java/com/alibaba/otter/canal/instance/manager/CanalConfigClient.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.instance.manager; 2 | 3 | import com.alibaba.otter.canal.instance.manager.model.Canal; 4 | 5 | /** 6 | * 对应canal的配置 7 | * 8 | * @author jianghang 2012-7-4 下午03:09:17 9 | * @version 1.0.0 10 | */ 11 | public class CanalConfigClient { 12 | 13 | /** 14 | * 根据对应的destinantion查询Canal信息 15 | */ 16 | public Canal findCanal(String destination) { 17 | // TODO 根据自己的业务实现 18 | throw new UnsupportedOperationException(); 19 | } 20 | 21 | /** 22 | * 根据对应的destinantion查询filter信息 23 | */ 24 | public String findFilter(String destination) { 25 | // TODO 根据自己的业务实现 26 | throw new UnsupportedOperationException(); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /code_reading/canal/instance/manager/src/main/java/com/alibaba/otter/canal/instance/manager/model/CanalStatus.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.instance.manager.model; 2 | 3 | /** 4 | * 运行状态 5 | * 6 | * @author jianghang 2012-7-13 下午12:54:13 7 | * @version 1.0.0 8 | */ 9 | public enum CanalStatus { 10 | /** 启动 */ 11 | START, 12 | /** 停止 */ 13 | STOP; 14 | 15 | public boolean isStart() { 16 | return this.equals(CanalStatus.START); 17 | } 18 | 19 | public boolean isStop() { 20 | return this.equals(CanalStatus.STOP); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /code_reading/canal/instance/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4.0.0 3 | 4 | com.alibaba.otter 5 | canal 6 | 1.1.5-SNAPSHOT 7 | ../pom.xml 8 | 9 | com.alibaba.otter 10 | canal.instance 11 | pom 12 | canal instance module for otter ${project.version} 13 | 14 | 15 | core 16 | manager 17 | spring 18 | 19 | 20 | -------------------------------------------------------------------------------- /code_reading/canal/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/logo.png -------------------------------------------------------------------------------- /code_reading/canal/meta/src/test/java/com/alibaba/otter/canal/meta/AbstractZkTest.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.meta; 2 | 3 | import org.junit.Assert; 4 | 5 | public class AbstractZkTest { 6 | 7 | protected String destination = "ljhtest1"; 8 | protected String cluster1 = "127.0.0.1:2188"; 9 | protected String cluster2 = "127.0.0.1:2188,127.0.0.1:2188"; 10 | 11 | public void sleep(long time) { 12 | try { 13 | Thread.sleep(time); 14 | } catch (InterruptedException e) { 15 | Assert.fail(e.getMessage()); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/main/java/com/alibaba/otter/canal/parse/CanalEventParser.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse; 2 | 3 | import com.alibaba.otter.canal.common.CanalLifeCycle; 4 | 5 | /** 6 | * 数据复制控制器 7 | * 8 | * @author jianghang 2012-6-21 下午04:03:25 9 | * @version 1.0.0 10 | */ 11 | public interface CanalEventParser extends CanalLifeCycle { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/main/java/com/alibaba/otter/canal/parse/CanalHASwitchable.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse; 2 | 3 | import com.alibaba.otter.canal.parse.support.AuthenticationInfo; 4 | 5 | /** 6 | * 支持可切换的数据复制控制器 7 | * 8 | * @author jianghang 2012-6-26 下午05:41:43 9 | * @version 1.0.0 10 | */ 11 | public interface CanalHASwitchable { 12 | 13 | public void doSwitch(); 14 | 15 | public void doSwitch(AuthenticationInfo newAuthenticationInfo); 16 | } 17 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/main/java/com/alibaba/otter/canal/parse/ha/CanalHAController.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.ha; 2 | 3 | import com.alibaba.otter.canal.common.CanalLifeCycle; 4 | import com.alibaba.otter.canal.parse.exception.CanalHAException; 5 | 6 | /** 7 | * HA 控制器实现 8 | * 9 | * @author jianghang 2012-6-26 下午05:21:07 10 | * @version 1.0.0 11 | */ 12 | public interface CanalHAController extends CanalLifeCycle { 13 | 14 | public void start() throws CanalHAException; 15 | 16 | public void stop() throws CanalHAException; 17 | } 18 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/AbstractBinlogParser.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.inbound; 2 | 3 | import com.alibaba.otter.canal.common.AbstractCanalLifeCycle; 4 | import com.alibaba.otter.canal.parse.exception.CanalParseException; 5 | import com.alibaba.otter.canal.protocol.CanalEntry.Entry; 6 | 7 | public abstract class AbstractBinlogParser extends AbstractCanalLifeCycle implements BinlogParser { 8 | 9 | public void reset() { 10 | } 11 | 12 | public Entry parse(T event, TableMeta tableMeta) throws CanalParseException { 13 | return null; 14 | } 15 | 16 | public Entry parse(T event) throws CanalParseException { 17 | return null; 18 | } 19 | 20 | public void stop() { 21 | reset(); 22 | super.stop(); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/BinlogParser.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.inbound; 2 | 3 | import com.alibaba.otter.canal.common.CanalLifeCycle; 4 | import com.alibaba.otter.canal.parse.exception.CanalParseException; 5 | import com.alibaba.otter.canal.protocol.CanalEntry; 6 | 7 | /** 8 | * 解析binlog的接口 9 | * 10 | * @author: yuanzu Date: 12-9-20 Time: 下午8:46 11 | */ 12 | public interface BinlogParser extends CanalLifeCycle { 13 | 14 | CanalEntry.Entry parse(T event, boolean isSeek) throws CanalParseException; 15 | 16 | void reset(); 17 | } 18 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/HeartBeatCallback.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.inbound; 2 | 3 | /** 4 | * 提供mysql heartBeat心跳数据的callback机制 5 | * 6 | * @author jianghang 2012-6-26 下午04:49:56 7 | * @version 1.0.0 8 | */ 9 | public interface HeartBeatCallback { 10 | 11 | /** 12 | * 心跳发送成功 13 | */ 14 | public void onSuccess(long costTime); 15 | 16 | /** 17 | * 心跳发送失败 18 | */ 19 | public void onFailed(Throwable e); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/MultiStageCoprocessor.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.inbound; 2 | 3 | import com.alibaba.otter.canal.common.CanalLifeCycle; 4 | import com.taobao.tddl.dbsync.binlog.LogBuffer; 5 | import com.taobao.tddl.dbsync.binlog.LogEvent; 6 | 7 | /** 8 | * 针对解析器提供一个多阶段协同的处理 9 | * 10 | *
11 |  * 1. 网络接收 (单线程)
12 |  * 2. 事件基本解析 (单线程,事件类型、DDL解析构造TableMeta、维护位点信息)
13 |  * 3. 事件深度解析 (多线程, DML事件数据的完整解析)
14 |  * 4. 投递到store (单线程)
15 |  * 
16 | * 17 | * @author agapple 2018年7月3日 下午4:54:17 18 | * @since 1.0.26 19 | */ 20 | public interface MultiStageCoprocessor extends CanalLifeCycle { 21 | 22 | /** 23 | * 网络数据投递 24 | */ 25 | public boolean publish(LogBuffer buffer); 26 | 27 | public boolean publish(LogEvent event); 28 | } 29 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/ParserExceptionHandler.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.inbound; 2 | 3 | /** 4 | * @author chengjin.lyf on 2018/7/20 下午3:55 5 | * @since 1.0.25 6 | */ 7 | public interface ParserExceptionHandler { 8 | 9 | void handle(Throwable e); 10 | } 11 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/SinkFunction.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.inbound; 2 | 3 | /** 4 | * receive parsed bytes , 用于处理要解析的数据块 5 | * 6 | * @author: yuanzu Date: 12-9-20 Time: 下午2:50 7 | */ 8 | 9 | public interface SinkFunction { 10 | 11 | public boolean sink(EVENT event); 12 | } 13 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/DbsyncMysqlEventParser.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.inbound.mysql; 2 | 3 | public class DbsyncMysqlEventParser { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/rds/data/RdsItem.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.inbound.mysql.rds.data; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author chengjin.lyf on 2018/8/7 下午2:26 7 | * @since 1.0.25 8 | */ 9 | public class RdsItem { 10 | 11 | private List BinLogFile; 12 | 13 | public List getBinLogFile() { 14 | return BinLogFile; 15 | } 16 | 17 | public void setBinLogFile(List binLogFile) { 18 | BinLogFile = binLogFile; 19 | } 20 | 21 | @Override 22 | public String toString() { 23 | return "RdsItem [BinLogFile=" + BinLogFile + "]"; 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/DefaultTableMetaTSDBFactory.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.inbound.mysql.tsdb; 2 | 3 | /** 4 | * @author agapple 2017年10月11日 下午8:45:40 5 | * @since 1.0.25 6 | */ 7 | public class DefaultTableMetaTSDBFactory implements TableMetaTSDBFactory { 8 | 9 | /** 10 | * 代理一下tableMetaTSDB的获取,使用隔离的spring定义 11 | */ 12 | public TableMetaTSDB build(String destination, String springXml) { 13 | return TableMetaTSDBBuilder.build(destination, springXml); 14 | } 15 | 16 | public void destory(String destination) { 17 | TableMetaTSDBBuilder.destory(destination); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/TableMetaTSDBFactory.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.inbound.mysql.tsdb; 2 | 3 | /** 4 | * tableMeta构造器,允许重载实现 5 | * 6 | * @author agapple 2018年8月8日 上午11:01:08 7 | * @since 1.0.26 8 | */ 9 | 10 | public interface TableMetaTSDBFactory { 11 | 12 | /** 13 | * 代理一下tableMetaTSDB的获取,使用隔离的spring定义 14 | */ 15 | public TableMetaTSDB build(String destination, String springXml); 16 | 17 | public void destory(String destination); 18 | } 19 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/main/java/com/alibaba/otter/canal/parse/index/AbstractLogPositionManager.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.index; 2 | 3 | import com.alibaba.otter.canal.common.AbstractCanalLifeCycle; 4 | 5 | /** 6 | * Created by yinxiu on 17/3/17. Email: marklin.hz@gmail.com 7 | */ 8 | public abstract class AbstractLogPositionManager extends AbstractCanalLifeCycle implements CanalLogPositionManager { 9 | } 10 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/main/java/com/alibaba/otter/canal/parse/index/CanalLogPositionManager.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.index; 2 | 3 | import com.alibaba.otter.canal.common.CanalLifeCycle; 4 | import com.alibaba.otter.canal.parse.exception.CanalParseException; 5 | import com.alibaba.otter.canal.protocol.position.LogPosition; 6 | 7 | /** 8 | * Created by yinxiu on 17/3/17. Email: marklin.hz@gmail.com 9 | */ 10 | public interface CanalLogPositionManager extends CanalLifeCycle { 11 | 12 | LogPosition getLatestIndexBy(String destination); 13 | 14 | void persistLogPosition(String destination, LogPosition logPosition) throws CanalParseException; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/main/resources/ddl/derby/meta_snapshot.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE meta_snapshot ( 2 | id bigint GENERATED ALWAYS AS IDENTITY NOT NULL, 3 | gmt_create timestamp NOT NULL, 4 | gmt_modified timestamp NOT NULL, 5 | destination varchar(128) DEFAULT NULL, 6 | binlog_file varchar(64) DEFAULT NULL, 7 | binlog_offest bigint DEFAULT NULL, 8 | binlog_master_id varchar(64) DEFAULT NULL, 9 | binlog_timestamp bigint DEFAULT NULL, 10 | data clob(16 M) DEFAULT NULL, 11 | extra varchar(512) DEFAULT NULL, 12 | PRIMARY KEY (id), 13 | CONSTRAINT meta_snapshot_binlog_file_offest UNIQUE (destination,binlog_master_id,binlog_file,binlog_offest) 14 | ); 15 | 16 | create index meta_snapshot_destination on meta_snapshot(destination); 17 | create index meta_snapshot_destination_timestamp on meta_snapshot(destination,binlog_timestamp); 18 | create index meta_snapshot_gmt_modified on meta_snapshot(gmt_modified); -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/TableMetaManagerBuilderTest.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.inbound.mysql.tsdb; 2 | 3 | import org.junit.Ignore; 4 | import org.junit.Test; 5 | import org.springframework.util.Assert; 6 | 7 | /** 8 | * @author agapple 2017年10月12日 上午10:50:00 9 | * @since 1.0.25 10 | */ 11 | public class TableMetaManagerBuilderTest { 12 | @Ignore 13 | @Test 14 | public void testSimple() { 15 | TableMetaTSDB tableMetaTSDB = TableMetaTSDBBuilder.build("test", "classpath:tsdb/mysql-tsdb.xml"); 16 | Assert.notNull(tableMetaTSDB); 17 | TableMetaTSDBBuilder.destory("test"); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/java/com/alibaba/otter/canal/parse/index/AbstractZkTest.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.index; 2 | 3 | import org.junit.Assert; 4 | 5 | public class AbstractZkTest { 6 | 7 | protected String destination = "ljhtest1"; 8 | protected String cluster1 = "127.0.0.1:2188"; 9 | protected String cluster2 = "127.0.0.1:2188,127.0.0.1:2188"; 10 | 11 | public void sleep(long time) { 12 | try { 13 | Thread.sleep(time); 14 | } catch (InterruptedException e) { 15 | Assert.fail(e.getMessage()); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/java/com/alibaba/otter/canal/parse/index/MemoryLogPositionManagerTest.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.index; 2 | 3 | import org.junit.Ignore; 4 | import org.junit.Test; 5 | @Ignore 6 | public class MemoryLogPositionManagerTest extends AbstractLogPositionManagerTest { 7 | 8 | @Test 9 | public void testAll() { 10 | MemoryLogPositionManager logPositionManager = new MemoryLogPositionManager(); 11 | logPositionManager.start(); 12 | doTest(logPositionManager); 13 | logPositionManager.stop(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/java/com/alibaba/otter/canal/parse/stub/AbstractCanalEventSinkTest.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.parse.stub; 2 | 3 | import com.alibaba.otter.canal.common.AbstractCanalLifeCycle; 4 | import com.alibaba.otter.canal.sink.CanalEventSink; 5 | 6 | public abstract class AbstractCanalEventSinkTest extends AbstractCanalLifeCycle implements CanalEventSink { 7 | 8 | public void interrupt() { 9 | // do nothing 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/binlog/mysql-bin.000001: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/binlog/mysql-bin.000001 -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/binlog/mysql-bin.000002: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/binlog/mysql-bin.000002 -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/binlog/tsdb/mysql-bin.000001: -------------------------------------------------------------------------------- 1 | �bine��Yw{5.7.19-loge��Y8 2 | _ 3 | 4 | 5 | **4m��;f��Y#��Ŗ�( -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/binlog/tsdb/mysql-bin.000002: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/binlog/tsdb/mysql-bin.000002 -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/binlog/tsdb/mysql-bin.000003: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/binlog/tsdb/mysql-bin.000003 -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_1.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_rpwzfoyxgb` ( 2 | `col_mpjirrklef` longtext CHARACTER SET utf8mb4 3 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 4 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_10.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_ubziprstga` ( 2 | `col_bjmlsboygo` text CHARACTER SET utf8 3 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 4 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_11.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_ytaiteijaz` ( 2 | `col_lxtrjmhpmr` year(4) DEFAULT NULL, 3 | `col_wvvanapjlz` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 4 | `col_xnljwkzjad` enum('enum_or_set_0','enum_or_set_1','enum_or_set_2') DEFAULT 'enum_or_set_0', 5 | `col_kajgusvxkq` smallint(75) DEFAULT NULL, 6 | `col_pwojmgycov` bigint(20) unsigned zerofill DEFAULT NULL, 7 | UNIQUE KEY `uk_pffwfanush` (`col_wvvanapjlz`) 8 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 9 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_12.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_jhqwojqbtj` ( 2 | `col_flcxltquqr` longtext, 3 | `col_ksprsgkzrb` longtext CHARACTER SET utf8mb4, 4 | `col_ndohgxbgox` float DEFAULT '1', 5 | `col_egszzxhsvf` enum('enum_or_set_0','enum_or_set_1','enum_or_set_2') NOT NULL, 6 | `col_cuzojqplje` year(4) DEFAULT '2019', 7 | `col_sexypgjnak` date DEFAULT '2019-07-04' 8 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 9 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_13.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_yfhnotrnrt` ( 2 | `col_vexgpiotuy` binary(1) DEFAULT NULL, 3 | `col_qslraszfyz` longtext CHARACTER SET utf8mb4, 4 | `col_dyphdacvvd` tinytext CHARACTER SET utf8mb4, 5 | `col_xgueitftmx` float(247,18), 6 | `col_ormwjqfbxi` int(193) unsigned zerofill DEFAULT NULL 7 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 8 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_14.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_cmzqttalvi` ( 2 | `col_lnqceyzqyi` mediumint(9) DEFAULT '1', 3 | `col_rorzwqbqzc` varbinary(190) DEFAULT NULL, 4 | `col_qfegkgeaal` tinyint(3) unsigned DEFAULT '1', 5 | UNIQUE KEY `uk_nvoltofkla` (`col_rorzwqbqzc`(15)) 6 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 7 | CREATE TABLE `tb_xnqicybdlo` ( 8 | `col_jzysxyqbvv` binary(91), 9 | UNIQUE KEY `col_jzysxyqbvv` (`col_jzysxyqbvv`(31)) 10 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 11 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_15.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_hgbecqwvnf` ( 2 | `col_qppnejcxiu` binary(137) DEFAULT NULL, 3 | `col_nyrvlflfiz` mediumblob, 4 | `col_zfwcescosm` bit(1) DEFAULT NULL, 5 | `col_dqpoxmoyzl` bigint(111) unsigned DEFAULT '1', 6 | `col_rfnetihhhs` decimal(15,0) NOT NULL, 7 | `col_jhaqzczhxe` mediumblob, 8 | `col_gfdmpyoigq` time(1) DEFAULT NULL 9 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 10 | CREATE TABLE `tb_dqeiczpcpp` ( 11 | `col_zfwcescosm` bit(1) DEFAULT NULL, 12 | `col_gvrsiekgpu` mediumint(9) DEFAULT NULL, 13 | `col_luknerkzbg` year(4) DEFAULT NULL 14 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 15 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_17.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_ygyyvdctrs` ( 2 | `col_hirzxaomit` varbinary(145) NOT NULL, 3 | `col_rpxmbgbwos` longblob, 4 | `col_emexlkeymz` enum('enum_or_set_0','enum_or_set_1','enum_or_set_2') CHARACTER SET utf8mb4 DEFAULT 'enum_or_set_0', 5 | `col_ibmogxgtyp` set('enum_or_set_0','enum_or_set_1','enum_or_set_2') CHARACTER SET latin1 DEFAULT 'enum_or_set_0', 6 | `col_yzbwkjwzqw` int(10) unsigned zerofill NOT NULL, 7 | `col_dmdpojzsct` varbinary(166) DEFAULT NULL, 8 | `col_oxgbfbgzov` double(112,2) DEFAULT NULL, 9 | `col_zkdwjtabnw` smallint(5) unsigned NOT NULL, 10 | `col_dxgsghrizm` tinyblob, 11 | `col_bowjbzwvyw` date DEFAULT NULL, 12 | `col_inneappfsm` varchar(112) CHARACTER SET utf8mb4 DEFAULT NULL, 13 | UNIQUE KEY `col_emexlkeymz` (`col_emexlkeymz`) 14 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 15 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_18.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_jhkrixchju` ( 2 | `col_prrcfbnwew` longtext, 3 | `col_peqguxwzcy` smallint(202) NOT NULL DEFAULT '1', 4 | `col_nhdlxtgtvs` char(1) CHARACTER SET utf8 DEFAULT NULL, 5 | `col_vyizooodsa` longblob, 6 | `col_hwmrzghead` longtext, 7 | `col_adgnavqmhq` longtext, 8 | `col_adwetrnlyu` bit(41) DEFAULT NULL, 9 | `col_ypyzwlctxm` varbinary(86) DEFAULT '\0', 10 | `col_rmjdxsrzry` char(159) DEFAULT NULL, 11 | `col_mcjrxquwtj` binary(1) DEFAULT NULL, 12 | `col_ilcapoaext` mediumblob, 13 | `col_dvcgmijmcd` smallint(246) unsigned NOT NULL DEFAULT '1', 14 | `col_avjufpxxft` timestamp NULL DEFAULT NULL 15 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 16 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_19.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_hefguylckk` ( 2 | `col_qzehomawzl` int(11) DEFAULT NULL 3 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 4 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_2.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_gcqyhapjeh` ( 2 | `col_hctgmkmyxs` datetime DEFAULT '2019-07-04 00:00:00', 3 | `col_kkvhrfifbo` longtext, 4 | `col_mqfdtybcrt` longtext, 5 | `col_ddgcxloigt` bit(6) DEFAULT NULL, 6 | `col_icjiguudiw` bigint(20) unsigned zerofill, 7 | UNIQUE KEY `col_kkvhrfifbo` (`col_kkvhrfifbo`(31)) 8 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 9 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_20.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_wxywfqcvkr` ( 2 | `col_oftatmlkzc` set('enum_or_set_0','enum_or_set_1','enum_or_set_2') NOT NULL, 3 | `col_vjvhvsxmoi` bigint(20) unsigned zerofill DEFAULT NULL, 4 | `col_figelwsuqt` set('enum_or_set_0','enum_or_set_1','enum_or_set_2') DEFAULT 'enum_or_set_0', 5 | `col_whowxgsfzl` longblob, 6 | `col_mzdqafxiqx` bigint(161) unsigned DEFAULT '1' 7 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 8 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_21.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_mjvfhaqskb` ( 2 | `col_snmdnyljqk` varbinary(47) DEFAULT '\0' 3 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 4 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_22.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_sxbbqclsgf` ( 2 | `col_ukcpwepvny` timestamp(1) NOT NULL DEFAULT CURRENT_TIMESTAMP(1), 3 | `col_avzjcdfkfv` year(4) NOT NULL DEFAULT '2019', 4 | `col_kgfprqgdwt` mediumtext CHARACTER SET latin1, 5 | `col_wctphwmxin` smallint(103) unsigned zerofill DEFAULT NULL, 6 | `col_tekylcrmef` bit(17) DEFAULT b'0', 7 | UNIQUE KEY `col_kgfprqgdwt` (`col_kgfprqgdwt`(6)) 8 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 9 | CREATE TABLE `tb_btqvbuxdyv` ( 10 | `col_zknooyoueg` time NOT NULL DEFAULT '00:00:00', 11 | `col_xavytdfgxu` mediumtext, 12 | `col_mgwiohebft` mediumtext, 13 | `col_bejzwcvfmz` date DEFAULT '2019-07-04', 14 | UNIQUE KEY `uk_cryfvwxbvx` (`col_zknooyoueg`,`col_xavytdfgxu`(9)) 15 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 16 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_24.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_fywhebwffn` ( 2 | `col_ukjlmzjcdn` tinyint(91) unsigned DEFAULT '1', 3 | UNIQUE KEY `uk_xedljqlhxo` (`col_ukjlmzjcdn`), 4 | UNIQUE KEY `uk_keugblaszl` (`col_ukjlmzjcdn`), 5 | UNIQUE KEY `col_ctzpiugxrl_2` (`col_ukjlmzjcdn`) 6 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 7 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_25.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_aafdasghga` ( 2 | `col_uayhwfkoln` longtext CHARACTER SET utf8mb4, 3 | `col_qskwbkbegb` decimal(16,0) DEFAULT NULL, 4 | `col_fxicikwsct` float NOT NULL, 5 | `col_ygghjheerk` text CHARACTER SET utf8, 6 | `col_zbenqlvted` binary(1) DEFAULT NULL, 7 | `col_ixseptopfk` date DEFAULT '2019-07-04', 8 | `col_iafihazdod` char(1) NOT NULL, 9 | UNIQUE KEY `col_fxicikwsct` (`col_fxicikwsct`), 10 | UNIQUE KEY `col_zbenqlvted` (`col_zbenqlvted`) 11 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 12 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_26.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_keyyesvarm` ( 2 | `col_zixordgmdc` decimal(3,1) DEFAULT NULL, 3 | `col_victdeyala` decimal(48,7) DEFAULT NULL, 4 | `col_lqkravajqi` longtext 5 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 6 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_27.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_flnycxasap` ( 2 | `col_rqtzrkfarg` timestamp NULL DEFAULT CURRENT_TIMESTAMP 3 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 4 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_28.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_cvpyawneqw` ( 2 | `col_nnggkdrfej` mediumint(9) DEFAULT '1', 3 | `col_gxyxiafdwy` tinyblob, 4 | `col_jrdtjutkna` int(10) unsigned DEFAULT NULL, 5 | UNIQUE KEY `col_sowlpsmtck` (`col_nnggkdrfej`), 6 | UNIQUE KEY `uk_ameijmmzqx` (`col_nnggkdrfej`), 7 | UNIQUE KEY `col_gxyxiafdwy` (`col_gxyxiafdwy`(28)) 8 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 9 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_29.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_lfxvmboyfq` ( 2 | `col_omyyogfmwf` varbinary(117) DEFAULT NULL, 3 | `col_ziqdcvhqaa` longblob, 4 | `col_osxbsknpgd` varchar(183) CHARACTER SET utf8mb4 DEFAULT NULL, 5 | `col_idrqfoikzf` float(151,12) NOT NULL, 6 | `col_whrxkkdwrk` tinytext, 7 | `col_yxfqfnhsex` bit(43) DEFAULT NULL 8 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 9 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_30.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_ruvaoezmwl` ( 2 | `col_gdnftbskks` datetime(4) DEFAULT NULL, 3 | `col_crzzjsyeyk` tinyblob, 4 | UNIQUE KEY `uk_splpaskbbf` (`col_gdnftbskks`), 5 | UNIQUE KEY `uk_gcdkboipfa` (`col_gdnftbskks`) 6 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 7 | CREATE TABLE `tb_pfzgcmldfg` ( 8 | `col_gdnftbskks` datetime(4) DEFAULT NULL, 9 | `col_duzzugyump` smallint(74) unsigned zerofill DEFAULT NULL, 10 | UNIQUE KEY `uk_gcdkboipfa` (`col_gdnftbskks`) 11 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 12 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_31.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_djhsoeomxx` ( 2 | `col_fpegtdbbro` varchar(10) CHARACTER SET latin1 NOT NULL DEFAULT '', 3 | UNIQUE KEY `uk_bbhokusgkq` (`col_fpegtdbbro`) 4 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 5 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_32.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_ybgjvtnrkt` ( 2 | `col_vhszikunhu` int(95) unsigned zerofill DEFAULT NULL 3 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 4 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_33.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_ocwsozgwid` ( 2 | `col_cuctvlzqvd` decimal(63,14), 3 | UNIQUE KEY `col_jerxhroyff_2` (`col_cuctvlzqvd`), 4 | UNIQUE KEY `col_jerxhroyff_4` (`col_cuctvlzqvd`) 5 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 6 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_36.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_putsugoooc` ( 2 | `col_ynpynwnkjv` mediumtext, 3 | UNIQUE KEY `col_ufqdyzbxyc_2` (`col_ynpynwnkjv`(18)) 4 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 5 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_37.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_cdbrmxbknb` ( 2 | `col_amvugezhpd` blob, 3 | UNIQUE KEY `uk_yvoxkgeget` (`col_amvugezhpd`(6)), 4 | UNIQUE KEY `uk_ozxqwxureo` (`col_amvugezhpd`(10)) 5 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 6 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_38.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_oxwwculmvu` ( 2 | `col_szncpsegwq` time DEFAULT '00:00:00', 3 | `col_wxqxqueihr` enum('enum_or_set_0','enum_or_set_1','enum_or_set_2') DEFAULT NULL, 4 | `col_hyhtklzrvn` varchar(147) NOT NULL DEFAULT '', 5 | `col_umxbmdtpxs` set('enum_or_set_0','enum_or_set_1','enum_or_set_2') NOT NULL, 6 | `col_bewssrhuze` tinytext CHARACTER SET utf8 COLLATE utf8_unicode_ci, 7 | `col_yyixefgbqi` year(4) DEFAULT NULL, 8 | UNIQUE KEY `uk_vrydxlndik` (`col_yyixefgbqi`) 9 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 10 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_39.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_aidhgjhqzp` ( 2 | `col_wtsgpcyuec` time(6) DEFAULT NULL, 3 | `col_ouqqfnoijf` tinyint(142) unsigned DEFAULT '1', 4 | `col_jsjfylwbsu` time(3) NOT NULL, 5 | `col_wcosqedhbh` tinytext, 6 | `col_cvzuqkfnnp` tinytext CHARACTER SET latin1, 7 | `col_dpnzvoemce` smallint(146) unsigned zerofill DEFAULT NULL, 8 | `col_wisgyhivgt` enum('enum_or_set_0','enum_or_set_1','enum_or_set_2') DEFAULT 'enum_or_set_0' 9 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 10 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_4.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_ljqwtifhmg` ( 2 | `col_lifsfguaso` bigint(20) unsigned zerofill NOT NULL 3 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 4 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_40.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_imabeghgmt` ( 2 | `col_wvmxgyajnm` longblob, 3 | UNIQUE KEY `uk_ppyrqytsgk` (`col_wvmxgyajnm`(12)), 4 | UNIQUE KEY `uk_znvsdkastd` (`col_wvmxgyajnm`(17)) 5 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 6 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_42.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_hkehwyglax` ( 2 | `col_dcnadmyyfb` binary(1) DEFAULT NULL, 3 | `col_zvcpajjdrr` int(26) unsigned zerofill DEFAULT NULL, 4 | `col_aftchdhhpb` int(10) unsigned DEFAULT NULL, 5 | `col_fdyhioyktq` tinytext CHARACTER SET utf8mb4, 6 | `col_iqohbjwihd` text CHARACTER SET utf8mb4, 7 | `col_yxsvpkijew` double NOT NULL, 8 | UNIQUE KEY `col_tymnumzsjd_2` (`col_aftchdhhpb`) 9 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 10 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_43.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_uoquelzmdk` ( 2 | `col_wcdxzaykzl` smallint(5) unsigned DEFAULT '1', 3 | `col_njhhehxbdq` mediumtext, 4 | `col_wwdicmbkug` longblob 5 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 6 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_44.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_faqsxuetwm` ( 2 | `col_qcgurbenzo` enum('enum_or_set_0','enum_or_set_1','enum_or_set_2') DEFAULT NULL, 3 | UNIQUE KEY `uk_vidzaimrjm` (`col_qcgurbenzo`), 4 | UNIQUE KEY `uk_zgssrxjpck` (`col_qcgurbenzo`) 5 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 6 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_45.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_voanuixent` ( 2 | `col_xgykdmygaw` tinyblob 3 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 4 | CREATE TABLE `tb_znqepghruj` ( 5 | `col_xgykdmygaw` tinyblob, 6 | UNIQUE KEY `col_xgykdmygaw` (`col_xgykdmygaw`(21)) 7 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 8 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_46.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_mlsrpqwnhf` ( 2 | `col_kdvvwclils` year(4) DEFAULT '2019' 3 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 4 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_47.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_odwnejztgw` ( 2 | `col_ouwtrbmtli` varbinary(39) DEFAULT '\0', 3 | `col_ikgmyfugbh` time(3) DEFAULT NULL, 4 | `col_grrazuxsmj` tinyint(108) unsigned zerofill DEFAULT NULL, 5 | `col_dqxacqwdav` year(4) DEFAULT NULL, 6 | `col_afisennniu` enum('enum_or_set_0','enum_or_set_1','enum_or_set_2') CHARACTER SET latin1 NOT NULL DEFAULT 'enum_or_set_0', 7 | `col_hsbiyreflo` mediumblob, 8 | `col_pmcsqydybm` bit(59) DEFAULT NULL, 9 | `col_caewwurnsu` mediumblob, 10 | `col_vumeeppqkm` int(62) unsigned zerofill DEFAULT NULL, 11 | `col_hxgvemyiam` tinytext, 12 | PRIMARY KEY (`col_afisennniu`) 13 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 14 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_48.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_fzlrvzctbr` ( 2 | `col_fcxqhwmcni` longblob, 3 | `col_kswnnckixx` tinytext, 4 | `col_hpqddjdxxz` longblob, 5 | `col_xnreiiwrcm` mediumint(225) unsigned DEFAULT '1', 6 | UNIQUE KEY `uk_cvkkrimfqi` (`col_kswnnckixx`(2),`col_hpqddjdxxz`(29)) 7 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 8 | CREATE TABLE `tb_tmasbkkzbt` ( 9 | `col_gvdetvdvvm` longtext, 10 | UNIQUE KEY `uk_dvgbfwphsv` (`col_gvdetvdvvm`(27)) 11 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 12 | CREATE TABLE `tb_vnbuhzbwvw` ( 13 | `col_gttrfjbbyi` varchar(161) NOT NULL, 14 | `col_ksvxcquzhp` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci, 15 | `col_ibahzyeiod` year(4) NOT NULL, 16 | PRIMARY KEY (`col_gttrfjbbyi`(8)), 17 | UNIQUE KEY `col_ksvxcquzhp` (`col_ksvxcquzhp`(16),`col_ibahzyeiod`) 18 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 19 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_49.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_yzmdpoldbu` ( 2 | `col_cmeqnxgnwo` int(11) DEFAULT '1', 3 | `col_qdzrqnbwug` enum('enum_or_set_0','enum_or_set_1','enum_or_set_2') DEFAULT 'enum_or_set_0', 4 | `col_pabufpjxkv` tinytext, 5 | `col_hvdglgtlxp` longblob, 6 | `col_pbngzmfduy` varchar(225) NOT NULL, 7 | `col_fefjkkdwwg` tinytext, 8 | `col_kloxucvkgw` bigint(200) unsigned DEFAULT '1', 9 | UNIQUE KEY `uk_bmkecbeunv` (`col_fefjkkdwwg`(12)) 10 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 11 | CREATE TABLE `tb_oxrpkkhlpd` ( 12 | `col_qyxegyfxhd` binary(1) NOT NULL, 13 | `col_fhrwjmkunp` time DEFAULT '00:00:00', 14 | `col_ebdpffnuvl` longblob, 15 | `col_ivfpfrbagk` decimal(48,0) DEFAULT NULL, 16 | PRIMARY KEY (`col_qyxegyfxhd`) 17 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 18 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_5.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_ahefjpyxqu` ( 2 | `col_cqrrpavzlu` tinyint(14) DEFAULT '1' 3 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 4 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_50.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_cfnewnjqhr` ( 2 | `col_cdwqlqfwox` int(10) unsigned DEFAULT '1' 3 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 4 | CREATE TABLE `tb_naclwnujgs` ( 5 | `col_qqccessygq` year(4) NOT NULL, 6 | PRIMARY KEY (`col_qqccessygq`), 7 | UNIQUE KEY `uk_mffeuwunua` (`col_qqccessygq`) 8 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 9 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_51.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_krsikytrbw` ( 2 | `col_lliihnoyoo` int(145) NOT NULL DEFAULT '1', 3 | `col_qkgtxzzfie` tinyblob, 4 | `col_lfbganjgad` timestamp(4) NULL DEFAULT NULL, 5 | `col_cqjptjcgyb` binary(1) NOT NULL, 6 | `col_lfptlilmsv` int(230) unsigned zerofill NOT NULL, 7 | `col_omxbpiulnd` year(4) DEFAULT '2019', 8 | PRIMARY KEY (`col_cqjptjcgyb`), 9 | UNIQUE KEY `col_cqjptjcgyb` (`col_cqjptjcgyb`,`col_lliihnoyoo`) 10 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 11 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_52.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_udrucjftxw` ( 2 | `col_tustciiwwp` datetime(2) DEFAULT NULL, 3 | `col_xhjeuttrui` longtext CHARACTER SET utf8mb4, 4 | `col_gzwherugvm` decimal(35,10) DEFAULT NULL, 5 | `col_fwooxfmvvs` tinytext, 6 | UNIQUE KEY `uk_kllnpcqqzt` (`col_xhjeuttrui`(30)), 7 | UNIQUE KEY `uk_omzcuexdxr` (`col_xhjeuttrui`(8),`col_gzwherugvm`) 8 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 9 | CREATE TABLE `tb_syxeibzqzx` ( 10 | `col_shntqukbsk` datetime DEFAULT NULL 11 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 12 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_54.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_fijiqnymmp` ( 2 | `col_tcroqoomon` tinyblob 3 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 4 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_55.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_epubreeayc` ( 2 | `col_embnqthyuu` double NOT NULL, 3 | `col_shqnxczemy` binary(149) DEFAULT NULL, 4 | `col_gyjfdfpemu` longtext CHARACTER SET utf8, 5 | PRIMARY KEY (`col_embnqthyuu`) 6 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 7 | CREATE TABLE `tb_uafierhjhg` ( 8 | `col_rvdpillohr` smallint(51) unsigned NOT NULL, 9 | `col_wjvgjpqbgz` smallint(5) unsigned zerofill DEFAULT NULL, 10 | PRIMARY KEY (`col_rvdpillohr`), 11 | UNIQUE KEY `uk_aqetlmillq` (`col_wjvgjpqbgz`) 12 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 13 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_56.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_hjqdntirzd` ( 2 | `col_dtiogubkiw` set('enum_or_set_0','enum_or_set_1','enum_or_set_2') DEFAULT 'enum_or_set_0', 3 | `col_okjyevogvl` int(11) DEFAULT '1', 4 | `col_cawkxhaucp` tinyblob, 5 | UNIQUE KEY `col_mwlpdcpegm` (`col_dtiogubkiw`) 6 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 7 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_57.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_xmvawoekwx` ( 2 | `col_gsqeppbqjg` set('enum_or_set_0','enum_or_set_1','enum_or_set_2') DEFAULT NULL 3 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 4 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_58.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_wsxpqlbxhr` ( 2 | `col_kkdtlacxiy` char(1) NOT NULL, 3 | `col_koftcyrhcl` int(233) DEFAULT '1', 4 | `col_nacwazcyzi` varbinary(12) DEFAULT NULL, 5 | `col_nnckvjhnnd` tinytext CHARACTER SET utf8 COLLATE utf8_unicode_ci, 6 | `col_sxwmoaghtk` set('enum_or_set_0','enum_or_set_1','enum_or_set_2') DEFAULT 'enum_or_set_0', 7 | `col_btyjfvfohb` double(18,12) DEFAULT NULL, 8 | `col_qpusrblupw` enum('enum_or_set_0','enum_or_set_1','enum_or_set_2') DEFAULT 'enum_or_set_0', 9 | PRIMARY KEY (`col_kkdtlacxiy`) 10 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 11 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_59.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_hbheuprskb` ( 2 | `col_mqqxkezdux` enum('enum_or_set_0','enum_or_set_1','enum_or_set_2') CHARACTER SET utf8 NOT NULL, 3 | UNIQUE KEY `col_mqqxkezdux` (`col_mqqxkezdux`) 4 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 5 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_6.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_yzcwyrztvj` ( 2 | `col_ubxpjfudbv` timestamp(5) NOT NULL DEFAULT CURRENT_TIMESTAMP(5), 3 | PRIMARY KEY (`col_ubxpjfudbv`) 4 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 5 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_60.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_idttivasrc` ( 2 | `col_vqskztkwqb` longblob, 3 | `col_naimzyvtyy` mediumint(8) unsigned DEFAULT NULL, 4 | `col_ngqfbkxgkw` tinyblob, 5 | `col_slxxarfdmi` binary(243) DEFAULT NULL 6 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 7 | CREATE TABLE `tb_rjdimmicei` ( 8 | `col_aszmqpjfka` decimal(49,0) DEFAULT NULL, 9 | `col_qmwcrinzvf` time NOT NULL, 10 | `col_xgwavsjbcg` longblob, 11 | UNIQUE KEY `col_xgwavsjbcg` (`col_xgwavsjbcg`(22)) 12 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 13 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_61.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_sbjgtoodpq` ( 2 | `col_npydnongql` decimal(45,0) NOT NULL, 3 | `col_pfssvgbbli` bigint(20) unsigned zerofill DEFAULT NULL, 4 | `col_qqyenpblbe` binary(1), 5 | `col_mkayxjoxkl` binary(229) DEFAULT NULL, 6 | `col_zlrfenamiz` double 7 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 8 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_62.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_mvpbukrobp` ( 2 | `col_hkfndsohtj` set('enum_or_set_0','enum_or_set_1','enum_or_set_2') NOT NULL, 3 | `col_gepoechcst` char(1) DEFAULT NULL, 4 | `col_hgaiklgzif` enum('enum_or_set_0','enum_or_set_1','enum_or_set_2') DEFAULT NULL, 5 | `col_ndfdyxpuhz` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 6 | `col_vrsytgjrfw` date DEFAULT '2019-07-04', 7 | `col_vlgjlismyz` text, 8 | `col_jbqfyecqez` set('enum_or_set_0','enum_or_set_1','enum_or_set_2') NOT NULL 9 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 10 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_63.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_txslclddib` ( 2 | `col_fflqfgfdyt` varchar(26) CHARACTER SET utf8mb4 NOT NULL DEFAULT '', 3 | `col_yvgymfxalr` year(4) DEFAULT '2019', 4 | `col_vkgmvcluzx` bigint(20) unsigned zerofill DEFAULT NULL, 5 | `col_mnviktcwsx` blob 6 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 7 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_64.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_vyhepkdocw` ( 2 | `col_yqmzdxesrj` timestamp NULL DEFAULT NULL, 3 | `col_slupqsxneh` decimal(14,0) DEFAULT NULL, 4 | `col_chvhleyulg` tinytext, 5 | `col_getqnnhjry` date DEFAULT NULL, 6 | `col_ahjuyzjbhk` bit(1) DEFAULT NULL, 7 | `col_daemlskcfa` double DEFAULT NULL, 8 | UNIQUE KEY `col_slupqsxneh` (`col_slupqsxneh`), 9 | UNIQUE KEY `col_onhyboljxa` (`col_slupqsxneh`) 10 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 11 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_65.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_ambgylvzkp` ( 2 | `col_smbnzspzed` date DEFAULT NULL, 3 | `col_ebfnpjymeg` tinytext CHARACTER SET utf8mb4, 4 | `col_llpqomujks` varchar(24) CHARACTER SET latin1 NOT NULL DEFAULT '', 5 | `col_eeieaubbdp` decimal(12,0) DEFAULT NULL, 6 | `col_evvhlyienk` char(172) CHARACTER SET utf8mb4 DEFAULT NULL, 7 | PRIMARY KEY (`col_llpqomujks`) 8 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 9 | CREATE TABLE `tb_rnradhkfon` ( 10 | `col_sbuommslma` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), 11 | `col_corovzewna` date DEFAULT '2019-07-04', 12 | UNIQUE KEY `col_sbuommslma` (`col_sbuommslma`), 13 | UNIQUE KEY `col_sbuommslma_2` (`col_sbuommslma`) 14 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 15 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_66.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_gnbqbndsaw` ( 2 | `col_pqnfhpfywv` datetime DEFAULT '2019-07-04 00:00:00' 3 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 4 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_67.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_wzvjzesyqu` ( 2 | `col_zlboqlzvrz` binary(0) NOT NULL 3 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 4 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_68.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_vmghxdnngw` ( 2 | `col_cuofmwfcxy` tinytext 3 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 4 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_69.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_tilukdjjhc` ( 2 | `col_kxelvjyosf` int(150) DEFAULT NULL, 3 | `col_loxvzbzvge` char(1) CHARACTER SET utf8 DEFAULT NULL, 4 | `col_laleouwpiw` int(11) NOT NULL DEFAULT '1', 5 | `col_fgidnnqvqm` year(4) NOT NULL, 6 | `col_pmqkhijpcr` varbinary(71) DEFAULT '\0', 7 | `col_uzxvkpgggz` mediumblob, 8 | `col_jtyftybbku` decimal(13,5) NOT NULL, 9 | `col_olnmovdyfw` bit(3) DEFAULT b'0', 10 | `col_kcysycgbek` longblob, 11 | `col_idhlrzdwud` char(1) CHARACTER SET utf8 NOT NULL 12 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 13 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_7.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_nuprsugtcj` ( 2 | `col_qwsjkklpfs` set('enum_or_set_0','enum_or_set_1','enum_or_set_2') 3 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 4 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_70.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_wqthgwmnob` ( 2 | `col_enozfpzijr` date DEFAULT NULL 3 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 4 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_71.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_sfwkwlflbi` ( 2 | `col_wryzwhfdap` mediumtext CHARACTER SET utf8 COLLATE utf8_unicode_ci 3 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 4 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_72.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_cugzkpefkt` ( 2 | `col_xnhktpwgoy` tinyblob, 3 | UNIQUE KEY `uk_anpzhhtomg` (`col_xnhktpwgoy`(16)) 4 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 5 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_74.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_tazkjnlgrx` ( 2 | `col_ewzdxvnlrs` bit(1) NOT NULL DEFAULT b'0', 3 | `col_trhadxfbfi` decimal(10,0) DEFAULT NULL, 4 | `col_jxosxbunsc` double(179,7) DEFAULT NULL, 5 | `col_jijmncnsoa` set('enum_or_set_0','enum_or_set_1','enum_or_set_2') DEFAULT 'enum_or_set_0', 6 | `col_gxpgglefyh` char(40) CHARACTER SET utf8mb4 DEFAULT NULL, 7 | `col_pgtqyvckbi` time DEFAULT NULL, 8 | `col_vbsyfqxqng` mediumblob, 9 | PRIMARY KEY (`col_ewzdxvnlrs`), 10 | UNIQUE KEY `uk_ygarqhlsva` (`col_jxosxbunsc`) 11 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 12 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_75.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_mpjfjmkbwn` ( 2 | `col_lyrrpdesag` bigint(20) unsigned zerofill DEFAULT NULL, 3 | `col_eyzpohpkcl` int(10) unsigned zerofill NOT NULL, 4 | `col_fehlmkpxfq` char(1) CHARACTER SET latin1 DEFAULT NULL, 5 | `col_oqfdewvoin` bigint(20) unsigned DEFAULT NULL, 6 | UNIQUE KEY `uk_odozsruufn` (`col_fehlmkpxfq`), 7 | UNIQUE KEY `col_lyrrpdesag` (`col_lyrrpdesag`) 8 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 9 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_76.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_bxtlrumrtn` ( 2 | `col_uttbttlgkx` smallint(181) unsigned DEFAULT NULL 3 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 4 | CREATE TABLE `tb_irclltefag` ( 5 | `col_iabzixqyhm` tinyblob, 6 | `col_otoxjlwatj` date DEFAULT '2019-07-04', 7 | UNIQUE KEY `col_otoxjlwatj` (`col_otoxjlwatj`) 8 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 9 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_77.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_igmuoxapjx` ( 2 | `col_cvsykxnvpf` varchar(24) DEFAULT '' 3 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 4 | CREATE TABLE `tb_wmwynbzgyg` ( 5 | `col_iupsnmieyl` smallint(5) unsigned DEFAULT NULL, 6 | `col_gnkgsewitj` decimal(10,0) DEFAULT '1', 7 | `col_cvsykxnvpf` varchar(24) DEFAULT '', 8 | `col_xailqzhuwy` blob 9 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 10 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_78.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_cockfzvkou` ( 2 | `col_atkczpjiqk` set('enum_or_set_0','enum_or_set_1','enum_or_set_2') NOT NULL, 3 | UNIQUE KEY `uk_cxmeeaqnza` (`col_atkczpjiqk`) 4 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 5 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_79.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_zwzsaathnd` ( 2 | `col_rqumywduzu` time DEFAULT NULL, 3 | `col_jzcpwtvvhi` decimal(10,0) NOT NULL DEFAULT '1', 4 | `col_vcejogynpm` time DEFAULT NULL, 5 | `col_dseumehqur` tinyblob, 6 | `col_xxmdywhgie` mediumint(9) DEFAULT NULL 7 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 8 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_8.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_hmfoniytbf` ( 2 | `col_urfoabrjor` bit(15) NOT NULL 3 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 4 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_80.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_tmotlxzrja` ( 2 | `col_uesfklwmsk` date DEFAULT '2019-07-04', 3 | `col_zskjzqcxkk` varbinary(218) DEFAULT '\0', 4 | `col_rvztkthbca` time(6) DEFAULT NULL, 5 | `col_mpmkktdhop` mediumblob, 6 | `col_tgjhdvpopd` year(4) DEFAULT NULL, 7 | `col_erywvwybme` int(13) DEFAULT '1', 8 | `col_glrqptmjgp` varbinary(172) DEFAULT NULL, 9 | `col_soiyoovkol` char(1) CHARACTER SET utf8mb4 DEFAULT NULL, 10 | `col_wppxtgrjdz` tinyblob 11 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 12 | CREATE TABLE `tb_amkojtlotu` ( 13 | `col_zzhxpptdgq` longblob, 14 | UNIQUE KEY `uk_voojzaxmwk` (`col_zzhxpptdgq`(21)) 15 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 16 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/mysql_9.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_sqndbrgkvj` ( 2 | `col_mueqvldinf` int(10) unsigned DEFAULT '1', 3 | `col_rtbkufevvv` smallint(5) unsigned zerofill DEFAULT NULL, 4 | `col_xuafealoty` float DEFAULT NULL, 5 | `col_plylqkvjll` time(5) DEFAULT NULL, 6 | `col_pymdrmukax` double DEFAULT NULL, 7 | `col_prvruzvlqp` set('enum_or_set_0','enum_or_set_1','enum_or_set_2') CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, 8 | UNIQUE KEY `col_plylqkvjll` (`col_plylqkvjll`,`col_pymdrmukax`) 9 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 10 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/test_24.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_joiefnrthx` ( 2 | `col_ctzpiugxrl` binary(180), 3 | UNIQUE INDEX `col_ctzpiugxrl` (`col_ctzpiugxrl`(6)), 4 | UNIQUE KEY `uk_xedljqlhxo` (`col_ctzpiugxrl`(18)) 5 | ) DEFAULT CHARSET=latin1; 6 | RENAME TABLE `tb_joiefnrthx` TO `tb_bubrykvvkb`; 7 | RENAME TABLE `tb_bubrykvvkb` TO `tb_fywhebwffn`; 8 | ALTER TABLE `tb_fywhebwffn` DEFAULT CHARACTER SET utf8mb4; 9 | ALTER TABLE `tb_fywhebwffn` ADD UNIQUE KEY `uk_keugblaszl` (`col_ctzpiugxrl`(8)); 10 | ALTER TABLE `tb_fywhebwffn` ADD UNIQUE (`col_ctzpiugxrl`(13)); 11 | ALTER TABLE `tb_fywhebwffn` CHANGE `col_ctzpiugxrl` `col_ukjlmzjcdn` tinyint(91) unsigned DEFAULT '1'; 12 | ALTER TABLE `tb_fywhebwffn` DROP KEY `col_ctzpiugxrl`; 13 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/test_33.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_yajpbebdke` ( 2 | `col_jerxhroyff` mediumtext CHARACTER SET utf8 COLLATE utf8_unicode_ci, 3 | `col_cuctvlzqvd` numeric(63,14), 4 | UNIQUE `col_jerxhroyff` (`col_jerxhroyff`(29)), 5 | UNIQUE INDEX `col_jerxhroyff_2` (`col_jerxhroyff`(15),`col_cuctvlzqvd`) 6 | ) DEFAULT CHARSET=utf8; 7 | RENAME TABLE `tb_yajpbebdke` TO `tb_nenripsjcu`; 8 | RENAME TABLE `tb_nenripsjcu` TO `tb_ocwsozgwid`; 9 | ALTER TABLE `tb_ocwsozgwid` ADD UNIQUE INDEX (`col_jerxhroyff`(28)); 10 | ALTER TABLE `tb_ocwsozgwid` ADD UNIQUE KEY (`col_jerxhroyff`(19),`col_cuctvlzqvd`); 11 | ALTER TABLE `tb_ocwsozgwid` ALTER `col_cuctvlzqvd` DROP DEFAULT; 12 | ALTER TABLE `tb_ocwsozgwid` DROP COLUMN `col_jerxhroyff`; 13 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/test_40.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_bijtvrcbjd` ( 2 | `col_wvmxgyajnm` longblob 3 | ) DEFAULT CHARSET=latin1; 4 | RENAME TABLE `tb_bijtvrcbjd` TO `tb_wiarbczkeh`; 5 | RENAME TABLE `tb_wiarbczkeh` TO `tb_imabeghgmt`; 6 | ALTER TABLE `tb_imabeghgmt` ADD UNIQUE `uk_ppyrqytsgk` (`col_wvmxgyajnm`(12)); 7 | ALTER TABLE `tb_imabeghgmt` ADD UNIQUE KEY `uk_znvsdkastd` (`col_wvmxgyajnm`(17)); 8 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/test_44.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_sgqyviwkyz` ( 2 | `col_qcgurbenzo` enum('enum_or_set_0','enum_or_set_1','enum_or_set_2') CHARACTER SET utf8mb4, 3 | UNIQUE `uk_vidzaimrjm` (`col_qcgurbenzo`) 4 | ) DEFAULT CHARSET=latin1; 5 | RENAME TABLE `tb_sgqyviwkyz` TO `tb_faqsxuetwm`; 6 | ALTER TABLE `tb_faqsxuetwm` CHARACTER SET utf8mb4; 7 | ALTER TABLE `tb_faqsxuetwm` ADD UNIQUE KEY `uk_zgssrxjpck` (`col_qcgurbenzo`); 8 | ALTER TABLE `tb_faqsxuetwm` ALTER COLUMN `col_qcgurbenzo` DROP DEFAULT; 9 | ALTER TABLE `tb_faqsxuetwm` ALTER COLUMN `col_qcgurbenzo` DROP DEFAULT; 10 | ALTER TABLE `tb_faqsxuetwm` ALTER COLUMN `col_qcgurbenzo` SET DEFAULT NULL; 11 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/test_54.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_zauuwyxibd` ( 2 | `col_rbwuihwtww` float NULL DEFAULT '1', 3 | `col_zopsszwsjh` numeric DEFAULT '1', 4 | UNIQUE `col_zopsszwsjh` (`col_zopsszwsjh`) 5 | ) DEFAULT CHARSET=utf8; 6 | RENAME TABLE `tb_zauuwyxibd` TO `tb_cdvsermcmz`; 7 | RENAME TABLE `tb_cdvsermcmz` TO `tb_fijiqnymmp`; 8 | ALTER TABLE `tb_fijiqnymmp` ADD COLUMN (`col_xxjnkwqqms` varbinary(216) DEFAULT '\0', `col_rhkizkifwy` set('enum_or_set_0','enum_or_set_1','enum_or_set_2') CHARACTER SET utf8 NULL); 9 | ALTER TABLE `tb_fijiqnymmp` CHANGE COLUMN `col_xxjnkwqqms` `col_tcroqoomon` tinyblob AFTER `col_rbwuihwtww`; 10 | ALTER TABLE `tb_fijiqnymmp` CHANGE `col_zopsszwsjh` `col_wontrujmna` year(4) DEFAULT '2019' AFTER `col_rbwuihwtww`; 11 | ALTER TABLE `tb_fijiqnymmp` DROP COLUMN `col_rhkizkifwy`; 12 | ALTER TABLE `tb_fijiqnymmp` DROP `col_wontrujmna`, DROP `col_rbwuihwtww`; 13 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/test_66.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_ijmcdmzknr` ( 2 | `col_pqnfhpfywv` datetime DEFAULT '2019-07-04 00:00:00', 3 | `col_mlpkfxnbfa` blob, 4 | UNIQUE `uk_ctetrugpen` (`col_mlpkfxnbfa`(8)), 5 | UNIQUE KEY `col_mlpkfxnbfa` (`col_mlpkfxnbfa`(23)) 6 | ) DEFAULT CHARSET=utf8; 7 | RENAME TABLE `tb_ijmcdmzknr` TO `tb_mzqlybwqbo`; 8 | RENAME TABLE `tb_mzqlybwqbo` TO `tb_gnbqbndsaw`; 9 | ALTER TABLE `tb_gnbqbndsaw` ADD (`col_gpjsqkkxse` integer unsigned NULL DEFAULT '1', `col_gmjtupvuvl` text(644744023)); 10 | ALTER TABLE `tb_gnbqbndsaw` ADD UNIQUE INDEX `uk_cbwijpiehr` (`col_pqnfhpfywv`,`col_gpjsqkkxse`); 11 | ALTER TABLE `tb_gnbqbndsaw` ADD UNIQUE (`col_mlpkfxnbfa`(18)); 12 | ALTER TABLE `tb_gnbqbndsaw` DROP `col_gpjsqkkxse`; 13 | ALTER TABLE `tb_gnbqbndsaw` DROP COLUMN `col_mlpkfxnbfa`, DROP COLUMN `col_gmjtupvuvl`; 14 | ALTER TABLE `tb_gnbqbndsaw` DROP KEY `uk_cbwijpiehr`; 15 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/test_77.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_pwgqnfglhb` ( 2 | `col_iupsnmieyl` smallint unsigned NULL, 3 | `col_gnkgsewitj` numeric DEFAULT '1', 4 | `col_cvsykxnvpf` varchar(24) CHARACTER SET utf8 NULL DEFAULT '', 5 | `col_xailqzhuwy` blob 6 | ) DEFAULT CHARSET=utf8; 7 | CREATE TABLE `tb_zhhkhdmeqy` LIKE `tb_pwgqnfglhb`; 8 | RENAME TABLE `tb_pwgqnfglhb` TO `tb_igmuoxapjx`, `tb_zhhkhdmeqy` TO `tb_wmwynbzgyg`; 9 | ALTER TABLE `tb_igmuoxapjx` DROP `col_xailqzhuwy`; 10 | ALTER TABLE `tb_igmuoxapjx` DROP COLUMN `col_gnkgsewitj`, DROP COLUMN `col_iupsnmieyl`; 11 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/alter/test_78.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_fbpivvptsa` ( 2 | `col_hbauqbdefn` datetime, 3 | UNIQUE KEY `uk_cxmeeaqnza` (`col_hbauqbdefn`) 4 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 5 | RENAME TABLE `tb_fbpivvptsa` TO `tb_rtvtzkfcfx`; 6 | RENAME TABLE `tb_rtvtzkfcfx` TO `tb_cockfzvkou`; 7 | ALTER TABLE `tb_cockfzvkou` ADD `col_unrdwzfczo` tinyblob AFTER `col_hbauqbdefn`; 8 | ALTER TABLE `tb_cockfzvkou` CHARACTER SET = utf8; 9 | ALTER TABLE `tb_cockfzvkou` ADD UNIQUE (`col_hbauqbdefn`,`col_unrdwzfczo`(7)); 10 | ALTER TABLE `tb_cockfzvkou` ADD UNIQUE (`col_hbauqbdefn`); 11 | ALTER TABLE `tb_cockfzvkou` CHANGE COLUMN `col_hbauqbdefn` `col_atkczpjiqk` set('enum_or_set_0','enum_or_set_1','enum_or_set_2') NOT NULL; 12 | ALTER TABLE `tb_cockfzvkou` DROP `col_unrdwzfczo`; 13 | ALTER TABLE `tb_cockfzvkou` DROP KEY `col_hbauqbdefn_2`; 14 | ALTER TABLE `tb_cockfzvkou` DROP INDEX `col_hbauqbdefn`; 15 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/ddl_any.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE procs_priv ( 2 | Host char(60) COLLATE utf8_bin NOT NULL DEFAULT '', 3 | Db char(64) COLLATE utf8_bin NOT NULL DEFAULT '', 4 | User char(16) COLLATE utf8_bin NOT NULL DEFAULT '', 5 | Routine_name char(64) CHARACTER SET utf8 NOT NULL DEFAULT '', 6 | Routine_type enum('FUNCTION','PROCEDURE') COLLATE utf8_bin NOT NULL, 7 | Grantor char(77) COLLATE utf8_bin NOT NULL DEFAULT '', 8 | Proc_priv set('Execute','Alter Routine','Grant') CHARACTER SET utf8 NOT NULL DEFAULT '', 9 | Timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 10 | PRIMARY KEY (Host,Db,User,Routine_name,Routine_type), 11 | KEY Grantor (Grantor) 12 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Procedure privileges' -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/ddl_test2.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE yushitai_test.card_record ( 2 | id bigint AUTO_INCREMENT, 3 | name varchar(32) DEFAULT NULL, 4 | alias varchar(32) DEFAULT NULL, 5 | INDEX index_name(name), 6 | CONSTRAINT pk_id PRIMARY KEY (id), 7 | UNIQUE uk_name (name,alias) 8 | ) AUTO_INCREMENT = 256 9 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/ddl_test3.sql: -------------------------------------------------------------------------------- 1 | create table quniya4(name varchar(255) null,value varchar(255) null,id int not null,constraint quniya4_pk primary key (id)); 2 | alter table quniya4 modify id int not null first; 3 | alter table quniya4 modify id int auto_increment; -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_10.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_cwypwdifyd` ( 2 | `col_psyexiqdcu` float DEFAULT NULL, 3 | UNIQUE KEY `uk_llrjshsrwa` (`col_psyexiqdcu`), 4 | UNIQUE KEY `col_psyexiqdcu` (`col_psyexiqdcu`) 5 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 6 | CREATE TABLE `tb_gnhiuztkhp` ( 7 | `col_mjvvyroage` longblob, 8 | `col_yivxmcooat` varbinary(155) NOT NULL, 9 | `col_zobuxurthc` date DEFAULT NULL, 10 | PRIMARY KEY (`col_yivxmcooat`(10)), 11 | UNIQUE KEY `uk_yjydpgltyk` (`col_zobuxurthc`), 12 | UNIQUE KEY `uk_ayltsdmkyj` (`col_mjvvyroage`(24)) 13 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 14 | CREATE TABLE `tb_omxdljixxx` ( 15 | `col_virtguzwuh` tinyblob 16 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 17 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_11.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/ddl/table/mysql_11.sql -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_12.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_jaaspokopu` ( 2 | `col_cbvwqvuuvo` varbinary(128) NOT NULL, 3 | `col_kvspyjtqjg` text, 4 | UNIQUE KEY `uk_rjyzqluaky` (`col_cbvwqvuuvo`(3)) 5 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 6 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_13.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_enslimtxlk` ( 2 | `col_rffhwlwajv` mediumint(89) unsigned zerofill DEFAULT NULL, 3 | `col_drmxtsfmqu` bit(22) NOT NULL DEFAULT b'0', 4 | `col_gpbdvtnnpe` bigint(20) unsigned DEFAULT '1', 5 | `col_rdqhjjgkkx` double DEFAULT '1', 6 | UNIQUE KEY `col_gpbdvtnnpe` (`col_gpbdvtnnpe`), 7 | UNIQUE KEY `col_rdqhjjgkkx` (`col_rdqhjjgkkx`) 8 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 9 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_14.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_bmbzkqioww` ( 2 | `col_cnbjbdtlzc` text, 3 | `col_oahevgiptz` tinytext 4 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 5 | CREATE TABLE `tb_dqutvqabgv` ( 6 | `col_kfazghqbis` varbinary(61) DEFAULT '\0', 7 | `col_ieyszubjeg` time DEFAULT NULL, 8 | `col_dmbvppuzgw` varbinary(167) DEFAULT NULL, 9 | `col_dmobnapptq` mediumblob, 10 | UNIQUE KEY `col_dmbvppuzgw` (`col_dmbvppuzgw`(14)) 11 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 12 | CREATE TABLE `tb_repwxdxmss` ( 13 | `col_xtrkkmfmiz` enum('enum_or_set_0','enum_or_set_1','enum_or_set_2') DEFAULT 'enum_or_set_0', 14 | `col_slqrzzopbp` decimal(10,0) NOT NULL DEFAULT '1', 15 | UNIQUE KEY `col_xtrkkmfmiz` (`col_xtrkkmfmiz`) 16 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 17 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_15.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/ddl/table/mysql_15.sql -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_16.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_sqoczkufxp` ( 2 | `col_rrdzqbksmd` set('enum_or_set_0','enum_or_set_1','enum_or_set_2') CHARACTER SET utf8mb4 DEFAULT 'enum_or_set_0', 3 | `col_spveduzoyj` mediumint(219) unsigned zerofill NOT NULL, 4 | `col_zghtsjnauz` datetime(3) DEFAULT NULL 5 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 6 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_17.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_wbrbzvpfra` ( 2 | `col_lokvnorvsp` char(235) CHARACTER SET utf8mb4 DEFAULT NULL, 3 | `col_vazlbmjjtl` char(1) DEFAULT NULL, 4 | `col_kcxzselokz` mediumint(229) unsigned NOT NULL DEFAULT '1', 5 | `col_bjiezlcrgf` set('enum_or_set_0','enum_or_set_1','enum_or_set_2') NOT NULL DEFAULT 'enum_or_set_0', 6 | PRIMARY KEY (`col_kcxzselokz`,`col_bjiezlcrgf`), 7 | UNIQUE KEY `uk_qxibrmyivk` (`col_bjiezlcrgf`), 8 | UNIQUE KEY `uk_zmxfbsrjpe` (`col_bjiezlcrgf`) 9 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 10 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_18.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_imlfgarrjv` ( 2 | `col_hbehuyqgfr` binary(1) NOT NULL, 3 | `col_pjrrinkrzz` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci, 4 | `col_dqltdiymus` tinyblob, 5 | `col_qzxbihrndq` double DEFAULT NULL, 6 | UNIQUE KEY `uk_thufyvijgg` (`col_hbehuyqgfr`,`col_dqltdiymus`(17)) 7 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 8 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_19.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_qfryzntbot` ( 2 | `col_awltnvurel` decimal(10,0) DEFAULT '1', 3 | `col_wbacbcxgvc` longblob, 4 | `col_bewighnliy` double DEFAULT '1' 5 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 6 | CREATE TABLE `tb_rjbzsfvdte` ( 7 | `col_awltnvurel` decimal(10,0) DEFAULT '1', 8 | `col_wbacbcxgvc` longblob, 9 | `col_bewighnliy` double DEFAULT '1' 10 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 11 | CREATE TABLE `tb_ruhyyyifba` ( 12 | `col_xzormknbla` int(10) unsigned NOT NULL, 13 | `col_lizstxeuhj` time(4) DEFAULT NULL, 14 | `col_kmgfxzwfbv` time(1) DEFAULT NULL, 15 | UNIQUE KEY `col_kmgfxzwfbv` (`col_kmgfxzwfbv`), 16 | UNIQUE KEY `col_kmgfxzwfbv_2` (`col_kmgfxzwfbv`) 17 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 18 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_2.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/ddl/table/mysql_2.sql -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_20.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_ljmtrrhglh` ( 2 | `col_kxypvfvmmi` longblob, 3 | `col_vjsgmnsorv` decimal(39,0) DEFAULT NULL, 4 | `col_ckrshagjle` enum('enum_or_set_0','enum_or_set_1','enum_or_set_2') DEFAULT 'enum_or_set_0' 5 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 6 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_21.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/ddl/table/mysql_21.sql -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_24.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/ddl/table/mysql_24.sql -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_25.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_mzhqjoqwim` ( 2 | `col_ryksixnuqb` float NOT NULL DEFAULT '1', 3 | `col_uvfgzqiidt` decimal(10,0) DEFAULT '1', 4 | UNIQUE KEY `uk_eipadvxxrr` (`col_uvfgzqiidt`) 5 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 6 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_26.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/ddl/table/mysql_26.sql -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_27.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/ddl/table/mysql_27.sql -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_28.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_nseikjdsdh` ( 2 | `col_ykpxfugemh` longblob, 3 | `col_xxtvhkkirw` float DEFAULT '1', 4 | UNIQUE KEY `uk_hzcjlivdvu` (`col_xxtvhkkirw`), 5 | UNIQUE KEY `col_ykpxfugemh` (`col_ykpxfugemh`(24),`col_xxtvhkkirw`) 6 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 7 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_29.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_bkldmexfby` ( 2 | `col_mprviuzmsa` mediumint(215) unsigned zerofill DEFAULT NULL, 3 | `col_wmnengkfur` decimal(6,0) NOT NULL, 4 | `col_toueuqhkhc` longtext CHARACTER SET utf8mb4, 5 | PRIMARY KEY (`col_wmnengkfur`), 6 | UNIQUE KEY `col_mprviuzmsa` (`col_mprviuzmsa`,`col_wmnengkfur`), 7 | UNIQUE KEY `symb_ytbnzrnwgs` (`col_toueuqhkhc`(31)) 8 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 9 | CREATE TABLE `tb_jmydpaxtpu` ( 10 | `col_mprviuzmsa` mediumint(215) unsigned zerofill DEFAULT NULL, 11 | `col_wmnengkfur` decimal(6,0) NOT NULL, 12 | `col_toueuqhkhc` longtext CHARACTER SET utf8mb4, 13 | PRIMARY KEY (`col_wmnengkfur`), 14 | UNIQUE KEY `col_mprviuzmsa` (`col_mprviuzmsa`,`col_wmnengkfur`), 15 | UNIQUE KEY `symb_ytbnzrnwgs` (`col_toueuqhkhc`(31)) 16 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 17 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_3.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_ctxyxxbpqn` ( 2 | `col_mpmyypobxf` longblob, 3 | `col_vdicnalzyn` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 4 | PRIMARY KEY (`col_vdicnalzyn`) 5 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 6 | CREATE TABLE `tb_uasvccezbb` ( 7 | `col_mpmyypobxf` longblob, 8 | `col_vdicnalzyn` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 9 | PRIMARY KEY (`col_vdicnalzyn`) 10 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 11 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_31.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/ddl/table/mysql_31.sql -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_32.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_arczcfjqat` ( 2 | `col_dqrslyzpwh` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci, 3 | `col_fcmimikjdw` date DEFAULT NULL, 4 | `col_wkslgjtpww` decimal(11,5) NOT NULL 5 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 6 | CREATE TABLE `tb_kgdpofrysh` ( 7 | `col_srfyjibwff` time(6) DEFAULT NULL, 8 | UNIQUE KEY `uk_sncbjfknhk` (`col_srfyjibwff`) 9 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 10 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_33.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_asbrvloeex` ( 2 | `col_weucftcgtj` decimal(17,13) DEFAULT NULL, 3 | `col_fsnwamzmnj` varchar(116) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL 4 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 5 | CREATE TABLE `tb_vjudeyawut` ( 6 | `col_geysucimbc` longtext, 7 | `col_mlphdouenl` varbinary(160) DEFAULT '\0' 8 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 9 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_34.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_vzdatmeqgj` ( 2 | `col_qvkhqmzvuj` int(224) unsigned DEFAULT NULL, 3 | `col_xdasidouyb` float DEFAULT '1', 4 | `col_iyneakkoda` time DEFAULT NULL, 5 | `col_ixrxayrkoa` varchar(178) DEFAULT '' 6 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 7 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_35.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/ddl/table/mysql_35.sql -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_37.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/ddl/table/mysql_37.sql -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_5.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/ddl/table/mysql_5.sql -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_6.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_bpukgjzglw` ( 2 | `col_sgxesfcvdh` blob, 3 | `col_tjhvpjnswu` bigint(20) unsigned DEFAULT NULL, 4 | `col_vvbowgfzum` varchar(200) DEFAULT '' 5 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 6 | CREATE TABLE `tb_chzhfzbmgu` ( 7 | `col_zqritfblef` set('enum_or_set_0','enum_or_set_1','enum_or_set_2') CHARACTER SET utf8mb4 DEFAULT NULL, 8 | `col_tvyzdewvuz` int(17) DEFAULT NULL, 9 | `col_rigzrdrdlq` decimal(31,15) DEFAULT NULL, 10 | UNIQUE KEY `uk_ckjnyzlzhn` (`col_rigzrdrdlq`) 11 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 12 | CREATE TABLE `tb_osccbhgwdn` ( 13 | `col_wuvofglkav` blob, 14 | UNIQUE KEY `col_wuvofglkav` (`col_wuvofglkav`(20)), 15 | UNIQUE KEY `col_wuvofglkav_2` (`col_wuvofglkav`(18)) 16 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 17 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_7.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_wpozpvwepq` ( 2 | `col_mhnfdjvvcl` enum('enum_or_set_0','enum_or_set_1','enum_or_set_2') DEFAULT 'enum_or_set_0', 3 | `col_nppvqejmds` mediumint(8) unsigned zerofill DEFAULT NULL, 4 | UNIQUE KEY `uk_cgzmixhhpp` (`col_mhnfdjvvcl`), 5 | UNIQUE KEY `col_mhnfdjvvcl` (`col_mhnfdjvvcl`,`col_nppvqejmds`) 6 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 7 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_8.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_qdjqayreum` ( 2 | `col_gqvgqzlgna` set('enum_or_set_0','enum_or_set_1','enum_or_set_2') DEFAULT NULL, 3 | `col_xnynymrwbx` decimal(8,1) DEFAULT NULL, 4 | UNIQUE KEY `symb_znikarajci` (`col_xnynymrwbx`) 5 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 6 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/mysql_9.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_qinfehbzem` ( 2 | `col_ginzfhyvfi` int(10) unsigned DEFAULT '1', 3 | `col_cakcnwuchg` date DEFAULT '2019-07-04', 4 | `col_hgdcocydeg` int(10) unsigned zerofill DEFAULT NULL, 5 | `col_opsrfpouaa` longblob, 6 | UNIQUE KEY `uk_tcqbsivphi` (`col_opsrfpouaa`(1)), 7 | UNIQUE KEY `col_hgdcocydeg` (`col_hgdcocydeg`,`col_opsrfpouaa`(29)) 8 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 9 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/test_11.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/ddl/table/test_11.sql -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/test_13.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_kvgymhpvjo` ( 2 | `col_rffhwlwajv` mediumint(89) unsigned zerofill NULL, 3 | `col_drmxtsfmqu` bit(22) NOT NULL DEFAULT b'0', 4 | `col_gpbdvtnnpe` bigint unsigned NULL DEFAULT '1', 5 | `col_rdqhjjgkkx` double NULL DEFAULT '1', 6 | CONSTRAINT UNIQUE INDEX `col_gpbdvtnnpe` (`col_gpbdvtnnpe`), 7 | UNIQUE `col_rdqhjjgkkx` (`col_rdqhjjgkkx`) 8 | ) DEFAULT CHARSET=latin1; 9 | RENAME TABLE `tb_kvgymhpvjo` TO `tb_uvkwdpnuqz`; 10 | RENAME TABLE `tb_uvkwdpnuqz` TO `tb_iqbazrkulq`; 11 | RENAME TABLE `tb_iqbazrkulq` TO `tb_fvvxpqziif`; 12 | RENAME TABLE `tb_fvvxpqziif` TO `tb_qlcxjbcfeq`; 13 | RENAME TABLE `tb_qlcxjbcfeq` TO `tb_tefswwijka`; 14 | RENAME TABLE `tb_tefswwijka` TO `tb_nrbrxmcrnn`; 15 | RENAME TABLE `tb_nrbrxmcrnn` TO `tb_khrmrbvepx`; 16 | RENAME TABLE `tb_khrmrbvepx` TO `tb_hwzpvdoaiu`; 17 | RENAME TABLE `tb_hwzpvdoaiu` TO `tb_enslimtxlk`; 18 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/test_15.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/ddl/table/test_15.sql -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/test_16.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_cuyjfgcqed` ( 2 | `col_rrdzqbksmd` set('enum_or_set_0','enum_or_set_1','enum_or_set_2') CHARACTER SET utf8mb4 DEFAULT 'enum_or_set_0', 3 | `col_spveduzoyj` mediumint(219) zerofill NOT NULL, 4 | `col_zghtsjnauz` datetime(3) NULL 5 | ) DEFAULT CHARSET=utf8; 6 | RENAME TABLE `tb_cuyjfgcqed` TO `tb_vtrbzichgg`; 7 | RENAME TABLE `tb_vtrbzichgg` TO `tb_tliqnbqkqf`; 8 | RENAME TABLE `tb_tliqnbqkqf` TO `tb_whudjjpowp`; 9 | RENAME TABLE `tb_whudjjpowp` TO `tb_bltssdqkjm`; 10 | RENAME TABLE `tb_bltssdqkjm` TO `tb_sqoczkufxp`; 11 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/test_18.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_xxepinenmi` ( 2 | `col_hbehuyqgfr` binary NOT NULL, 3 | `col_pjrrinkrzz` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci, 4 | `col_dqltdiymus` tinyblob, 5 | `col_qzxbihrndq` double NULL, 6 | CONSTRAINT `symb_wwzhxjsnqm` UNIQUE KEY `uk_thufyvijgg` (`col_hbehuyqgfr`,`col_dqltdiymus`(17)) 7 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 8 | RENAME TABLE `tb_xxepinenmi` TO `tb_jtlpclaghu`; 9 | RENAME TABLE `tb_jtlpclaghu` TO `tb_jnjnhatfsn`; 10 | RENAME TABLE `tb_jnjnhatfsn` TO `tb_gkwbxrpocf`; 11 | RENAME TABLE `tb_gkwbxrpocf` TO `tb_idsagxrigc`; 12 | RENAME TABLE `tb_idsagxrigc` TO `tb_simdoexxdr`; 13 | RENAME TABLE `tb_simdoexxdr` TO `tb_fzypfnuvfc`; 14 | RENAME TABLE `tb_fzypfnuvfc` TO `tb_oplfvdflnp`; 15 | RENAME TABLE `tb_oplfvdflnp` TO `tb_imlfgarrjv`; 16 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/test_2.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/ddl/table/test_2.sql -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/test_20.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_erwzhsrore` ( 2 | `col_kxypvfvmmi` longblob, 3 | `col_vjsgmnsorv` numeric(39), 4 | `col_ckrshagjle` enum('enum_or_set_0','enum_or_set_1','enum_or_set_2') CHARACTER SET latin1 DEFAULT 'enum_or_set_0' 5 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 6 | RENAME TABLE `tb_erwzhsrore` TO `tb_txcwnpmqeu`; 7 | RENAME TABLE `tb_txcwnpmqeu` TO `tb_oipniahymc`; 8 | RENAME TABLE `tb_oipniahymc` TO `tb_wuvzjubwfi`; 9 | RENAME TABLE `tb_wuvzjubwfi` TO `tb_mzejkjhdrh`; 10 | RENAME TABLE `tb_mzejkjhdrh` TO `tb_ljmtrrhglh`; 11 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/test_21.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/ddl/table/test_21.sql -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/test_24.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/ddl/table/test_24.sql -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/test_25.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_qwatgwvady` ( 2 | `col_ryksixnuqb` float NOT NULL DEFAULT '1', 3 | `col_uvfgzqiidt` decimal NULL DEFAULT '1', 4 | CONSTRAINT `symb_mayavottkb` UNIQUE `uk_eipadvxxrr` (`col_uvfgzqiidt`) 5 | ) DEFAULT CHARSET=utf8; 6 | RENAME TABLE `tb_qwatgwvady` TO `tb_psqgyghpog`; 7 | RENAME TABLE `tb_psqgyghpog` TO `tb_yswokmohrm`; 8 | RENAME TABLE `tb_yswokmohrm` TO `tb_jlrosctdeg`; 9 | RENAME TABLE `tb_jlrosctdeg` TO `tb_gbxuwplthj`; 10 | RENAME TABLE `tb_gbxuwplthj` TO `tb_yduqcvunha`; 11 | RENAME TABLE `tb_yduqcvunha` TO `tb_woqjkdejpu`; 12 | RENAME TABLE `tb_woqjkdejpu` TO `tb_mzhqjoqwim`; 13 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/test_26.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/ddl/table/test_26.sql -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/test_27.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/ddl/table/test_27.sql -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/test_28.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_wtzuiwpsao` ( 2 | `col_ykpxfugemh` longblob, 3 | `col_xxtvhkkirw` float DEFAULT '1', 4 | UNIQUE INDEX `col_ykpxfugemh` (`col_ykpxfugemh`(24),`col_xxtvhkkirw`), 5 | UNIQUE `uk_hzcjlivdvu` (`col_xxtvhkkirw`) 6 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 7 | RENAME TABLE `tb_wtzuiwpsao` TO `tb_pqgknpjjfb`; 8 | RENAME TABLE `tb_pqgknpjjfb` TO `tb_cbvdvfenvd`; 9 | RENAME TABLE `tb_cbvdvfenvd` TO `tb_nseikjdsdh`; 10 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/test_31.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/ddl/table/test_31.sql -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/test_34.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_bxhucobtnq` ( 2 | `col_qvkhqmzvuj` integer(224) unsigned, 3 | `col_xdasidouyb` float DEFAULT '1', 4 | `col_iyneakkoda` time, 5 | `col_ixrxayrkoa` varchar(178) CHARACTER SET latin1 DEFAULT '' 6 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 7 | RENAME TABLE `tb_bxhucobtnq` TO `tb_clodifiabp`; 8 | RENAME TABLE `tb_clodifiabp` TO `tb_wayqdiylsz`; 9 | RENAME TABLE `tb_wayqdiylsz` TO `tb_ynqbidrqhc`; 10 | RENAME TABLE `tb_ynqbidrqhc` TO `tb_psqlnlifkt`; 11 | RENAME TABLE `tb_psqlnlifkt` TO `tb_vzdatmeqgj`; 12 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/test_35.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/ddl/table/test_35.sql -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/test_37.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/ddl/table/test_37.sql -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/test_5.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saigu/JavaKnowledgeGraph/2697fe2f103fa82c22440202a1182038a33480a4/code_reading/canal/parse/src/test/resources/ddl/table/test_5.sql -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/test_7.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_haqeeunokj` ( 2 | `col_mhnfdjvvcl` enum('enum_or_set_0','enum_or_set_1','enum_or_set_2') CHARACTER SET utf8 DEFAULT 'enum_or_set_0', 3 | `col_nppvqejmds` mediumint unsigned zerofill, 4 | UNIQUE KEY `uk_cgzmixhhpp` (`col_mhnfdjvvcl`), 5 | CONSTRAINT UNIQUE `col_mhnfdjvvcl` (`col_mhnfdjvvcl`,`col_nppvqejmds`) 6 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 7 | RENAME TABLE `tb_haqeeunokj` TO `tb_hbefpxwqdj`; 8 | RENAME TABLE `tb_hbefpxwqdj` TO `tb_rbbroruegc`; 9 | RENAME TABLE `tb_rbbroruegc` TO `tb_ahqzqmqdua`; 10 | RENAME TABLE `tb_ahqzqmqdua` TO `tb_qsdgrixxxx`; 11 | RENAME TABLE `tb_qsdgrixxxx` TO `tb_bziawjhizf`; 12 | RENAME TABLE `tb_bziawjhizf` TO `tb_lfcttoxkbw`; 13 | RENAME TABLE `tb_lfcttoxkbw` TO `tb_ivkxkxjrie`; 14 | RENAME TABLE `tb_ivkxkxjrie` TO `tb_wpozpvwepq`; 15 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/ddl/table/test_8.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `tb_ivyeuqyiae` ( 2 | `col_gqvgqzlgna` set('enum_or_set_0','enum_or_set_1','enum_or_set_2') CHARACTER SET latin1 NULL, 3 | `col_xnynymrwbx` numeric(8,1), 4 | CONSTRAINT `symb_znikarajci` UNIQUE KEY (`col_xnynymrwbx`) 5 | ) DEFAULT CHARSET=latin1; 6 | RENAME TABLE `tb_ivyeuqyiae` TO `tb_dzwzhhcyis`; 7 | RENAME TABLE `tb_dzwzhhcyis` TO `tb_kekmokzyfi`; 8 | RENAME TABLE `tb_kekmokzyfi` TO `tb_ebwxswnaxz`; 9 | RENAME TABLE `tb_ebwxswnaxz` TO `tb_qdjqayreum`; 10 | -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/dummy.txt: -------------------------------------------------------------------------------- 1 | 本文件仅仅为定位绝对路径使用 -------------------------------------------------------------------------------- /code_reading/canal/parse/src/test/resources/tsdb/sql-map/sqlmap-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /code_reading/canal/prometheus/src/main/java/com/alibaba/otter/canal/prometheus/InstanceRegistry.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.prometheus; 2 | 3 | import com.alibaba.otter.canal.instance.core.CanalInstance; 4 | 5 | /** 6 | * @author Chuanyi Li 7 | */ 8 | public interface InstanceRegistry { 9 | 10 | void register(CanalInstance instance); 11 | 12 | void unregister(CanalInstance instance); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /code_reading/canal/prometheus/src/main/java/com/alibaba/otter/canal/prometheus/PrometheusProvider.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.prometheus; 2 | 3 | import com.alibaba.otter.canal.spi.CanalMetricsProvider; 4 | import com.alibaba.otter.canal.spi.CanalMetricsService; 5 | 6 | /** 7 | * @author Chuanyi Li 8 | */ 9 | public class PrometheusProvider implements CanalMetricsProvider { 10 | 11 | @Override 12 | public CanalMetricsService getService() { 13 | return PrometheusService.getInstance(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /code_reading/canal/prometheus/src/main/resources/META-INF/services/com.alibaba.otter.canal.spi.CanalMetricsProvider: -------------------------------------------------------------------------------- 1 | com.alibaba.otter.canal.prometheus.PrometheusProvider 2 | -------------------------------------------------------------------------------- /code_reading/canal/protocol/src/main/java/com/alibaba/otter/canal/protocol/position/Position.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.protocol.position; 2 | 3 | import java.io.Serializable; 4 | 5 | import org.apache.commons.lang.builder.ToStringBuilder; 6 | 7 | import com.alibaba.otter.canal.common.utils.CanalToStringStyle; 8 | 9 | /** 10 | * 事件唯一标示 11 | */ 12 | public abstract class Position implements Serializable { 13 | 14 | private static final long serialVersionUID = 2332798099928474975L; 15 | 16 | public String toString() { 17 | return ToStringBuilder.reflectionToString(this, CanalToStringStyle.DEFAULT_STYLE); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /code_reading/canal/server/src/main/java/com/alibaba/otter/canal/server/CanalServer.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.server; 2 | 3 | import com.alibaba.otter.canal.common.CanalLifeCycle; 4 | import com.alibaba.otter.canal.server.exception.CanalServerException; 5 | 6 | /** 7 | * 对应canal整个服务实例,一个jvm实例只有一份server 8 | * 9 | * @author jianghang 2012-7-12 下午01:32:29 10 | * @version 1.0.0 11 | */ 12 | public interface CanalServer extends CanalLifeCycle { 13 | 14 | void start() throws CanalServerException; 15 | 16 | void stop() throws CanalServerException; 17 | } 18 | -------------------------------------------------------------------------------- /code_reading/canal/server/src/main/java/com/alibaba/otter/canal/server/CanalServerStarter.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.server; 2 | 3 | /** 4 | * 外部服务如Kafka, RocketMQ启动接口 5 | * 6 | * @author machengyuan 2018-8-23 下午05:20:29 7 | * @version 1.0.0 8 | */ 9 | public interface CanalServerStarter { 10 | 11 | void init(); 12 | } 13 | -------------------------------------------------------------------------------- /code_reading/canal/server/src/main/java/com/alibaba/otter/canal/server/netty/ClientInstanceProfiler.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.server.netty; 2 | 3 | import com.alibaba.otter.canal.common.CanalLifeCycle; 4 | import com.alibaba.otter.canal.server.netty.listener.ChannelFutureAggregator.ClientRequestResult; 5 | 6 | /** 7 | * @author Chuanyi Li 8 | */ 9 | public interface ClientInstanceProfiler extends CanalLifeCycle { 10 | 11 | void profiling(ClientRequestResult result); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /code_reading/canal/server/src/main/java/com/alibaba/otter/canal/spi/CanalMetricsProvider.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.spi; 2 | 3 | /** 4 | * Use java service provider mechanism to provide {@link CanalMetricsService}. 5 | *
 6 |  * Example:
 7 |  * {@code
 8 |  *     ServiceLoader providers = ServiceLoader.load(CanalMetricsProvider.class);
 9 |  *     List list = new ArrayList();
10 |  *     for (CanalMetricsProvider provider : providers) {
11 |  *         list.add(provider);
12 |  *     }
13 |  * }
14 |  * 
15 | * @author Chuanyi Li 16 | */ 17 | public interface CanalMetricsProvider { 18 | 19 | /** 20 | * @return Impl of {@link CanalMetricsService} 21 | */ 22 | CanalMetricsService getService(); 23 | 24 | } 25 | -------------------------------------------------------------------------------- /code_reading/canal/server/src/test/java/com/alibaba/otter/canal/server/SecurityUtilTest.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.server; 2 | 3 | import java.security.NoSuchAlgorithmException; 4 | 5 | import org.junit.Assert; 6 | import org.junit.Test; 7 | 8 | import com.alibaba.otter.canal.protocol.SecurityUtil; 9 | 10 | public class SecurityUtilTest { 11 | 12 | @Test 13 | public void testSimple() throws NoSuchAlgorithmException { 14 | byte[] seed = { 1, 2, 3, 4, 5, 6, 7, 8 }; 15 | // String str = "e3619321c1a937c46a0d8bd1dac39f93b27d4458"; // canal 16 | // passwd 17 | String str = SecurityUtil.scrambleGenPass("canal".getBytes()); 18 | byte[] client = SecurityUtil.scramble411("canal".getBytes(), seed); 19 | boolean check = SecurityUtil.scrambleServerAuth(client, SecurityUtil.hexStr2Bytes(str), seed); 20 | Assert.assertTrue(check); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /code_reading/canal/sink/src/main/java/com/alibaba/otter/canal/sink/AbstractCanalEventDownStreamHandler.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.sink; 2 | 3 | import com.alibaba.otter.canal.common.AbstractCanalLifeCycle; 4 | 5 | /** 6 | * 默认的实现 7 | * 8 | * @author jianghang 2013-10-8 下午8:35:29 9 | * @since 1.0.12 10 | */ 11 | public class AbstractCanalEventDownStreamHandler extends AbstractCanalLifeCycle implements CanalEventDownStreamHandler { 12 | 13 | public T before(T events) { 14 | return events; 15 | } 16 | 17 | public T retry(T events) { 18 | return events; 19 | } 20 | 21 | public T after(T events) { 22 | return events; 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /code_reading/canal/sink/src/main/java/com/alibaba/otter/canal/sink/CanalEventDownStreamHandler.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.sink; 2 | 3 | import com.alibaba.otter.canal.common.CanalLifeCycle; 4 | 5 | /** 6 | * 处理下sink时的数据流 7 | * 8 | * @author jianghang 2012-7-31 下午03:06:26 9 | * @version 1.0.0 10 | */ 11 | public interface CanalEventDownStreamHandler extends CanalLifeCycle { 12 | 13 | /** 14 | * 提交到store之前做一下处理,允许替换Event 15 | */ 16 | public T before(T events); 17 | 18 | /** 19 | * store处于full后,retry时处理做一下处理 20 | */ 21 | public T retry(T events); 22 | 23 | /** 24 | * 提交store成功后做一下处理 25 | */ 26 | public T after(T events); 27 | } 28 | -------------------------------------------------------------------------------- /code_reading/canal/store/src/main/java/com/alibaba/otter/canal/store/CanalGroupEventStore.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.store; 2 | 3 | /** 4 | * 提供给上层统一的 store 视图,内部则支持多种store混合,并且维持着多个store供上层进行路由 5 | * 6 | * @author zebin.xuzb 2012-10-30 下午12:17:26 7 | * @since 1.0.0 8 | */ 9 | public interface CanalGroupEventStore extends CanalEventStore { 10 | 11 | void addStoreInfo(StoreInfo info); 12 | } 13 | -------------------------------------------------------------------------------- /code_reading/canal/store/src/main/java/com/alibaba/otter/canal/store/CanalStoreConstants.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.store; 2 | 3 | /** 4 | * 常量值 5 | * 6 | * @author jianghang 2012-6-14 下午09:40:33 7 | * @version 1.0.0 8 | */ 9 | public interface CanalStoreConstants { 10 | 11 | public static final String CODE_POSITION_NOT_FOUND = "position:%s not found"; 12 | 13 | public static final String CODE_POSITION_NOT_IN_ORDER = "position:%s not in order"; 14 | 15 | public static final String ENCODING = "utf8"; 16 | 17 | public static final int MAX_STORECOUNT = 100; 18 | 19 | public static final int ROLLOVERCOUNT = 100; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /code_reading/canal/store/src/main/java/com/alibaba/otter/canal/store/CanalStoreScavenge.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.store; 2 | 3 | import com.alibaba.otter.canal.protocol.position.Position; 4 | 5 | /** 6 | * store空间回收机制,信息采集以及控制何时调用{@linkplain CanalEventStore}.cleanUtil()接口 7 | * 8 | * @author jianghang 2012-8-8 上午11:57:42 9 | * @version 1.0.0 10 | */ 11 | public interface CanalStoreScavenge { 12 | 13 | /** 14 | * 清理position之前的数据 15 | */ 16 | void cleanUntil(Position position) throws CanalStoreException; 17 | 18 | /** 19 | * 删除所有的数据 20 | */ 21 | void cleanAll() throws CanalStoreException; 22 | } 23 | -------------------------------------------------------------------------------- /code_reading/canal/store/src/main/java/com/alibaba/otter/canal/store/StoreInfo.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.store; 2 | 3 | /** 4 | * @author zebin.xuzb 2012-10-30 下午1:05:13 5 | * @since 1.0.0 6 | */ 7 | public class StoreInfo { 8 | 9 | private String storeName; 10 | private String filter; 11 | 12 | public String getStoreName() { 13 | return storeName; 14 | } 15 | 16 | public String getFilter() { 17 | return filter; 18 | } 19 | 20 | public void setStoreName(String storeName) { 21 | this.storeName = storeName; 22 | } 23 | 24 | public void setFilter(String filter) { 25 | this.filter = filter; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /code_reading/canal/store/src/main/java/com/alibaba/otter/canal/store/model/BatchMode.java: -------------------------------------------------------------------------------- 1 | package com.alibaba.otter.canal.store.model; 2 | 3 | /** 4 | * 批处理模式 5 | * 6 | * @author jianghang 2013-3-18 上午11:51:15 7 | * @version 1.0.3 8 | */ 9 | public enum BatchMode { 10 | 11 | /** 对象数量 */ 12 | ITEMSIZE, 13 | 14 | /** 内存大小 */ 15 | MEMSIZE; 16 | 17 | public boolean isItemSize() { 18 | return this == BatchMode.ITEMSIZE; 19 | } 20 | 21 | public boolean isMemSize() { 22 | return this == BatchMode.MEMSIZE; 23 | } 24 | } 25 | --------------------------------------------------------------------------------