提交 20e4b304 authored 作者: 宋勇's avatar 宋勇

修改表字段内容

上级 d542c81e
...@@ -114,8 +114,8 @@ public class MysqlJdbcDataSourceChannel implements DataSourceChannelExt { ...@@ -114,8 +114,8 @@ public class MysqlJdbcDataSourceChannel implements DataSourceChannelExt {
String primaryKey = getPrimaryKey(metaData, database, table); String primaryKey = getPrimaryKey(metaData, database, table);
String sql = String sql =
"SELECT * FROM information_schema.COLUMNS" "SELECT * FROM information_schema.COLUMNS "
+ "WHERE " + " WHERE "
+ "TABLE_NAME = '" + "TABLE_NAME = '"
+ table + table
+ "' and TABLE_SCHEMA='" + "' and TABLE_SCHEMA='"
...@@ -141,7 +141,7 @@ public class MysqlJdbcDataSourceChannel implements DataSourceChannelExt { ...@@ -141,7 +141,7 @@ public class MysqlJdbcDataSourceChannel implements DataSourceChannelExt {
} }
tableField.setName(columnName); tableField.setName(columnName);
tableField.setComment(resultSet.getString("REMARKS")); tableField.setComment(resultSet.getString("COLUMN_COMMENT"));
Object nullable = resultSet.getObject("IS_NULLABLE"); Object nullable = resultSet.getObject("IS_NULLABLE");
tableField.setNullable(Boolean.TRUE.toString().equals(nullable.toString())); tableField.setNullable(Boolean.TRUE.toString().equals(nullable.toString()));
tableFields.add(tableField); tableFields.add(tableField);
......
...@@ -112,27 +112,27 @@ public class OracleDataSourceChannel implements DataSourceChannelExt { ...@@ -112,27 +112,27 @@ public class OracleDataSourceChannel implements DataSourceChannelExt {
String primaryKey = getPrimaryKey(metaData, database, table); String primaryKey = getPrimaryKey(metaData, database, table);
String sql = String sql =
"SELECT\n" "SELECT "
+ "\tt.TABLE_NAME,\n" + " t.TABLE_NAME,\n"
+ "\tt.COLUMN_NAME,\n" + " t.COLUMN_NAME,\n"
+ "\tt.COMMENTS,\n" + " t.COMMENTS,\n"
+ "\tt1.DATA_TYPE,\n" + " t1.DATA_TYPE,\n"
+ "\tt1.DATA_LENGTH VAR_LEN,\n" + " t1.DATA_LENGTH VAR_LEN,\n"
+ "\tt1.DATA_PRECISION LEN,\n" + " t1.DATA_PRECISION LEN,\n"
+ "\tDATA_SCALE ,\n" + " DATA_SCALE ,\n"
+ "\tCASE NULLABLE\n" + " CASE NULLABLE\n"
+ "\tWHEN 'N' THEN\n" + " WHEN 'N' THEN\n"
+ "\t\t'true'\n" + " 'true'\n"
+ "\tELSE\n" + " ELSE\n"
+ "\t\t'false'\n" + " 'false'\n"
+ "END IS_NULLABLE\n" + "END IS_NULLABLE\n"
+ "\n" + "\n"
+ "FROM\n" + "FROM\n"
+ "\tall_col_comments t\n" + " all_col_comments t\n"
+ "\tINNER JOIN all_tab_cols t1 ON t1.TABLE_NAME = t.table_name \n" + " INNER JOIN all_tab_cols t1 ON t1.TABLE_NAME = t.table_name \n"
+ "\tAND t1.COLUMN_NAME = t.column_name \n" + " AND t1.COLUMN_NAME = t.column_name \n"
+ "WHERE " + " WHERE "
+ "\tt.table_name = '" + " t.table_name = '"
+ table + table
+ "' and t.OWNER='" + "' and t.OWNER='"
+ database + database
......
...@@ -112,28 +112,38 @@ public class TidbJdbcDataSourceChannel implements DataSourceChannelExt { ...@@ -112,28 +112,38 @@ public class TidbJdbcDataSourceChannel implements DataSourceChannelExt {
try (Connection connection = getConnection(requestParams, database)) { try (Connection connection = getConnection(requestParams, database)) {
DatabaseMetaData metaData = connection.getMetaData(); DatabaseMetaData metaData = connection.getMetaData();
String primaryKey = getPrimaryKey(metaData, database, table); String primaryKey = getPrimaryKey(metaData, database, table);
try (ResultSet resultSet = metaData.getColumns(database, null, table, null)) {
while (resultSet.next()) { String sql =
TableField tableField = new TableField(); "SELECT * FROM information_schema.COLUMNS "
String columnName = resultSet.getString("COLUMN_NAME"); + " WHERE "
tableField.setPrimaryKey(false); + "TABLE_NAME = '"
if (StringUtils.isNotBlank(primaryKey) && primaryKey.equals(columnName)) { + table
tableField.setPrimaryKey(true); + "' and TABLE_SCHEMA='"
} + database
tableField.setType(resultSet.getString("TYPE_NAME")); + "'";
if (typeList.contains(tableField.getType().toLowerCase())) { Statement statement = connection.createStatement();
tableField.setLen(resultSet.getString("CHARACTER_MAXIMUM_LENGTH")); ResultSet resultSet = statement.executeQuery(sql);
} else { while (resultSet.next()) {
tableField.setLen(resultSet.getString("NUMERIC_PRECISION")); TableField tableField = new TableField();
tableField.setScale(resultSet.getString("NUMERIC_SCALE")); String columnName = resultSet.getString("COLUMN_NAME");
} tableField.setPrimaryKey(false);
tableField.setName(columnName); if (StringUtils.isNotBlank(primaryKey) && primaryKey.equals(columnName)) {
tableField.setComment(resultSet.getString("REMARKS")); tableField.setPrimaryKey(true);
Object nullable = resultSet.getObject("IS_NULLABLE");
tableField.setNullable(Boolean.TRUE.toString().equals(nullable.toString()));
tableFields.add(tableField);
} }
tableField.setType(resultSet.getString("TYPE_NAME"));
if (typeList.contains(tableField.getType().toLowerCase())) {
tableField.setLen(resultSet.getString("CHARACTER_MAXIMUM_LENGTH"));
} else {
tableField.setLen(resultSet.getString("NUMERIC_PRECISION"));
tableField.setScale(resultSet.getString("NUMERIC_SCALE"));
}
tableField.setName(columnName);
tableField.setComment(resultSet.getString("COLUMN_COMMENT"));
Object nullable = resultSet.getObject("IS_NULLABLE");
tableField.setNullable(Boolean.TRUE.toString().equals(nullable.toString()));
tableFields.add(tableField);
} }
} catch (ClassNotFoundException | SQLException e) { } catch (ClassNotFoundException | SQLException e) {
throw new DataSourcePluginException("get table fields failed", e); throw new DataSourcePluginException("get table fields failed", e);
} }
......
...@@ -28,14 +28,10 @@ import com.google.common.collect.Sets; ...@@ -28,14 +28,10 @@ import com.google.common.collect.Sets;
import lombok.NonNull; import lombok.NonNull;
import java.sql.*; import java.sql.*;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class MysqlCDCDataSourceChannel implements DataSourceChannelExt { public class MysqlCDCDataSourceChannel implements DataSourceChannelExt {
List<String> typeList = Arrays.asList("varchar", "char", "json");
public static final Set<String> MYSQL_SYSTEM_DATABASES = public static final Set<String> MYSQL_SYSTEM_DATABASES =
Sets.newHashSet("information_schema", "mysql", "performance_schema", "sys"); Sets.newHashSet("information_schema", "mysql", "performance_schema", "sys");
...@@ -198,7 +194,17 @@ public class MysqlCDCDataSourceChannel implements DataSourceChannelExt { ...@@ -198,7 +194,17 @@ public class MysqlCDCDataSourceChannel implements DataSourceChannelExt {
try (Connection connection = init(requestParams); ) { try (Connection connection = init(requestParams); ) {
DatabaseMetaData metaData = connection.getMetaData(); DatabaseMetaData metaData = connection.getMetaData();
String primaryKey = getPrimaryKey(metaData, dbName, tableName); String primaryKey = getPrimaryKey(metaData, dbName, tableName);
ResultSet resultSet = metaData.getColumns(dbName, null, tableName, null);
String sql =
"SELECT * FROM information_schema.COLUMNS "
+ " WHERE "
+ "TABLE_NAME = '"
+ tableName
+ "' and TABLE_SCHEMA='"
+ dbName
+ "'";
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) { while (resultSet.next()) {
TableField tableField = new TableField(); TableField tableField = new TableField();
String columnName = resultSet.getString("COLUMN_NAME"); String columnName = resultSet.getString("COLUMN_NAME");
...@@ -206,12 +212,20 @@ public class MysqlCDCDataSourceChannel implements DataSourceChannelExt { ...@@ -206,12 +212,20 @@ public class MysqlCDCDataSourceChannel implements DataSourceChannelExt {
if (StringUtils.isNotBlank(primaryKey) && primaryKey.equals(columnName)) { if (StringUtils.isNotBlank(primaryKey) && primaryKey.equals(columnName)) {
tableField.setPrimaryKey(true); tableField.setPrimaryKey(true);
} }
tableField.setType(resultSet.getString("DATA_TYPE"));
if (typeList.contains(tableField.getType().toLowerCase())) {
if (tableField.getType().toLowerCase().indexOf("text") < 0) {
tableField.setLen(resultSet.getString("CHARACTER_MAXIMUM_LENGTH"));
}
} else {
tableField.setLen(resultSet.getString("NUMERIC_PRECISION"));
tableField.setScale(resultSet.getString("NUMERIC_SCALE"));
}
tableField.setName(columnName); tableField.setName(columnName);
tableField.setType(resultSet.getString("TYPE_NAME"));
tableField.setComment(resultSet.getString("REMARKS")); tableField.setComment(resultSet.getString("REMARKS"));
Object nullable = resultSet.getObject("IS_NULLABLE"); Object nullable = resultSet.getObject("IS_NULLABLE");
boolean isNullable = convertToBoolean(nullable); tableField.setNullable(Boolean.TRUE.toString().equals(nullable.toString()));
tableField.setNullable(isNullable);
tableFields.add(tableField); tableFields.add(tableField);
} }
} catch (SQLException e) { } catch (SQLException e) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论