Commit d8ae570f by yuwei

2.0.0项目初始化

parent 9aff7b5d
package cn.datax.common.database;
import cn.datax.common.database.core.DbColumn;
import cn.datax.common.database.core.DbTable;
import org.springframework.jdbc.core.RowMapper;
/**
......@@ -11,7 +12,9 @@ import org.springframework.jdbc.core.RowMapper;
*/
public interface DbDialect {
RowMapper<DbColumn> rowMapper();
RowMapper<DbTable> tableMapper();
RowMapper<DbColumn> columnMapper();
/**
* 获取指定表的所有列
......
package cn.datax.common.database;
import cn.datax.common.database.core.DbColumn;
import cn.datax.common.database.core.DbTable;
import cn.datax.common.database.core.PageResult;
import java.sql.SQLException;
......@@ -39,7 +40,7 @@ public interface DbQuery {
* @param dbName
* @return
*/
List<String> getTables(String dbName);
List<DbTable> getTables(String dbName);
/**
* 获取总数
......
......@@ -5,13 +5,53 @@ import lombok.Data;
@Data
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 {
@Override
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
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 name 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 + "' ";
}
@Override
......
package cn.datax.common.database.dialect;
import cn.datax.common.database.core.DbColumn;
import cn.datax.common.database.core.DbTable;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
......@@ -14,14 +15,29 @@ import java.sql.ResultSet;
public class MySqlDialect extends AbstractDbDialect {
@Override
public RowMapper<DbColumn> rowMapper() {
public RowMapper<DbColumn> columnMapper() {
return (ResultSet rs, int rowNum) -> {
DbColumn entity = new DbColumn();
entity.setName(rs.getString("Field"));
entity.setType(rs.getString("Type"));
entity.setNullable(rs.getString("Null"));
entity.setHasKey(rs.getString("Key"));
entity.setLength(rs.getString("Extra"));
entity.setColName(rs.getString("COLNAME"));
entity.setDataType(rs.getString("DATATYPE"));
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;
};
}
......
package cn.datax.common.database.dialect;
import cn.datax.common.database.core.DbColumn;
import cn.datax.common.database.core.DbTable;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
......@@ -15,12 +16,17 @@ public class OracleDialect extends AbstractDbDialect {
@Override
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
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
......@@ -33,12 +39,29 @@ public class OracleDialect extends AbstractDbDialect {
}
@Override
public RowMapper<DbColumn> rowMapper() {
public RowMapper<DbColumn> columnMapper() {
return (ResultSet rs, int rowNum) -> {
DbColumn entity = new DbColumn();
entity.setName(rs.getString("COLUMN_NAME"));
entity.setType(rs.getString("DATA_TYPE"));
entity.setNullable(rs.getString("NULLABLE"));
entity.setColName(rs.getString("COLNAME"));
entity.setDataType(rs.getString("DATATYPE"));
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;
};
}
......
package cn.datax.common.database.dialect;
import cn.datax.common.database.core.DbColumn;
import cn.datax.common.database.core.DbTable;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
......@@ -47,12 +48,29 @@ public class PostgreDialect extends AbstractDbDialect {
}
@Override
public RowMapper<DbColumn> rowMapper() {
public RowMapper<DbColumn> columnMapper() {
return (ResultSet rs, int rowNum) -> {
DbColumn entity = new DbColumn();
entity.setName(rs.getString("field"));
entity.setType(rs.getString("type"));
entity.setNullable(rs.getString("notnull"));
entity.setColName(rs.getString("COLNAME"));
entity.setDataType(rs.getString("DATATYPE"));
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;
};
}
......
package cn.datax.common.database.dialect;
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.util.StringUtils;
......@@ -16,12 +18,18 @@ public class SQLServer2008Dialect extends AbstractDbDialect {
@Override
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
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) {
......@@ -68,12 +76,29 @@ public class SQLServer2008Dialect extends AbstractDbDialect {
}
@Override
public RowMapper<DbColumn> rowMapper() {
public RowMapper<DbColumn> columnMapper() {
return (ResultSet rs, int rowNum) -> {
DbColumn entity = new DbColumn();
entity.setName(rs.getString("COLUMN_NAME"));
entity.setType(rs.getString("TYPE_NAME"));
entity.setNullable(rs.getString("IS_NULLABLE"));
entity.setColName(rs.getString("COLNAME"));
entity.setDataType(rs.getString("DATATYPE"));
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;
};
}
......
package cn.datax.common.database.dialect;
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;
......@@ -33,7 +34,12 @@ public class UnknownDialect extends AbstractDbDialect {
}
@Override
public RowMapper<DbColumn> rowMapper() {
public RowMapper<DbColumn> columnMapper() {
throw new DataQueryException("不支持的数据库类型");
}
@Override
public RowMapper<DbTable> tableMapper() {
throw new DataQueryException("不支持的数据库类型");
}
}
......@@ -3,6 +3,7 @@ package cn.datax.common.database.query;
import cn.datax.common.database.DbDialect;
import cn.datax.common.database.DbQuery;
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.exception.DataQueryException;
import com.zaxxer.hikari.HikariDataSource;
......@@ -46,12 +47,13 @@ public abstract class AbstractDbQuery implements DbQuery {
@Override
public List<DbColumn> getTableColumns(String dbName, String tableName) {
String sql = dbDialect.columns(dbName, tableName);
return jdbcTemplate.query(sql, dbDialect.rowMapper());
return jdbcTemplate.query(sql, dbDialect.columnMapper());
}
@Override
public List<String> getTables(String dbName) {
return jdbcTemplate.queryForList(dbDialect.tables(dbName), String.class);
public List<DbTable> getTables(String dbName) {
String sql = dbDialect.tables(dbName);
return jdbcTemplate.query(sql, dbDialect.tableMapper());
}
@Override
......
......@@ -4,12 +4,11 @@ import cn.datax.common.core.JsonPage;
import cn.datax.common.core.R;
import cn.datax.common.database.DbQuery;
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.service.data.factory.api.dto.DataSourceDto;
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.DbDataQuery;
import cn.datax.service.data.factory.api.vo.DataSourceVo;
import cn.datax.service.data.factory.mapstruct.DataSourceMapper;
import cn.datax.service.data.factory.service.DataSourceService;
......@@ -169,7 +168,7 @@ public class DataSourceController extends BaseController {
@GetMapping("/{id}/{dbName}/tables")
public R getDbTables(@PathVariable String id, @PathVariable String dbName) {
DbQuery dbQuery = dataSourceService.getDbQuery(id);
List<String> tables = dbQuery.getTables(dbName);
List<DbTable> tables = dbQuery.getTables(dbName);
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