diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/dashboard/DashboardCreateParam.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/dashboard/DashboardCreateParam.java index c08d19adb..8a97ddf14 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/dashboard/DashboardCreateParam.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/dashboard/DashboardCreateParam.java @@ -39,7 +39,7 @@ public class DashboardCreateParam { private String schema; /** - * Whether it has been deleted, y means deleted, n means not deleted + * Whether it has been deleted, 'Y' means deleted, 'N' means not deleted */ private String deleted; diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/DatabaseCreateParam.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/DatabaseCreateParam.java index 920a01f31..5842ed739 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/DatabaseCreateParam.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/DatabaseCreateParam.java @@ -20,6 +20,8 @@ public class DatabaseCreateParam { private String name; + private String newName; + private String comment; private String charset; diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/service/DatabaseService.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/service/DatabaseService.java index c990eec48..ae2e55d3d 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/service/DatabaseService.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/service/DatabaseService.java @@ -91,5 +91,11 @@ public interface DatabaseService { */ ActionResult modifySchema( SchemaOperationParam request); + /** + * Export database + * + * @param param + * @return + */ String exportDatabase(DatabaseExportParam param) throws SQLException; } diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DatabaseServiceImpl.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DatabaseServiceImpl.java index eb6da6693..6a9808df4 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DatabaseServiceImpl.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DatabaseServiceImpl.java @@ -152,7 +152,7 @@ public DataResult createDatabase(Database database) { @Override public ActionResult modifyDatabase(DatabaseCreateParam param) { Chat2DBContext.getDBManage().modifyDatabase(Chat2DBContext.getConnection(), param.getName(), - param.getName()); + param.getNewName()); return ActionResult.isSuccess(); } diff --git a/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/core/ChartServiceTest.java b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/core/ChartServiceTest.java index 1593d802e..a61fa2f1a 100644 --- a/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/core/ChartServiceTest.java +++ b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/core/ChartServiceTest.java @@ -99,6 +99,7 @@ public void testQueryExistent() { DataResult chartDataResult = chartService.queryExistent(chartQueryParam); DataResult queryExistent = chartService.queryExistent(chartDataResult.getData().getId()); assertNotNull(chartDataResult); + assertNotNull(queryExistent); assertEquals(chartDataResult, queryExistent); } @@ -124,7 +125,7 @@ public void testQueryByIds() { // userLoginIdentity(true, 11L); ListResult chartListResult = chartService.queryByIds(Arrays.asList(1L, 2L, 3L)); - assertNotNull(chartListResult); + assertNotNull(chartListResult.getData()); } @Test diff --git a/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/core/ConsoleServiceTest.java b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/core/ConsoleServiceTest.java new file mode 100644 index 000000000..1fd3bb579 --- /dev/null +++ b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/core/ConsoleServiceTest.java @@ -0,0 +1,52 @@ +package ai.chat2db.server.start.test.core; + +import ai.chat2db.server.domain.api.param.ConsoleCloseParam; +import ai.chat2db.server.domain.api.param.ConsoleConnectParam; +import ai.chat2db.server.domain.api.service.ConsoleService; +import ai.chat2db.server.start.test.TestApplication; +import ai.chat2db.server.start.test.dialect.DialectProperties; +import ai.chat2db.server.start.test.dialect.TestUtils; +import ai.chat2db.server.tools.base.wrapper.result.ActionResult; +import ai.chat2db.spi.sql.Chat2DBContext; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +public class ConsoleServiceTest extends TestApplication { + + @Autowired + private ConsoleService consoleService; + + @Autowired + private List dialectPropertiesList; + + @Test + public void testCreateAndCloseConsole() { + // MYSQL ORACLE POSTGRESQL + for (DialectProperties dialectProperties : dialectPropertiesList) { + Long dataSourceId = TestUtils.nextLong(); + Long consoleId = TestUtils.nextLong(); + TestUtils.buildContext(dialectProperties, dataSourceId, consoleId); + + // creat + ConsoleConnectParam consoleCreateParam = new ConsoleConnectParam(); + consoleCreateParam.setDataSourceId(dataSourceId); + consoleCreateParam.setConsoleId(consoleId); + consoleCreateParam.setDatabaseName(dialectProperties.getDatabaseName()); + ActionResult console = consoleService.createConsole(consoleCreateParam); + assertNotNull(console); + + // close + ConsoleCloseParam consoleCloseParam = new ConsoleCloseParam(); + consoleCloseParam.setDataSourceId(dataSourceId); + consoleCloseParam.setConsoleId(consoleId); + consoleService.closeConsole(consoleCloseParam); + Chat2DBContext.removeContext(); + } + } + + +} diff --git a/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/core/DashboardServiceTest.java b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/core/DashboardServiceTest.java new file mode 100644 index 000000000..0d2d91381 --- /dev/null +++ b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/core/DashboardServiceTest.java @@ -0,0 +1,130 @@ +package ai.chat2db.server.start.test.core; + +import ai.chat2db.server.domain.api.model.Dashboard; +import ai.chat2db.server.domain.api.param.dashboard.DashboardCreateParam; +import ai.chat2db.server.domain.api.param.dashboard.DashboardPageQueryParam; +import ai.chat2db.server.domain.api.param.dashboard.DashboardQueryParam; +import ai.chat2db.server.domain.api.param.dashboard.DashboardUpdateParam; +import ai.chat2db.server.domain.api.service.DashboardService; +import ai.chat2db.server.domain.repository.Dbutils; +import ai.chat2db.server.start.test.TestApplication; +import ai.chat2db.server.tools.base.enums.YesOrNoEnum; +import ai.chat2db.server.tools.base.wrapper.result.ActionResult; +import ai.chat2db.server.tools.base.wrapper.result.DataResult; +import ai.chat2db.server.tools.base.wrapper.result.PageResult; +import ai.chat2db.server.tools.common.model.Context; +import ai.chat2db.server.tools.common.model.LoginUser; +import ai.chat2db.server.tools.common.util.ContextUtils; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.ArrayList; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +public class DashboardServiceTest extends TestApplication { + + @Autowired + private DashboardService dashboardService; + + @Test + public void testCreateWithPermission() { + userLoginIdentity(false, 9L); +// userLoginIdentity(true, 11L); + + DashboardCreateParam dashboardCreateParam = new DashboardCreateParam(); + dashboardCreateParam.setName("chat2db"); + dashboardCreateParam.setSchema("test"); + dashboardCreateParam.setDescription("This is a test!"); + dashboardCreateParam.setDeleted(YesOrNoEnum.NO.getLetter()); + dashboardCreateParam.setUserId(5L); + dashboardCreateParam.setChartIds(new ArrayList()); + + DataResult withPermission = dashboardService.createWithPermission(dashboardCreateParam); + assertNotNull(withPermission); + } + + @Test + public void testUpdateWithPermission() { + // Note: Only administrators can edit this. + userLoginIdentity(true, 9L); + + DashboardUpdateParam dashboardUpdateParam = new DashboardUpdateParam(); + dashboardUpdateParam.setId(1L); + dashboardUpdateParam.setName("chat2db"); + dashboardUpdateParam.setSchema("test"); + dashboardUpdateParam.setDescription("This is a test!"); + dashboardUpdateParam.setDeleted(YesOrNoEnum.NO.getLetter()); + dashboardUpdateParam.setUserId(5L); + dashboardUpdateParam.setChartIds(new ArrayList()); + + ActionResult actionResult = dashboardService.updateWithPermission(dashboardUpdateParam); + assertNotNull(actionResult); + + } + + @Test + public void testFind() { + userLoginIdentity(false, 4L); +// userLoginIdentity(true, 2L); + + DataResult find = dashboardService.find(2L); + assertNotNull(find.getData()); + } + + @Test + public void testQueryExistent() { + userLoginIdentity(false, 8L); + + DashboardQueryParam param = new DashboardQueryParam(); + param.setId(5L); + param.setUserId(9L); + + DataResult existent = dashboardService.queryExistent(param); + DataResult dashboardDataResult = dashboardService.queryExistent(5L); + assertNotNull(existent.getData()); + assertNotNull(dashboardDataResult.getData()); + assertEquals(existent, dashboardDataResult); + } + + @Test + public void testDeleteWithPermission() { + userLoginIdentity(false, 7L); +// userLoginIdentity(true, 4L); + + DataResult dashboardDataResult = dashboardService.find(4L); + if (dashboardDataResult.getData() != null) { + ActionResult actionResult = dashboardService.deleteWithPermission(dashboardDataResult.getData().getId()); + assertNotNull(actionResult); + } + + } + + @Test + public void testQueryPage() { + userLoginIdentity(false, 12L); + + DashboardPageQueryParam param = new DashboardPageQueryParam(); + param.setUserId(5L); + param.setSearchKey("chat"); + + PageResult queryPage = dashboardService.queryPage(param); + assertNotNull(queryPage.getData()); + } + + + /** + * Save the current user identity (administrator or normal user) and user ID to the context and database session for subsequent use. + * + * @param isAdmin + * @param userId + */ + private static void userLoginIdentity(boolean isAdmin, Long userId) { + Context context = Context.builder().loginUser( + LoginUser.builder().admin(isAdmin).id(userId).build() + ).build(); + ContextUtils.setContext(context); + Dbutils.setSession(); + } +} diff --git a/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/core/DatabaseServiceTest.java b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/core/DatabaseServiceTest.java new file mode 100644 index 000000000..04676f380 --- /dev/null +++ b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/core/DatabaseServiceTest.java @@ -0,0 +1,200 @@ +package ai.chat2db.server.start.test.core; + +import ai.chat2db.server.domain.api.param.MetaDataQueryParam; +import ai.chat2db.server.domain.api.param.SchemaOperationParam; +import ai.chat2db.server.domain.api.param.SchemaQueryParam; +import ai.chat2db.server.domain.api.param.datasource.DatabaseCreateParam; +import ai.chat2db.server.domain.api.param.datasource.DatabaseExportParam; +import ai.chat2db.server.domain.api.param.datasource.DatabaseQueryAllParam; +import ai.chat2db.server.domain.api.service.DatabaseService; +import ai.chat2db.server.start.test.TestApplication; +import ai.chat2db.server.start.test.dialect.DialectProperties; +import ai.chat2db.server.start.test.dialect.TestUtils; +import ai.chat2db.server.tools.base.wrapper.result.ActionResult; +import ai.chat2db.server.tools.base.wrapper.result.DataResult; +import ai.chat2db.server.tools.base.wrapper.result.ListResult; +import ai.chat2db.spi.model.Database; +import ai.chat2db.spi.model.MetaSchema; +import ai.chat2db.spi.model.Schema; +import ai.chat2db.spi.model.Sql; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import java.sql.SQLException; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +public class DatabaseServiceTest extends TestApplication { + + @Autowired + private DatabaseService databaseService; + + @Autowired + private List dialectPropertiesList; + + @Test + public void testQueryAll() { + + // MYSQL ORACLE POSTGRESQL + for (DialectProperties dialectProperties : dialectPropertiesList) { + String dbType = dialectProperties.getDbType(); + Long dataSourceId = TestUtils.nextLong(); + Long consoleId = TestUtils.nextLong(); + TestUtils.buildContext(dialectProperties, dataSourceId, consoleId); + + DatabaseQueryAllParam queryAllParam = new DatabaseQueryAllParam(); + queryAllParam.setDbType(dbType); + queryAllParam.setDataSourceId(dataSourceId); + + ListResult result = databaseService.queryAll(queryAllParam); + assertNotNull(result.getData()); + } + + } + + @Test + public void testQuerySchema() { + for (DialectProperties dialectProperties : dialectPropertiesList) { + Long dataSourceId = TestUtils.nextLong(); + Long consoleId = TestUtils.nextLong(); + TestUtils.buildContext(dialectProperties, dataSourceId, consoleId); + + SchemaQueryParam schemaQueryParam = new SchemaQueryParam(); + schemaQueryParam.setDataSourceId(dataSourceId); + schemaQueryParam.setDataBaseName(dialectProperties.getDatabaseName()); + + ListResult schemaListResult = databaseService.querySchema(schemaQueryParam); + assertNotNull(schemaListResult.getData()); + } + } + + @Test + public void testQueryDatabaseSchema() { + for (DialectProperties dialectProperties : dialectPropertiesList) { + Long dataSourceId = TestUtils.nextLong(); + Long consoleId = TestUtils.nextLong(); + TestUtils.buildContext(dialectProperties, dataSourceId, consoleId); + + MetaDataQueryParam param = new MetaDataQueryParam(); + param.setDataSourceId(dataSourceId); + param.setRefresh(true); + + DataResult metaSchemaDataResult = databaseService.queryDatabaseSchema(param); + assertNotNull(metaSchemaDataResult.getData()); + } + } + + @Test + public void testDeleteDatabase() { + for (DialectProperties dialectProperties : dialectPropertiesList) { + Long dataSourceId = TestUtils.nextLong(); + Long consoleId = TestUtils.nextLong(); + TestUtils.buildContext(dialectProperties, dataSourceId, consoleId); + + DatabaseCreateParam param = new DatabaseCreateParam(); + param.setName("test"); + + ActionResult actionResult = databaseService.deleteDatabase(param); + assertNotNull(actionResult); + } + } + + @Test + public void testCreateDatabase() { + for (DialectProperties dialectProperties : dialectPropertiesList) { + Long dataSourceId = TestUtils.nextLong(); + Long consoleId = TestUtils.nextLong(); + TestUtils.buildContext(dialectProperties, dataSourceId, consoleId); + + Database database = new Database(); + DataResult database1 = databaseService.createDatabase(database); + assertNotNull(database1); + } + } + + @Test + public void testModifyDatabase() { + for (DialectProperties dialectProperties : dialectPropertiesList) { + Long dataSourceId = TestUtils.nextLong(); + Long consoleId = TestUtils.nextLong(); + TestUtils.buildContext(dialectProperties, dataSourceId, consoleId); + + DatabaseCreateParam databaseCreateParam = new DatabaseCreateParam(); + databaseCreateParam.setName("test" + TestUtils.nextLong()); + + ActionResult actionResult = databaseService.modifyDatabase(databaseCreateParam); + assertNotNull(actionResult); + + } + } + + @Test + public void testDeleteSchema() { + for (DialectProperties dialectProperties : dialectPropertiesList) { + Long dataSourceId = TestUtils.nextLong(); + Long consoleId = TestUtils.nextLong(); + TestUtils.buildContext(dialectProperties, dataSourceId, consoleId); + + SchemaOperationParam operationParam = new SchemaOperationParam(); + operationParam.setDatabaseName(dialectProperties.getDatabaseName()); + operationParam.setSchemaName("test" + TestUtils.nextLong()); + + ActionResult actionResult = databaseService.deleteSchema(operationParam); + assertNotNull(actionResult); + } + } + + + @Test + public void testCreateSchema() { + for (DialectProperties dialectProperties : dialectPropertiesList) { + Long dataSourceId = TestUtils.nextLong(); + Long consoleId = TestUtils.nextLong(); + TestUtils.buildContext(dialectProperties, dataSourceId, consoleId); + + Schema schema = new Schema(); + DataResult result = databaseService.createSchema(schema); + assertNotNull(result); + } + } + + @Test + public void testModifySchema() { + for (DialectProperties dialectProperties : dialectPropertiesList) { + Long dataSourceId = TestUtils.nextLong(); + Long consoleId = TestUtils.nextLong(); + TestUtils.buildContext(dialectProperties, dataSourceId, consoleId); + + SchemaOperationParam schemaOperationParam = new SchemaOperationParam(); + schemaOperationParam.setDatabaseName(dialectProperties.getDatabaseName()); + schemaOperationParam.setSchemaName("test" + TestUtils.nextLong()); + schemaOperationParam.setNewSchemaName("test" + TestUtils.nextLong()); + + ActionResult actionResult = databaseService.modifySchema(schemaOperationParam); + assertNotNull(actionResult); + } + } + + // TODO:回头专门测试 + @Test + public void testExportDatabase() { + for (DialectProperties dialectProperties : dialectPropertiesList) { + Long dataSourceId = TestUtils.nextLong(); + Long consoleId = TestUtils.nextLong(); + TestUtils.buildContext(dialectProperties, dataSourceId, consoleId); + + DatabaseExportParam exportParam = new DatabaseExportParam(); + exportParam.setDatabaseName(dialectProperties.getDatabaseName()); + exportParam.setContainData(true); + exportParam.setSchemaName("test" + TestUtils.nextLong()); + + try { + String exportDatabase = databaseService.exportDatabase(exportParam); + assertNotNull(exportDatabase); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} diff --git a/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/dialect/DialectProperties.java b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/dialect/DialectProperties.java new file mode 100644 index 000000000..2b5be81ca --- /dev/null +++ b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/dialect/DialectProperties.java @@ -0,0 +1,114 @@ +package ai.chat2db.server.start.test.dialect; + +import java.util.Date; + +/** + * Dialect configuration + */ +public interface DialectProperties { + + /** + * Supported database types + * + * @return + */ + String getDbType(); + + /** + * connection + * + * @return + */ + String getUrl(); + + /** + * Abnormal connection + * + * @return + */ + String getErrorUrl(); + + /** + * userName + * + * @return + */ + + String getUsername(); + + /** + * password + * + * @return + */ + String getPassword(); + + /** + * Name database + * + * @return + */ + String getDatabaseName(); + + /** + * The case depends on the specific database: + * Create table structure: test table + * Field: + * id primary key auto-increment + * date date is not empty + * number long integer type + * string string length 100 default value "DATA" + * + * Index (plus $tableName_ because some database indexes are globally unique): + * $tableName_idx_date date index reverse order + * $tableName_uk_number unique index + * $tableName_idx_number_string joint index + * + * @return + */ + String getCrateTableSql(String tableName); + + /** + * Create table structure + * + * @return + */ + String getDropTableSql(String tableName); + + /** + * Create a piece of data + * + * @return + */ + String getInsertSql(String tableName, Date date, Long number, String string); + + /** + * Query a query sql + * + * @return + */ + String getSelectSqlById(String tableName, Long id); + + /** + * Get a sql whose table structure does not exist + * + * @return + */ + String getTableNotFoundSqlById(String tableName); + + /** + * Convert case + * Some database table structures store uppercase letters by default + * Some databases store lowercase by default + * + * @param string + * @return + */ + String toCase(String string); + + /** + * port + * @return + */ + Integer getPort(); +} diff --git a/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/dialect/MariadbDialectProperties.java b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/dialect/MariadbDialectProperties.java new file mode 100644 index 000000000..f4eedd53a --- /dev/null +++ b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/dialect/MariadbDialectProperties.java @@ -0,0 +1,74 @@ +package ai.chat2db.server.start.test.dialect; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; + +import java.util.Date; + +@Component +public class MariadbDialectProperties implements DialectProperties{ + @Override + public String getDbType() { + return "MARIADB"; + } + + @Override + public String getUrl() { + return "jdbc:mariadb://183.247.151.185:13303/"; + } + + @Override + public String getErrorUrl() { + return "jdbc:mariadb://error:13303/"; + } + + @Override + public String getUsername() { + return "root"; + } + + @Override + public String getPassword() { + return "ali_dbhub"; + } + + @Override + public String getDatabaseName() { + return null; + } + + @Override + public String getCrateTableSql(String tableName) { + return null; + } + + @Override + public String getDropTableSql(String tableName) { + return null; + } + + @Override + public String getInsertSql(String tableName, Date date, Long number, String string) { + return null; + } + + @Override + public String getSelectSqlById(String tableName, Long id) { + return null; + } + + @Override + public String getTableNotFoundSqlById(String tableName) { + return null; + } + + @Override + public String toCase(String string) { + return StringUtils.toRootLowerCase(string); + } + + @Override + public Integer getPort() { + return 13303; + } +} diff --git a/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/dialect/MongodbDialectProperties.java b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/dialect/MongodbDialectProperties.java new file mode 100644 index 000000000..b687e9a23 --- /dev/null +++ b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/dialect/MongodbDialectProperties.java @@ -0,0 +1,74 @@ +package ai.chat2db.server.start.test.dialect; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; + +import java.util.Date; + +@Component +public class MongodbDialectProperties implements DialectProperties{ + @Override + public String getDbType() { + return "MONGODB"; + } + + @Override + public String getUrl() { + return "mongodb://183.247.151.185:27017/"; + } + + @Override + public String getErrorUrl() { + return "mongodb://error:27017/"; + } + + @Override + public String getUsername() { + return "test"; + } + + @Override + public String getPassword() { + return "test@123456"; + } + + @Override + public String getDatabaseName() { + return null; + } + + @Override + public String getCrateTableSql(String tableName) { + return null; + } + + @Override + public String getDropTableSql(String tableName) { + return null; + } + + @Override + public String getInsertSql(String tableName, Date date, Long number, String string) { + return null; + } + + @Override + public String getSelectSqlById(String tableName, Long id) { + return null; + } + + @Override + public String getTableNotFoundSqlById(String tableName) { + return null; + } + + @Override + public String toCase(String string) { + return StringUtils.toRootLowerCase(string); + } + + @Override + public Integer getPort() { + return 27017; + } +} diff --git a/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/dialect/MysqlDialectProperties.java b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/dialect/MysqlDialectProperties.java new file mode 100644 index 000000000..1146f45d6 --- /dev/null +++ b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/dialect/MysqlDialectProperties.java @@ -0,0 +1,95 @@ +package ai.chat2db.server.start.test.dialect; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; + +import java.util.Date; + +/** + * mysql + * + * @author Jiaju Zhuang + */ +@Component +public class MysqlDialectProperties implements DialectProperties { + + @Override + public String getDbType() { + return "MYSQL"; + } + + @Override + public String getUrl() { + return "jdbc:mysql://183.247.151.185:13306"; + } + + @Override + public String getErrorUrl() { + return "jdbc:mysql://error.rm-8vb099vo8309mcngk.mysql.zhangbei.rds.aliyuncs.com:13306"; + } + + @Override + public String getUsername() { + return "root"; + } + + @Override + public String getPassword() { + return "ali_dbhub"; + } + + @Override + public String getDatabaseName() { + return "ali_dbhub_test"; + } + + @Override + public String getCrateTableSql(String tableName) { + return "CREATE TABLE `" + tableName + "`\n\t" + + "(\n\t" + + " `id` bigint PRIMARY KEY AUTO_INCREMENT NOT NULL COMMENT 'Primary key auto-increment',\n\t" + + " `date` datetime(3) not null COMMENT 'date',\n\t" + + " `number` bigint COMMENT 'long integer',\n\t" + + " `string` VARCHAR(100) default 'DATA' COMMENT 'name',\n\t" + + " index " + tableName + "_idx_date (date desc) comment 'date index',\n\t" + + " unique " + tableName + "_uk_number (number) comment 'unique index',\n\t" + + " index " + tableName + "_idx_number_string (number, date) comment 'Union index'\n\t" + + ") COMMENT ='Test table';"; + } + + @Override + public String getDropTableSql(String tableName) { + return "drop table " + tableName + ";"; + } + + @Override + public String getInsertSql(String tableName, Date date, Long number, String string) { + return "INSERT INTO `" + tableName + "` (date,number,string) VALUES ('" + DateUtil.format(date, + DatePattern.NORM_DATETIME_MS_FORMAT) + "','" + number + "','" + string + "');"; + } + + @Override + public String getSelectSqlById(String tableName, Long id) { + return "select *\n\t" + + "from " + tableName + "\n\t" + + "where `id` = '" + id + "';"; + } + + @Override + public String getTableNotFoundSqlById(String tableName) { + return "select *\n" + + "from " + tableName + "_notfound;"; + } + + @Override + public String toCase(String string) { + return StringUtils.toRootLowerCase(string); + } + + @Override + public Integer getPort() { + return 3306; + } +} diff --git a/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/dialect/OracleDialectProperties.java b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/dialect/OracleDialectProperties.java new file mode 100644 index 000000000..0eac03a52 --- /dev/null +++ b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/dialect/OracleDialectProperties.java @@ -0,0 +1,89 @@ +package ai.chat2db.server.start.test.dialect; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; + +import java.util.Date; +@Component +public class OracleDialectProperties implements DialectProperties { + + @Override + public String getDbType() { + return "ORACLE"; + } + + @Override + public String getUrl() { + return "jdbc:oracle:thin:@183.247.151.185:11521:XE"; + } + + @Override + public String getErrorUrl() { + return "jdbc:oracle:thin:@183.247.151.185:11521:XE1"; + } + + @Override + public String getUsername() { + return "system"; + } + + @Override + public String getPassword() { + return "ali_dbhub"; + } + + @Override + public String getDatabaseName() { + return "TEST_USER"; + } + + @Override + public String getCrateTableSql(String tableName) { + return "CREATE TABLE `" + tableName + "`\n\t" + + "(\n\t" + + " `id` bigint PRIMARY KEY AUTO_INCREMENT NOT NULL COMMENT 'Primary key auto-increment',\n\t" + + " `date` datetime(3) not null COMMENT 'date',\n\t" + + " `number` bigint COMMENT 'long integer',\n\t" + + " `string` VARCHAR(100) default 'DATA' COMMENT 'name',\n\t" + + " index " + tableName + "_idx_date (date desc) comment 'date index',\n\t" + + " unique " + tableName + "_uk_number (number) comment 'unique index',\n\t" + + " index " + tableName + "_idx_number_string (number, date) comment 'Union index'\n\t" + + ") COMMENT ='Test table';"; + } + + @Override + public String getDropTableSql(String tableName) { + return "drop table " + tableName + ";"; + } + + @Override + public String getInsertSql(String tableName, Date date, Long number, String string) { + return "INSERT INTO `" + tableName + "` (date,number,string) VALUES ('" + DateUtil.format(date, + DatePattern.NORM_DATETIME_MS_FORMAT) + "','" + number + "','" + string + "');"; + } + + @Override + public String getSelectSqlById(String tableName, Long id) { + return "select *\n\t" + + "from " + tableName + "\n\t" + + "where `id` = '" + id + "';"; + } + + @Override + public String getTableNotFoundSqlById(String tableName) { + return "select *\n" + + "from " + tableName + "_notfound;"; + } + + @Override + public String toCase(String string) { + return StringUtils.toRootLowerCase(string); + } + + @Override + public Integer getPort() { + return 11521; + } +} diff --git a/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/dialect/PostgresqlDialectProperties.java b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/dialect/PostgresqlDialectProperties.java new file mode 100644 index 000000000..ac81c7cb1 --- /dev/null +++ b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/dialect/PostgresqlDialectProperties.java @@ -0,0 +1,108 @@ +/** + * Alipay.com Inc. + * Copyright (c) 2004-2022 All Rights Reserved. + */ +package ai.chat2db.server.start.test.dialect; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; + +import java.util.Date; + +/** + * @author jipengfei + * @version : PgDialectProperties.java, v 0.1 December 13, 2022 21:48 jipengfei Exp $ + */ +@Component +public class PostgresqlDialectProperties implements DialectProperties { + + @Override + public String getDbType() { + return "POSTGRESQL"; + } + + @Override + public String getUrl() { + return "jdbc:postgresql://183.247.151.185:15431/ali_dbhub_test"; + } + + @Override + public String getErrorUrl() { + return "jdbc:postgresql://error:15431/ali_dbhub"; + } + + @Override + public String getUsername() { + return "ali_dbhub"; + } + + @Override + public String getPassword() { + return "ali_dbhub"; + } + + @Override + public String getDatabaseName() { + return "ali_dbhub_test"; + } + + @Override + public String getCrateTableSql(String tableName) { + String sql = "CREATE TABLE " + tableName + "\n" + + "(\n" + + " id serial\n" + + " constraint " + tableName + "_pk primary key,\n" + + " date timestamp,\n" + + " number int,\n" + + " string varchar(100) default 'DATA'\n" + + ");\n"; + sql += "comment on table " + tableName + " is 'Test table';\n"; + sql += "comment on column " + tableName + ".id is 'Primary key auto-increment';\n"; + sql += "comment on column " + tableName + ".date is 'date';\n"; + sql += "comment on column " + tableName + ".number is 'long integer';\n"; + sql += "comment on column " + tableName + ".string is 'name';\n"; + sql += "create index " + tableName + "idx_date on " + tableName + " (date desc);"; + sql += "create unique index " + tableName + "_uk_number on " + tableName + " (number);"; + sql += "create index " + tableName + "_idx_number_string on " + tableName + " (number, date);"; + sql += "comment on index " + tableName + "_uk_number is 'date index';"; + sql += "comment on index " + tableName + "_uk_number is 'unique index';"; + sql += "comment on index " + tableName + "_idx_number_string is 'Union index';"; + return sql; + } + + @Override + public String getDropTableSql(String tableName) { + return "drop table " + tableName + ";"; + } + + @Override + public String getInsertSql(String tableName, Date date, Long number, String string) { + return "INSERT INTO " + tableName + " (date,number,string) VALUES ('" + DateUtil.format(date, + DatePattern.NORM_DATETIME_MS_FORMAT) + "','" + number + "','" + string + "');"; + } + + @Override + public String getSelectSqlById(String tableName, Long id) { + return "select *\n" + + "from " + tableName + "\n" + + "where id = '" + id + "';"; + } + + @Override + public String getTableNotFoundSqlById(String tableName) { + return "select *\n" + + "from " + tableName + "_notfound;"; + } + + @Override + public String toCase(String string) { + return StringUtils.toRootLowerCase(string); + } + + @Override + public Integer getPort() { + return 5432; + } +} \ No newline at end of file diff --git a/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/dialect/TestUtils.java b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/dialect/TestUtils.java new file mode 100644 index 000000000..6003c8adc --- /dev/null +++ b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/dialect/TestUtils.java @@ -0,0 +1,63 @@ +package ai.chat2db.server.start.test.dialect; + +import ai.chat2db.spi.model.SSHInfo; +import ai.chat2db.spi.sql.Chat2DBContext; +import ai.chat2db.spi.sql.ConnectInfo; + +import java.util.concurrent.atomic.AtomicLong; + +/** + * Test tool class + */ +public class TestUtils { + + public static final AtomicLong ATOMIC_LONG = new AtomicLong(); + + /** + * a globally unique long + * + * @return + */ + public static long nextLong() { + return ATOMIC_LONG.incrementAndGet(); + } + + /** + * If the default value is something like 'DATA' + * then you need to remove '' + * + * @param defaultValue + * @return + */ + public static String unWrapperDefaultValue(String defaultValue) { + if (defaultValue == null) { + return null; + } + if (defaultValue.startsWith("'") && defaultValue.endsWith("'")) { + if (defaultValue.length() < 2) { + return defaultValue; + } else if (defaultValue.length() == 2) { + return ""; + } else { + return defaultValue.substring(1, defaultValue.length() - 1); + } + } + return defaultValue; + } + + public static void buildContext(DialectProperties dialectProperties,Long dataSourceId,Long consoleId){ + ConnectInfo connectInfo = new ConnectInfo(); + connectInfo.setUser(dialectProperties.getUsername()); + connectInfo.setPort(dialectProperties.getPort()); + connectInfo.setHost("183.247.151.185"); + connectInfo.setSsh(new SSHInfo()); + connectInfo.setConsoleId(consoleId); + connectInfo.setDataSourceId(dataSourceId); + connectInfo.setPassword(dialectProperties.getPassword()); + connectInfo.setDbType(dialectProperties.getDbType()); + connectInfo.setUrl(dialectProperties.getUrl()); + connectInfo.setDatabase(dialectProperties.getDatabaseName()); + connectInfo.setConsoleOwn(false); + Chat2DBContext.putContext(connectInfo); + } +} diff --git a/chat2db-server/chat2db-server-test/src/test/java/ai/chat2db/server/test/domain/data/service/ConfigServiceTest.java b/chat2db-server/chat2db-server-test/src/test/java/ai/chat2db/server/test/domain/data/service/ConfigServiceTest.java index 5ad725e54..bda952457 100644 --- a/chat2db-server/chat2db-server-test/src/test/java/ai/chat2db/server/test/domain/data/service/ConfigServiceTest.java +++ b/chat2db-server/chat2db-server-test/src/test/java/ai/chat2db/server/test/domain/data/service/ConfigServiceTest.java @@ -1,29 +1,29 @@ - -package ai.chat2db.server.test.domain.data.service; - -import ai.chat2db.server.domain.api.param.SystemConfigParam; -import ai.chat2db.server.domain.api.service.ConfigService; -import ai.chat2db.server.test.common.BaseTest; - -import lombok.extern.slf4j.Slf4j; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; - -/** - * @author jipengfei - * @version : ConfihServiceTest.java - */ -@Slf4j -public class ConfigServiceTest extends BaseTest { - - @Autowired - private ConfigService configService; - - @Test - public void testCreate() { - SystemConfigParam systemConfigParam = new SystemConfigParam(); - systemConfigParam.setCode("test"); - systemConfigParam.setContent("test1"); - configService.createOrUpdate(systemConfigParam); - } -} \ No newline at end of file +// +//package ai.chat2db.server.test.domain.data.service; +// +//import ai.chat2db.server.domain.api.param.SystemConfigParam; +//import ai.chat2db.server.domain.api.service.ConfigService; +//import ai.chat2db.server.test.common.BaseTest; +// +//import lombok.extern.slf4j.Slf4j; +//import org.junit.jupiter.api.Test; +//import org.springframework.beans.factory.annotation.Autowired; +// +///** +// * @author jipengfei +// * @version : ConfihServiceTest.java +// */ +//@Slf4j +//public class ConfigServiceTest extends BaseTest { +// +// @Autowired +// private ConfigService configService; +// +// @Test +// public void testCreate() { +// SystemConfigParam systemConfigParam = new SystemConfigParam(); +// systemConfigParam.setCode("test"); +// systemConfigParam.setContent("test1"); +// configService.createOrUpdate(systemConfigParam); +// } +//} \ No newline at end of file diff --git a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/sql/SQLExecutor.java b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/sql/SQLExecutor.java index f9f3e0c02..2080f992d 100644 --- a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/sql/SQLExecutor.java +++ b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/sql/SQLExecutor.java @@ -262,7 +262,7 @@ private int getChat2dbAutoRowIdIndex(List
headerList) { Header header = headerList.get(i); if ("CAHT2DB_AUTO_ROW_ID".equals(header.getName())) { headerList.remove(i); - return i; + return i + 1; } } return -1;