mirror of
https://github.com/alibaba/canal.git
synced 2026-11-04 00:30:15 +08:00
add sql parser testcase
This commit is contained in:
@@ -1,29 +1,76 @@
|
||||
package com.alibaba.otter.canal.parse.inbound.mysql.tsdb;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.alibaba.druid.sql.repository.SchemaObject;
|
||||
import com.alibaba.druid.sql.repository.SchemaRepository;
|
||||
import com.alibaba.druid.util.JdbcConstants;
|
||||
|
||||
/**
|
||||
* @author agapple 2018年6月7日 下午5:36:13
|
||||
* @since 3.1.9
|
||||
*/
|
||||
public class FastsqlSchemaTest {
|
||||
|
||||
@Test
|
||||
public void testSimple() throws FileNotFoundException, IOException {
|
||||
public void testSimple() throws Throwable {
|
||||
SchemaRepository repository = new SchemaRepository(JdbcConstants.MYSQL);
|
||||
String sql = "create table quniya4(name varchar(255) null,value varchar(255) null,id int not null,constraint quniya4_pk primary key (id));"
|
||||
+ "alter table quniya4 modify id int not null first;";
|
||||
repository.console(sql);
|
||||
|
||||
String sql1 = "CREATE TABLE `table_x1` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, "
|
||||
+ "`key1` longtext NOT NULL COMMENT 'key1', `value1` longtext NOT NULL COMMENT 'value1', PRIMARY KEY (`id`) )"
|
||||
+ "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4";
|
||||
String sql2 = " CREATE TABLE IF NOT EXISTS `table_x1` ( `id` bigint(20) NOT NULL AUTO_INCREMENT,"
|
||||
+ "`key1` longtext NOT NULL COMMENT 'key1',PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4";
|
||||
repository.console(sql1);
|
||||
repository.console(sql2);
|
||||
repository.setDefaultSchema("test");
|
||||
SchemaObject table = repository.findTable("quniya4");
|
||||
System.out.println(table.getStatement().toString());
|
||||
SchemaObject table = repository.findTable("table_x1");
|
||||
Assert.assertTrue(table.findColumn("value1") != null);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_block_format() throws Throwable {
|
||||
SchemaRepository repository = new SchemaRepository(JdbcConstants.MYSQL);
|
||||
String sql = " CREATE TABLE `parent` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,"
|
||||
+ "`created_at` timestamp NULL DEFAULT NULL, " + "PRIMARY KEY (`id`)"
|
||||
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 BLOCK_FORMAT=ENCRYPTED";
|
||||
repository.console(sql);
|
||||
repository.setDefaultSchema("test");
|
||||
SchemaObject table = repository.findTable("parent");
|
||||
Assert.assertTrue(table.findColumn("id") != null);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_json_index() throws Throwable {
|
||||
SchemaRepository repository = new SchemaRepository(JdbcConstants.MYSQL);
|
||||
String sql = " CREATE TABLE `articles` ( `article_id` bigint NOT NULL AUTO_INCREMENT,"
|
||||
+ " `tags` json DEFAULT NULL, PRIMARY KEY (`article_id`),"
|
||||
+ " KEY `articles_tags` ((cast(json_extract(`tags`,_utf8mb4'$[*]') as char(40) array)))"
|
||||
+ ") ENGINE=InnoDB AUTO_INCREMENT=1054 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci";
|
||||
repository.console(sql);
|
||||
repository.setDefaultSchema("test");
|
||||
SchemaObject table = repository.findTable("articles");
|
||||
Assert.assertTrue(table.findColumn("article_id") != null);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_invisible() throws Throwable {
|
||||
SchemaRepository repository = new SchemaRepository(JdbcConstants.MYSQL);
|
||||
String sql = " CREATE TABLE `proposal_order_info` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,"
|
||||
+ "`created_at` timestamp NULL DEFAULT NULL, " + "PRIMARY KEY (`id`) , "
|
||||
+ "KEY `idx_create_time` (`created_at`) /*!80000 INVISIBLE */"
|
||||
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 BLOCK_FORMAT=ENCRYPTED";
|
||||
repository.console(sql);
|
||||
repository.setDefaultSchema("test");
|
||||
SchemaObject table = repository.findTable("proposal_order_info");
|
||||
Assert.assertTrue(table.findColumn("id") != null);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_persistent() throws Throwable {
|
||||
SchemaRepository repository = new SchemaRepository(JdbcConstants.MYSQL);
|
||||
String sql = " create table example_vc_tbl( c1 int not null auto_increment primary key,"
|
||||
+ "c2 varchar(70), vc1 int as (length(c2)) virtual,"
|
||||
+ "DIM_SUM varchar(128) AS (MD5(UPPER(CONCAT(c2, c1)))) PERSISTENT)";
|
||||
repository.console(sql);
|
||||
repository.setDefaultSchema("test");
|
||||
SchemaObject table = repository.findTable("proposal_order_info");
|
||||
Assert.assertTrue(table.findColumn("id") != null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,7 +78,27 @@ public class MemoryTableMeta_DDL_Test {
|
||||
File create = new File(dummyFile.getParent() + "/ddl", "ddl_any.sql");
|
||||
String sql = StringUtils.join(IOUtils.readLines(new FileInputStream(create)), "\n");
|
||||
memoryTableMeta.apply(null, "test", sql, null);
|
||||
|
||||
|
||||
List<String> tableNames = Lists.newArrayList();
|
||||
for (Schema schema : memoryTableMeta.getRepository().getSchemas()) {
|
||||
tableNames.addAll(schema.showTables());
|
||||
}
|
||||
|
||||
for (String table : tableNames) {
|
||||
TableMeta sourceMeta = memoryTableMeta.find("test", table);
|
||||
System.out.println(sourceMeta.toString());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_create_if_not_exist() throws Throwable {
|
||||
MemoryTableMeta memoryTableMeta = new MemoryTableMeta();
|
||||
URL url = Thread.currentThread().getContextClassLoader().getResource("dummy.txt");
|
||||
File dummyFile = new File(url.getFile());
|
||||
File create = new File(dummyFile.getParent() + "/ddl", "ddl_create_if_not_exist.sql");
|
||||
String sql = StringUtils.join(IOUtils.readLines(new FileInputStream(create)), "\n");
|
||||
memoryTableMeta.apply(null, "test", sql, null);
|
||||
|
||||
List<String> tableNames = Lists.newArrayList();
|
||||
for (Schema schema : memoryTableMeta.getRepository().getSchemas()) {
|
||||
tableNames.addAll(schema.showTables());
|
||||
|
||||
@@ -9,6 +9,7 @@ import org.springframework.util.Assert;
|
||||
* @since 1.0.25
|
||||
*/
|
||||
public class TableMetaManagerBuilderTest {
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testSimple() {
|
||||
|
||||
12
parse/src/test/resources/ddl/ddl_create_if_not_exist.sql
Normal file
12
parse/src/test/resources/ddl/ddl_create_if_not_exist.sql
Normal file
@@ -0,0 +1,12 @@
|
||||
CREATE TABLE `table_x1` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`key1` longtext NOT NULL COMMENT 'key1',
|
||||
`value1` longtext NOT NULL COMMENT 'value1',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `table_x1` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`key1` longtext NOT NULL COMMENT 'key1',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
Reference in New Issue
Block a user