|
3 | 3 | import org.junit.Assert; |
4 | 4 | import org.junit.Test; |
5 | 5 |
|
| 6 | +import com.alibaba.druid.DbType; |
| 7 | +import com.alibaba.druid.sql.SQLUtils; |
| 8 | +import com.alibaba.druid.sql.repository.Schema; |
6 | 9 | import com.alibaba.druid.sql.repository.SchemaObject; |
7 | 10 | import com.alibaba.druid.sql.repository.SchemaRepository; |
| 11 | +import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor; |
| 12 | +import com.alibaba.druid.sql.visitor.VisitorFeature; |
8 | 13 | import com.alibaba.druid.util.JdbcConstants; |
9 | 14 |
|
10 | 15 | public class FastsqlSchemaTest { |
@@ -184,5 +189,80 @@ public void test_polardb_x() throws Throwable { |
184 | 189 | repository.console(sql4); |
185 | 190 | table = repository.findTable("test4"); |
186 | 191 | Assert.assertTrue(table != null); |
| 192 | + |
| 193 | + String sql5 = "CREATE TABLE `test5` (\n" + "\t`Id` varchar(32) NOT NULL COMMENT '',\n" |
| 194 | + + "\t`ExitId` varchar(32) NOT NULL COMMENT '',\n" |
| 195 | + + "\t`CreateTime` datetime NOT NULL COMMENT '创建时间',\n" |
| 196 | + + "\t`archive_date` datetime NOT NULL DEFAULT '2099-01-01 00:00:00',\n" |
| 197 | + + "\tPRIMARY KEY (`Id`, `archive_date`),\n" |
| 198 | + + "\tGLOBAL INDEX `g_i_id` (`id`) COVERING (`ExitId`) \n" + "\t\tPARTITION BY KEY(`Id`)\n" |
| 199 | + + "\t\tPARTITIONS 16,\n" + "\tKEY `ExitId` USING BTREE (`ExitId`),\n" |
| 200 | + + "\tKEY `CreateTime` (`CreateTime`),\n" + "\tKEY `i_id_ExitId` USING BTREE (`Id`, `ExitId`),\n" |
| 201 | + + "\tKEY `auto_shard_key_ExitId_id` USING BTREE (`ExitId`, `Id`)\n" |
| 202 | + + ") ENGINE = InnoDB DEFAULT CHARSET = utf8\n" + "PARTITION BY KEY(`ExitId`,`Id`)\n" |
| 203 | + + "PARTITIONS 16\n" + "LOCAL PARTITION BY RANGE (archive_date)\n" + "INTERVAL 1 MONTH\n" |
| 204 | + + "EXPIRE AFTER 27\n" + "PRE ALLOCATE 2\n" + "PIVOTDATE NOW()"; |
| 205 | + repository.console(sql5); |
| 206 | + table = repository.findTable("test5"); |
| 207 | + Assert.assertTrue(table != null); |
187 | 208 | } |
| 209 | + |
| 210 | + @Test |
| 211 | + public void test_escapse_sql() { |
| 212 | + SchemaRepository repository = new SchemaRepository(JdbcConstants.MYSQL); |
| 213 | + repository.setDefaultSchema("test"); |
| 214 | + String sql = "CREATE TABLE test1 (\n" + "\tid int(11) NOT NULL AUTO_INCREMENT,\n" |
| 215 | + + "\tcluster_id int(11) NOT NULL COMMENT '集群id',\n" |
| 216 | + + "\tcomponent_id int(11) NOT NULL COMMENT '组件id',\n" |
| 217 | + + "\tcomponent_type_code tinyint(1) NOT NULL COMMENT '组件类型',\n" |
| 218 | + + "\ttype varchar(128) COLLATE utf8_bin NOT NULL COMMENT '配置类型',\n" |
| 219 | + + "\trequired tinyint(1) NOT NULL COMMENT 'true/false',\n" |
| 220 | + + "\t`key` varchar(256) COLLATE utf8_bin NOT NULL COMMENT '配置键',\n" |
| 221 | + + "\t`value` text COLLATE utf8_bin COMMENT '默认配置项',\n" |
| 222 | + + "\t`values` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '可配置项',\n" |
| 223 | + + "\tdependencyKey varchar(256) COLLATE utf8_bin DEFAULT NULL COMMENT '依赖键',\n" |
| 224 | + + "\tdependencyValue varchar(256) COLLATE utf8_bin DEFAULT NULL COMMENT '依赖值',\n" |
| 225 | + + "\t`desc` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '描述',\n" |
| 226 | + + "\tgmt_create datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n" |
| 227 | + + "\tgmt_modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',\n" |
| 228 | + + "\tis_deleted tinyint(1) NOT NULL DEFAULT '0' COMMENT '0正常 1逻辑删除',\n" + "\tPRIMARY KEY (id),\n" |
| 229 | + + "\tKEY index_cluster_id (cluster_id),\n" + "\tKEY index_componentId (component_id)\n" |
| 230 | + + ") ENGINE = InnoDB AUTO_INCREMENT = 1140 CHARSET = utf8 COLLATE = utf8_bin;"; |
| 231 | + repository.console(sql); |
| 232 | + SchemaObject table = repository.findTable("test1"); |
| 233 | + Assert.assertTrue(table != null); |
| 234 | + // 应用到新的schema |
| 235 | + Schema schema = repository.findSchema("test"); |
| 236 | + StringBuilder data = new StringBuilder(4 * 1024); |
| 237 | + for (String tableIn : schema.showTables()) { |
| 238 | + SchemaObject schemaObject = schema.findTable(tableIn); |
| 239 | + |
| 240 | + SQLASTOutputVisitor visitor = SQLUtils.createOutputVisitor(data, DbType.mysql); |
| 241 | + visitor.config(VisitorFeature.OutputNameQuote, true); |
| 242 | + |
| 243 | + schemaObject.getStatement().accept(visitor); |
| 244 | + data.append("; \n"); |
| 245 | + } |
| 246 | + |
| 247 | + repository.setDefaultSchema("test_new"); |
| 248 | + repository.console(data.toString()); |
| 249 | + table = repository.findTable("test1"); |
| 250 | + Assert.assertTrue(table != null); |
| 251 | + |
| 252 | + // 打印新的schema的内容 |
| 253 | + schema = repository.findSchema("test_new"); |
| 254 | + data = new StringBuilder(4 * 1024); |
| 255 | + for (String tableIn : schema.showTables()) { |
| 256 | + SchemaObject schemaObject = schema.findTable(tableIn); |
| 257 | + |
| 258 | + SQLASTOutputVisitor visitor = SQLUtils.createOutputVisitor(data, DbType.mysql); |
| 259 | + visitor.config(VisitorFeature.OutputNameQuote, true); |
| 260 | + |
| 261 | + schemaObject.getStatement().accept(visitor); |
| 262 | + data.append("; \n"); |
| 263 | + } |
| 264 | + |
| 265 | + System.out.println(data.toString()); |
| 266 | + } |
| 267 | + |
188 | 268 | } |
0 commit comments