|
@@ -6,6 +6,7 @@ import org.hsweb.ezorm.executor.SqlExecutor;
|
|
|
import org.hsweb.ezorm.meta.DatabaseMetaData;
|
|
|
import org.hsweb.ezorm.meta.TableMetaData;
|
|
|
import org.hsweb.ezorm.meta.expand.SimpleMapWrapper;
|
|
|
+import org.hsweb.ezorm.meta.parser.H2TableMetaParser;
|
|
|
import org.hsweb.ezorm.meta.parser.MysqlTableMetaParser;
|
|
|
import org.hsweb.ezorm.meta.parser.OracleTableMetaParser;
|
|
|
import org.hsweb.ezorm.meta.parser.TableMetaParser;
|
|
@@ -17,6 +18,9 @@ import org.hsweb.ezorm.render.support.simple.SimpleSQL;
|
|
|
import org.hsweb.ezorm.run.simple.SimpleDatabase;
|
|
|
import org.hsweb.web.core.Install;
|
|
|
import org.hsweb.web.core.exception.BusinessException;
|
|
|
+import org.hsweb.web.core.exception.NotFoundException;
|
|
|
+import org.hsweb.web.service.datasource.DataSourceService;
|
|
|
+import org.hsweb.web.service.datasource.DynamicDataSourceService;
|
|
|
import org.hsweb.web.service.impl.DatabaseMetaDataFactoryBean;
|
|
|
import org.hsweb.web.service.system.DataBaseManagerService;
|
|
|
import org.hsweb.web.service.system.SqlExecuteProcess;
|
|
@@ -26,6 +30,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.PostConstruct;
|
|
|
import javax.annotation.Resource;
|
|
|
+import javax.sql.DataSource;
|
|
|
import java.sql.SQLException;
|
|
|
import java.util.LinkedHashMap;
|
|
|
import java.util.LinkedList;
|
|
@@ -52,6 +57,12 @@ public class DataBaseManagerServiceImpl implements DataBaseManagerService {
|
|
|
@Autowired
|
|
|
private DatabaseMetaDataFactoryBean databaseMetaDataFactoryBean;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private DynamicDataSourceService dynamicDataSourceService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private DataSourceService dataSourceService;
|
|
|
+
|
|
|
@Override
|
|
|
public List<TableMetaData> getTableList() throws SQLException {
|
|
|
if (tableMetaParser == null) {
|
|
@@ -63,6 +74,10 @@ public class DataBaseManagerServiceImpl implements DataBaseManagerService {
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Throwable.class)
|
|
|
public List<Map<String, Object>> execSql(List<String> sqlList) throws SQLException {
|
|
|
+ return execSql(sqlExecutor, sqlList);
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<Map<String, Object>> execSql(SqlExecutor sqlExecutor, List<String> sqlList) throws SQLException {
|
|
|
List<Map<String, Object>> response = new LinkedList<>();
|
|
|
for (String s : sqlList) {
|
|
|
Map<String, Object> msg = new LinkedHashMap<>();
|
|
@@ -100,7 +115,10 @@ public class DataBaseManagerServiceImpl implements DataBaseManagerService {
|
|
|
|
|
|
@Override
|
|
|
public String createAlterSql(TableMetaData newTable) throws Exception {
|
|
|
- DatabaseMetaData databaseMetaData = databaseMetaDataFactoryBean.getObject();
|
|
|
+ return createAlterSql(databaseMetaDataFactoryBean.getObject(), tableMetaParser, newTable);
|
|
|
+ }
|
|
|
+
|
|
|
+ public String createAlterSql(DatabaseMetaData databaseMetaData, TableMetaParser tableMetaParser, TableMetaData newTable) throws Exception {
|
|
|
databaseMetaData.putTable(tableMetaParser.parse(newTable.getName()));
|
|
|
SQL sql = databaseMetaData.getRenderer(SqlRender.TYPE.META_ALTER).render(newTable, true);
|
|
|
if (sql instanceof EmptySQL) return "";
|
|
@@ -113,7 +131,10 @@ public class DataBaseManagerServiceImpl implements DataBaseManagerService {
|
|
|
|
|
|
@Override
|
|
|
public String createCreateSql(TableMetaData newTable) throws Exception {
|
|
|
- DatabaseMetaData databaseMetaData = databaseMetaDataFactoryBean.getObject();
|
|
|
+ return createCreateSql(databaseMetaDataFactoryBean.getObject(), newTable);
|
|
|
+ }
|
|
|
+
|
|
|
+ public String createCreateSql(DatabaseMetaData databaseMetaData, TableMetaData newTable) throws Exception {
|
|
|
SQL sql = databaseMetaData.getRenderer(SqlRender.TYPE.META_CREATE).render(newTable, true);
|
|
|
if (sql instanceof EmptySQL) return "";
|
|
|
StringBuilder builder = new StringBuilder(sql.getSql());
|
|
@@ -123,4 +144,89 @@ public class DataBaseManagerServiceImpl implements DataBaseManagerService {
|
|
|
return builder.toString();
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public List<TableMetaData> getTableList(String datasourceId) throws SQLException {
|
|
|
+ SqlExecutor sqlExecutor = dynamicDataSourceService.getSqlExecutor(datasourceId);
|
|
|
+ DBType dbType = getDBType(datasourceId);
|
|
|
+ return dbType.getTableMetaParser(sqlExecutor).parseAll();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Throwable.class)
|
|
|
+ public List<Map<String, Object>> execSql(String datasourceId, List<String> sqlList) throws SQLException {
|
|
|
+ return execSql(dynamicDataSourceService.getSqlExecutor(datasourceId), sqlList);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String createAlterSql(String datasourceId, TableMetaData newTable) throws Exception {
|
|
|
+ DBType dbType = getDBType(datasourceId);
|
|
|
+ SqlExecutor sqlExecutor = dynamicDataSourceService.getSqlExecutor(datasourceId);
|
|
|
+ return createAlterSql(dbType.getDatabaseMetaData(), dbType.getTableMetaParser(sqlExecutor), newTable);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String createCreateSql(String datasourceId, TableMetaData newTable) throws Exception {
|
|
|
+ return createCreateSql(getDBType(datasourceId).getDatabaseMetaData(), newTable);
|
|
|
+ }
|
|
|
+
|
|
|
+ public DBType getDBType(String datasourceId) {
|
|
|
+ org.hsweb.web.bean.po.datasource.DataSource dataSource = dataSourceService.selectByPk(datasourceId);
|
|
|
+ String driver = dataSource.getDriver();
|
|
|
+ if (driver.contains("mysql")) {
|
|
|
+ return DBType.mysql;
|
|
|
+ }
|
|
|
+ if (driver.contains("oracle")) {
|
|
|
+ return DBType.oracle;
|
|
|
+ }
|
|
|
+ if (driver.contains("h2")) {
|
|
|
+ return DBType.h2;
|
|
|
+ }
|
|
|
+ throw new NotFoundException(driver);
|
|
|
+ }
|
|
|
+
|
|
|
+ enum DBType {
|
|
|
+ mysql {
|
|
|
+ @Override
|
|
|
+ public TableMetaParser getTableMetaParser(SqlExecutor sqlExecutor) {
|
|
|
+ return new MysqlTableMetaParser(sqlExecutor);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public DatabaseMetaData getDatabaseMetaData() {
|
|
|
+ DatabaseMetaData databaseMetaData = new MysqlDatabaseMeta();
|
|
|
+ databaseMetaData.init();
|
|
|
+ return databaseMetaData;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ oracle {
|
|
|
+ @Override
|
|
|
+ public TableMetaParser getTableMetaParser(SqlExecutor sqlExecutor) {
|
|
|
+ return new OracleTableMetaParser(sqlExecutor);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public DatabaseMetaData getDatabaseMetaData() {
|
|
|
+ DatabaseMetaData databaseMetaData = new OracleDatabaseMeta();
|
|
|
+ databaseMetaData.init();
|
|
|
+ return databaseMetaData;
|
|
|
+ }
|
|
|
+ }, h2 {
|
|
|
+ @Override
|
|
|
+ public TableMetaParser getTableMetaParser(SqlExecutor sqlExecutor) {
|
|
|
+ return new H2TableMetaParser(sqlExecutor);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public DatabaseMetaData getDatabaseMetaData() {
|
|
|
+ DatabaseMetaData databaseMetaData = new H2DatabaseMeta();
|
|
|
+ databaseMetaData.init();
|
|
|
+ return databaseMetaData;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ public abstract DatabaseMetaData getDatabaseMetaData();
|
|
|
+
|
|
|
+ public abstract TableMetaParser getTableMetaParser(SqlExecutor sqlExecutor);
|
|
|
+ }
|
|
|
+
|
|
|
}
|