Commit d8ae570f by yuwei

2.0.0项目初始化

parent 9aff7b5d
package cn.datax.common.database; package cn.datax.common.database;
import cn.datax.common.database.core.DbColumn; import cn.datax.common.database.core.DbColumn;
import cn.datax.common.database.core.DbTable;
import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.RowMapper;
/** /**
...@@ -11,7 +12,9 @@ import org.springframework.jdbc.core.RowMapper; ...@@ -11,7 +12,9 @@ import org.springframework.jdbc.core.RowMapper;
*/ */
public interface DbDialect { public interface DbDialect {
RowMapper<DbColumn> rowMapper(); RowMapper<DbTable> tableMapper();
RowMapper<DbColumn> columnMapper();
/** /**
* 获取指定表的所有列 * 获取指定表的所有列
......
package cn.datax.common.database; package cn.datax.common.database;
import cn.datax.common.database.core.DbColumn; import cn.datax.common.database.core.DbColumn;
import cn.datax.common.database.core.DbTable;
import cn.datax.common.database.core.PageResult; import cn.datax.common.database.core.PageResult;
import java.sql.SQLException; import java.sql.SQLException;
...@@ -39,7 +40,7 @@ public interface DbQuery { ...@@ -39,7 +40,7 @@ public interface DbQuery {
* @param dbName * @param dbName
* @return * @return
*/ */
List<String> getTables(String dbName); List<DbTable> getTables(String dbName);
/** /**
* 获取总数 * 获取总数
......
...@@ -5,13 +5,53 @@ import lombok.Data; ...@@ -5,13 +5,53 @@ import lombok.Data;
@Data @Data
public class DbColumn { public class DbColumn {
private String name; /**
* 列名
*/
private String colName;
private String type; /**
* 数据类型
*/
private String dataType;
private String length; /**
* 数据的长度
*/
private String dataLength;
private String nullable; /**
* 数据的精度
*/
private String dataPrecision;
private String hasKey; /**
* 数据的小数位
*/
private String dataScale;
/**
* 是否主键
*/
private boolean colKey;
/**
* 是否允许为空
*/
private boolean nullable;
/**
* 列的序号
*/
private String colPosition;
/**
* 列的默认值
*/
private String dataDefault;
/**
* 列的注释
*/
private String colComment;
} }
package cn.datax.common.database.core;
import lombok.Data;
@Data
public class DbTable {
/**
* 表名
*/
private String tableName;
/**
* 表的注释
*/
private String tableComment;
}
...@@ -12,13 +12,14 @@ public abstract class AbstractDbDialect implements DbDialect { ...@@ -12,13 +12,14 @@ public abstract class AbstractDbDialect implements DbDialect {
@Override @Override
public String columns(String dbName, String tableName) { public String columns(String dbName, String tableName) {
return "show columns from `" + tableName + "`;"; return "select column_name AS COLNAME, ordinal_position AS COLPOSITION, column_default AS DATADEFAULT, is_nullable AS NULLABLE, data_type AS DATATYPE, " +
"character_maximum_length AS DATALENGTH, numeric_precision AS DATAPRECISION, numeric_scale AS DATASCALE, column_key AS COLKEY, column_comment AS COLCOMMENT " +
"from information_schema.columns where table_schema = '" + dbName + "' and table_name = '" + tableName + "' ";
} }
@Override @Override
public String tables(String dbName) { public String tables(String dbName) {
// return "select table_name name, table_comment comment from information_schema.tables where table_schema = '" + dbName + "' and table_type = 'BASE TABLE' "; return "SELECT table_name AS TABLENAME, table_comment AS TABLECOMMENT FROM information_schema.tables where table_schema = '" + dbName + "' ";
return "SELECT table_name name FROM information_schema.tables WHERE table_schema = '" + dbName + "' AND table_type = 'BASE TABLE' ";
} }
@Override @Override
......
package cn.datax.common.database.dialect; package cn.datax.common.database.dialect;
import cn.datax.common.database.core.DbColumn; import cn.datax.common.database.core.DbColumn;
import cn.datax.common.database.core.DbTable;
import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet; import java.sql.ResultSet;
...@@ -14,14 +15,29 @@ import java.sql.ResultSet; ...@@ -14,14 +15,29 @@ import java.sql.ResultSet;
public class MySqlDialect extends AbstractDbDialect { public class MySqlDialect extends AbstractDbDialect {
@Override @Override
public RowMapper<DbColumn> rowMapper() { public RowMapper<DbColumn> columnMapper() {
return (ResultSet rs, int rowNum) -> { return (ResultSet rs, int rowNum) -> {
DbColumn entity = new DbColumn(); DbColumn entity = new DbColumn();
entity.setName(rs.getString("Field")); entity.setColName(rs.getString("COLNAME"));
entity.setType(rs.getString("Type")); entity.setDataType(rs.getString("DATATYPE"));
entity.setNullable(rs.getString("Null")); entity.setDataLength(rs.getString("DATALENGTH"));
entity.setHasKey(rs.getString("Key")); entity.setDataPrecision(rs.getString("DATAPRECISION"));
entity.setLength(rs.getString("Extra")); entity.setDataScale(rs.getString("DATASCALE"));
// entity.setColKey(rs.getString("COLKEY"));
// entity.setNullable(rs.getString("NULLABLE"));
entity.setColPosition(rs.getString("COLPOSITION"));
entity.setDataDefault(rs.getString("DATADEFAULT"));
entity.setColComment(rs.getString("COLCOMMENT"));
return entity;
};
}
@Override
public RowMapper<DbTable> tableMapper() {
return (ResultSet rs, int rowNum) -> {
DbTable entity = new DbTable();
entity.setTableName(rs.getString("TABLENAME"));
entity.setTableComment(rs.getString("TABLECOMMENT"));
return entity; return entity;
}; };
} }
......
package cn.datax.common.database.dialect; package cn.datax.common.database.dialect;
import cn.datax.common.database.core.DbColumn; import cn.datax.common.database.core.DbColumn;
import cn.datax.common.database.core.DbTable;
import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet; import java.sql.ResultSet;
...@@ -15,12 +16,17 @@ public class OracleDialect extends AbstractDbDialect { ...@@ -15,12 +16,17 @@ public class OracleDialect extends AbstractDbDialect {
@Override @Override
public String columns(String dbName, String tableName) { public String columns(String dbName, String tableName) {
return "select * from user_tab_columns where table_name = '" + tableName + "' "; return "select columns.column_name AS colName, columns.data_type AS DATATYPE, columns.data_length AS DATALENGTH, columns.data_precision AS DATAPRECISION, " +
"columns.data_scale AS DATASCALE, columns.nullable AS NULLABLE, columns.column_id AS COLPOSITION, columns.data_default AS DATADEFAULT, comments.comments AS COLCOMMENT " +
"from sys.dba_tab_columns columns LEFT JOIN sys.dba_col_comments comments ON columns.owner = comments.owner AND columns.table_name = comments.table_name AND columns.column_name = comments.column_name " +
"where columns.owner = UPPER('" + dbName + "') and columns.table_name = UPPER('" + tableName + "')";
} }
@Override @Override
public String tables(String dbName) { public String tables(String dbName) {
return "SELECT table_name name FROM user_tables"; return "select tables.table_name AS TABLENAME, comments.comments AS TABLECOMMENT from sys.dba_tables tables " +
"LEFT JOIN sys.dba_tab_comments comments ON tables.owner = comments.owner AND tables.table_name = comments.table_name " +
"where tables.owner = UPPER('" + dbName + "') ";
} }
@Override @Override
...@@ -33,12 +39,29 @@ public class OracleDialect extends AbstractDbDialect { ...@@ -33,12 +39,29 @@ public class OracleDialect extends AbstractDbDialect {
} }
@Override @Override
public RowMapper<DbColumn> rowMapper() { public RowMapper<DbColumn> columnMapper() {
return (ResultSet rs, int rowNum) -> { return (ResultSet rs, int rowNum) -> {
DbColumn entity = new DbColumn(); DbColumn entity = new DbColumn();
entity.setName(rs.getString("COLUMN_NAME")); entity.setColName(rs.getString("COLNAME"));
entity.setType(rs.getString("DATA_TYPE")); entity.setDataType(rs.getString("DATATYPE"));
entity.setNullable(rs.getString("NULLABLE")); entity.setDataLength(rs.getString("DATALENGTH"));
entity.setDataPrecision(rs.getString("DATAPRECISION"));
entity.setDataScale(rs.getString("DATASCALE"));
// entity.setColKey(rs.getString("COLKEY"));
// entity.setNullable(rs.getString("NULLABLE"));
entity.setColPosition(rs.getString("COLPOSITION"));
entity.setDataDefault(rs.getString("DATADEFAULT"));
entity.setColComment(rs.getString("COLCOMMENT"));
return entity;
};
}
@Override
public RowMapper<DbTable> tableMapper() {
return (ResultSet rs, int rowNum) -> {
DbTable entity = new DbTable();
entity.setTableName(rs.getString("TABLENAME"));
entity.setTableComment(rs.getString("TABLECOMMENT"));
return entity; return entity;
}; };
} }
......
package cn.datax.common.database.dialect; package cn.datax.common.database.dialect;
import cn.datax.common.database.core.DbColumn; import cn.datax.common.database.core.DbColumn;
import cn.datax.common.database.core.DbTable;
import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet; import java.sql.ResultSet;
...@@ -47,12 +48,29 @@ public class PostgreDialect extends AbstractDbDialect { ...@@ -47,12 +48,29 @@ public class PostgreDialect extends AbstractDbDialect {
} }
@Override @Override
public RowMapper<DbColumn> rowMapper() { public RowMapper<DbColumn> columnMapper() {
return (ResultSet rs, int rowNum) -> { return (ResultSet rs, int rowNum) -> {
DbColumn entity = new DbColumn(); DbColumn entity = new DbColumn();
entity.setName(rs.getString("field")); entity.setColName(rs.getString("COLNAME"));
entity.setType(rs.getString("type")); entity.setDataType(rs.getString("DATATYPE"));
entity.setNullable(rs.getString("notnull")); entity.setDataLength(rs.getString("DATALENGTH"));
entity.setDataPrecision(rs.getString("DATAPRECISION"));
entity.setDataScale(rs.getString("DATASCALE"));
// entity.setColKey(rs.getString("COLKEY"));
// entity.setNullable(rs.getString("NULLABLE"));
entity.setColPosition(rs.getString("COLPOSITION"));
entity.setDataDefault(rs.getString("DATADEFAULT"));
entity.setColComment(rs.getString("COLCOMMENT"));
return entity;
};
}
@Override
public RowMapper<DbTable> tableMapper() {
return (ResultSet rs, int rowNum) -> {
DbTable entity = new DbTable();
entity.setTableName(rs.getString("TABLENAME"));
entity.setTableComment(rs.getString("TABLECOMMENT"));
return entity; return entity;
}; };
} }
......
package cn.datax.common.database.dialect; package cn.datax.common.database.dialect;
import cn.datax.common.database.core.DbColumn; import cn.datax.common.database.core.DbColumn;
import cn.datax.common.database.core.DbTable;
import cn.datax.common.database.exception.DataQueryException;
import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.RowMapper;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
...@@ -16,12 +18,18 @@ public class SQLServer2008Dialect extends AbstractDbDialect { ...@@ -16,12 +18,18 @@ public class SQLServer2008Dialect extends AbstractDbDialect {
@Override @Override
public String columns(String dbName, String tableName) { public String columns(String dbName, String tableName) {
return "sp_columns " + tableName + ";"; return "select columns.name AS colName, columns.column_id AS COLPOSITION, columns.max_length AS DATALENGTH, columns.precision AS DATAPRECISION, columns.scale AS DATASCALE, " +
"columns.is_nullable AS NULLABLE, types.name AS DATATYPE, properties.value AS COLCOMMENT, e.text AS DATADEFAULT " +
"from sys.columns columns LEFT JOIN sys.types types ON columns.system_type_id = types.system_type_id " +
"LEFT JOIN syscomments e ON columns.default_object_id= e.id " +
"LEFT JOIN sys.extended_properties properties ON properties.major_id = columns.object_id AND properties.minor_id = columns.column_id " +
"where columns.object_id = object_id('" + tableName + "')";
} }
@Override @Override
public String tables(String dbName) { public String tables(String dbName) {
return "SELECT name FROM sysobjects WHERE xtype='U' "; return "select tables.name AS TABLENAME, properties.value AS TABLECOMMENT " +
"from sys.tables tables LEFT JOIN sys.extended_properties properties ON properties.major_id = tables.object_id AND properties.minor_id = 0";
} }
private static String getOrderByPart(String sql) { private static String getOrderByPart(String sql) {
...@@ -68,12 +76,29 @@ public class SQLServer2008Dialect extends AbstractDbDialect { ...@@ -68,12 +76,29 @@ public class SQLServer2008Dialect extends AbstractDbDialect {
} }
@Override @Override
public RowMapper<DbColumn> rowMapper() { public RowMapper<DbColumn> columnMapper() {
return (ResultSet rs, int rowNum) -> { return (ResultSet rs, int rowNum) -> {
DbColumn entity = new DbColumn(); DbColumn entity = new DbColumn();
entity.setName(rs.getString("COLUMN_NAME")); entity.setColName(rs.getString("COLNAME"));
entity.setType(rs.getString("TYPE_NAME")); entity.setDataType(rs.getString("DATATYPE"));
entity.setNullable(rs.getString("IS_NULLABLE")); entity.setDataLength(rs.getString("DATALENGTH"));
entity.setDataPrecision(rs.getString("DATAPRECISION"));
entity.setDataScale(rs.getString("DATASCALE"));
// entity.setColKey(rs.getString("COLKEY"));
// entity.setNullable(rs.getString("NULLABLE"));
entity.setColPosition(rs.getString("COLPOSITION"));
entity.setDataDefault(rs.getString("DATADEFAULT"));
entity.setColComment(rs.getString("COLCOMMENT"));
return entity;
};
}
@Override
public RowMapper<DbTable> tableMapper() {
return (ResultSet rs, int rowNum) -> {
DbTable entity = new DbTable();
entity.setTableName(rs.getString("TABLENAME"));
entity.setTableComment(rs.getString("TABLECOMMENT"));
return entity; return entity;
}; };
} }
......
package cn.datax.common.database.dialect; package cn.datax.common.database.dialect;
import cn.datax.common.database.core.DbColumn; import cn.datax.common.database.core.DbColumn;
import cn.datax.common.database.core.DbTable;
import cn.datax.common.database.exception.DataQueryException; import cn.datax.common.database.exception.DataQueryException;
import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.RowMapper;
...@@ -33,7 +34,12 @@ public class UnknownDialect extends AbstractDbDialect { ...@@ -33,7 +34,12 @@ public class UnknownDialect extends AbstractDbDialect {
} }
@Override @Override
public RowMapper<DbColumn> rowMapper() { public RowMapper<DbColumn> columnMapper() {
throw new DataQueryException("不支持的数据库类型");
}
@Override
public RowMapper<DbTable> tableMapper() {
throw new DataQueryException("不支持的数据库类型"); throw new DataQueryException("不支持的数据库类型");
} }
} }
...@@ -3,6 +3,7 @@ package cn.datax.common.database.query; ...@@ -3,6 +3,7 @@ package cn.datax.common.database.query;
import cn.datax.common.database.DbDialect; import cn.datax.common.database.DbDialect;
import cn.datax.common.database.DbQuery; import cn.datax.common.database.DbQuery;
import cn.datax.common.database.core.DbColumn; import cn.datax.common.database.core.DbColumn;
import cn.datax.common.database.core.DbTable;
import cn.datax.common.database.core.PageResult; import cn.datax.common.database.core.PageResult;
import cn.datax.common.database.exception.DataQueryException; import cn.datax.common.database.exception.DataQueryException;
import com.zaxxer.hikari.HikariDataSource; import com.zaxxer.hikari.HikariDataSource;
...@@ -46,12 +47,13 @@ public abstract class AbstractDbQuery implements DbQuery { ...@@ -46,12 +47,13 @@ public abstract class AbstractDbQuery implements DbQuery {
@Override @Override
public List<DbColumn> getTableColumns(String dbName, String tableName) { public List<DbColumn> getTableColumns(String dbName, String tableName) {
String sql = dbDialect.columns(dbName, tableName); String sql = dbDialect.columns(dbName, tableName);
return jdbcTemplate.query(sql, dbDialect.rowMapper()); return jdbcTemplate.query(sql, dbDialect.columnMapper());
} }
@Override @Override
public List<String> getTables(String dbName) { public List<DbTable> getTables(String dbName) {
return jdbcTemplate.queryForList(dbDialect.tables(dbName), String.class); String sql = dbDialect.tables(dbName);
return jdbcTemplate.query(sql, dbDialect.tableMapper());
} }
@Override @Override
......
...@@ -4,12 +4,11 @@ import cn.datax.common.core.JsonPage; ...@@ -4,12 +4,11 @@ import cn.datax.common.core.JsonPage;
import cn.datax.common.core.R; import cn.datax.common.core.R;
import cn.datax.common.database.DbQuery; import cn.datax.common.database.DbQuery;
import cn.datax.common.database.core.DbColumn; import cn.datax.common.database.core.DbColumn;
import cn.datax.common.database.core.PageResult; import cn.datax.common.database.core.DbTable;
import cn.datax.common.validate.ValidationGroups; import cn.datax.common.validate.ValidationGroups;
import cn.datax.service.data.factory.api.dto.DataSourceDto; import cn.datax.service.data.factory.api.dto.DataSourceDto;
import cn.datax.service.data.factory.api.entity.DataSourceEntity; import cn.datax.service.data.factory.api.entity.DataSourceEntity;
import cn.datax.service.data.factory.api.query.DataSourceQuery; import cn.datax.service.data.factory.api.query.DataSourceQuery;
import cn.datax.service.data.factory.api.query.DbDataQuery;
import cn.datax.service.data.factory.api.vo.DataSourceVo; import cn.datax.service.data.factory.api.vo.DataSourceVo;
import cn.datax.service.data.factory.mapstruct.DataSourceMapper; import cn.datax.service.data.factory.mapstruct.DataSourceMapper;
import cn.datax.service.data.factory.service.DataSourceService; import cn.datax.service.data.factory.service.DataSourceService;
...@@ -169,7 +168,7 @@ public class DataSourceController extends BaseController { ...@@ -169,7 +168,7 @@ public class DataSourceController extends BaseController {
@GetMapping("/{id}/{dbName}/tables") @GetMapping("/{id}/{dbName}/tables")
public R getDbTables(@PathVariable String id, @PathVariable String dbName) { public R getDbTables(@PathVariable String id, @PathVariable String dbName) {
DbQuery dbQuery = dataSourceService.getDbQuery(id); DbQuery dbQuery = dataSourceService.getDbQuery(id);
List<String> tables = dbQuery.getTables(dbName); List<DbTable> tables = dbQuery.getTables(dbName);
return R.ok().setData(tables); return R.ok().setData(tables);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment