diff --git a/chat2db-client/src/components/ConnectionEdit/config/dataSource.ts b/chat2db-client/src/components/ConnectionEdit/config/dataSource.ts
index f14c8651..72d71ba8 100644
--- a/chat2db-client/src/components/ConnectionEdit/config/dataSource.ts
+++ b/chat2db-client/src/components/ConnectionEdit/config/dataSource.ts
@@ -254,6 +254,10 @@ export const dataSourceFormConfigs: IConnectionConfig[] = [
{
"key": "useInformationSchema",
"value": "true"
+ },
+ {
+ "key": "tinyInt1isBit",
+ "value": "false"
}
],
type: DatabaseTypeCode.MYSQL,
diff --git a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/MysqlMetaData.java b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/MysqlMetaData.java
index 626a60b4..50e7322f 100644
--- a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/MysqlMetaData.java
+++ b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/MysqlMetaData.java
@@ -31,6 +31,35 @@ public class MysqlMetaData extends DefaultMetaService implements MetaData {
}
+ private static String TABLES_SQL
+ = "SELECT TABLE_SCHEMA, TABLE_NAME, ENGINE, VERSION, TABLE_ROWS, DATA_LENGTH, AUTO_INCREMENT, CREATE_TIME, UPDATE_TIME, TABLE_COLLATION, TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA = '%s'";
+ @Override
+ public List
tables(Connection connection, @NotEmpty String databaseName, String schemaName, String tableName) {
+ String sql = String.format(TABLES_SQL, databaseName);
+ if(StringUtils.isNotBlank(tableName)){
+ sql += " AND TABLE_NAME = '" + tableName + "'";
+ }
+ return SQLExecutor.getInstance().execute(connection, sql, resultSet -> {
+ List tables = new ArrayList<>();
+ while (resultSet.next()) {
+ Table table = new Table();
+ table.setDatabaseName(databaseName);
+ table.setSchemaName(schemaName);
+ table.setName(resultSet.getString("TABLE_NAME"));
+ table.setEngine(resultSet.getString("ENGINE"));
+ table.setRows(resultSet.getLong("TABLE_ROWS"));
+ table.setDataLength(resultSet.getLong("DATA_LENGTH"));
+ table.setCreateTime(resultSet.getString("CREATE_TIME"));
+ table.setUpdateTime(resultSet.getString("UPDATE_TIME"));
+ table.setCollate(resultSet.getString("TABLE_COLLATION"));
+ table.setComment(resultSet.getString("TABLE_COMMENT"));
+ tables.add(table);
+ }
+ return tables;
+ });
+ }
+
+
@Override
public String tableDDL(Connection connection, @NotEmpty String databaseName, String schemaName,
@NotEmpty String tableName) {
@@ -70,12 +99,12 @@ public class MysqlMetaData extends DefaultMetaService implements MetaData {
}
return f;
});
- String functionDDlSql =String.format("SHOW CREATE FUNCTION %s", functionName);
- SQLExecutor.getInstance().execute(connection,functionDDlSql, resultSet -> {
+ String functionDDlSql = String.format("SHOW CREATE FUNCTION %s", functionName);
+ SQLExecutor.getInstance().execute(connection, functionDDlSql, resultSet -> {
if (resultSet.next()) {
function.setFunctionBody(resultSet.getString("Create Function"));
}
- } );
+ });
return function;
}
@@ -103,6 +132,7 @@ public class MysqlMetaData extends DefaultMetaService implements MetaData {
});
}
+
@Override
public Trigger trigger(Connection connection, @NotEmpty String databaseName, String schemaName,
String triggerName) {
@@ -123,15 +153,15 @@ public class MysqlMetaData extends DefaultMetaService implements MetaData {
@Override
public List procedures(Connection connection, String databaseName, String schemaName) {
String sql = "SHOW PROCEDURE STATUS WHERE Db = DATABASE()";
- return SQLExecutor.getInstance().execute(connection, sql, resultSet -> {
- ArrayList procedures = new ArrayList<>();
- while (resultSet.next()){
- Procedure procedure = new Procedure();
- procedure.setProcedureName(resultSet.getString("Name"));
- procedures.add(procedure);
- }
- return procedures;
- });
+ return SQLExecutor.getInstance().execute(connection, sql, resultSet -> {
+ ArrayList procedures = new ArrayList<>();
+ while (resultSet.next()) {
+ Procedure procedure = new Procedure();
+ procedure.setProcedureName(resultSet.getString("Name"));
+ procedures.add(procedure);
+ }
+ return procedures;
+ });
}
@Override
@@ -214,7 +244,7 @@ public class MysqlMetaData extends DefaultMetaService implements MetaData {
}
}
- private static String VIEW_DDL_SQL="show create view %s";
+ private static String VIEW_DDL_SQL = "show create view %s";
@Override
public Table view(Connection connection, String databaseName, String schemaName, String viewName) {
diff --git a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/MysqlValueHandler.java b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/MysqlValueHandler.java
index 417ed5fc..ed70d6f4 100644
--- a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/MysqlValueHandler.java
+++ b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/MysqlValueHandler.java
@@ -17,24 +17,28 @@ public class MysqlValueHandler extends DefaultValueHandler {
@Override
public String getString(ResultSet rs, int index, boolean limitSize) throws SQLException {
- Object obj = rs.getObject(index);
- if (obj == null) {
- return null;
- }
- String columnTypeName = rs.getMetaData().getColumnTypeName(index);
- if (MysqlColumnTypeEnum.GEOMETRY.name().equalsIgnoreCase(columnTypeName)
- || MysqlColumnTypeEnum.POINT.name().equalsIgnoreCase(columnTypeName)
- || MysqlColumnTypeEnum.LINESTRING.name().equalsIgnoreCase(columnTypeName)
- || MysqlColumnTypeEnum.POLYGON.name().equalsIgnoreCase(columnTypeName)
- || MysqlColumnTypeEnum.MULTIPOINT.name().equalsIgnoreCase(columnTypeName)
- || MysqlColumnTypeEnum.MULTILINESTRING.name().equalsIgnoreCase(columnTypeName)
- || MysqlColumnTypeEnum.MULTIPOLYGON.name().equalsIgnoreCase(columnTypeName)
- || MysqlColumnTypeEnum.GEOMETRYCOLLECTION.name().equalsIgnoreCase(columnTypeName)
- ) {
- ValueHandler handler = VALUE_HANDLER_MAP.get(MysqlColumnTypeEnum.GEOMETRY.name());
- return handler.getString(rs, index, limitSize);
- } else {
- return super.getString(rs, index, limitSize);
+ try {
+ Object obj = rs.getObject(index);
+ if (obj == null) {
+ return null;
+ }
+ String columnTypeName = rs.getMetaData().getColumnTypeName(index);
+ if (MysqlColumnTypeEnum.GEOMETRY.name().equalsIgnoreCase(columnTypeName)
+ || MysqlColumnTypeEnum.POINT.name().equalsIgnoreCase(columnTypeName)
+ || MysqlColumnTypeEnum.LINESTRING.name().equalsIgnoreCase(columnTypeName)
+ || MysqlColumnTypeEnum.POLYGON.name().equalsIgnoreCase(columnTypeName)
+ || MysqlColumnTypeEnum.MULTIPOINT.name().equalsIgnoreCase(columnTypeName)
+ || MysqlColumnTypeEnum.MULTILINESTRING.name().equalsIgnoreCase(columnTypeName)
+ || MysqlColumnTypeEnum.MULTIPOLYGON.name().equalsIgnoreCase(columnTypeName)
+ || MysqlColumnTypeEnum.GEOMETRYCOLLECTION.name().equalsIgnoreCase(columnTypeName)
+ ) {
+ ValueHandler handler = VALUE_HANDLER_MAP.get(MysqlColumnTypeEnum.GEOMETRY.name());
+ return handler.getString(rs, index, limitSize);
+ } else {
+ return super.getString(rs, index, limitSize);
+ }
+ }catch (Exception e){
+ return rs.getString(index);
}
}
diff --git a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/mysql.json b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/mysql.json
index 93ed97ba..ff869c55 100644
--- a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/mysql.json
+++ b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/mysql.json
@@ -17,6 +17,11 @@
"key": "zeroDateTimeBehavior",
"value": "convertToNull",
"required": false
+ },
+ {
+ "key": "tinyInt1isBit",
+ "value": "false",
+ "required": false
}
]
},
@@ -34,6 +39,11 @@
"key": "characterEncoding",
"value": "UTF-8",
"required": false
+ },
+ {
+ "key": "tinyInt1isBit",
+ "value": "false",
+ "required": false
}
]
}
diff --git a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/type/MysqlColumnTypeEnum.java b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/type/MysqlColumnTypeEnum.java
index a26b73b0..636ccd6a 100644
--- a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/type/MysqlColumnTypeEnum.java
+++ b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/type/MysqlColumnTypeEnum.java
@@ -15,9 +15,9 @@ public enum MysqlColumnTypeEnum implements ColumnBuilder {
BIT("BIT", true, false, true, false, false, false, true, true, false, false),
- TINYINT("TINYINT", true, false, true, true, false, false, true, true, false, false),
+ TINYINT("TINYINT", false, false, true, true, false, false, true, true, false, false),
- TINYINT_UNSIGNED("TINYINT UNSIGNED", true, false, true, true, false, false, true, true, false, false),
+ TINYINT_UNSIGNED("TINYINT UNSIGNED", false, false, true, true, false, false, true, true, false, false),
SMALLINT("SMALLINT", false, false, true, true, false, false, true, true, false, false),
@@ -284,7 +284,7 @@ public enum MysqlColumnTypeEnum implements ColumnBuilder {
}
- if (Arrays.asList(DECIMAL, FLOAT, DOUBLE,TINYINT).contains(type)) {
+ if (Arrays.asList(DECIMAL, FLOAT, DOUBLE).contains(type)) {
if (column.getColumnSize() == null || column.getDecimalDigits() == null) {
return columnType;
}
@@ -296,7 +296,7 @@ public enum MysqlColumnTypeEnum implements ColumnBuilder {
}
}
- if (Arrays.asList(DECIMAL_UNSIGNED, FLOAT_UNSIGNED, DECIMAL_UNSIGNED,TINYINT_UNSIGNED).contains(type)) {
+ if (Arrays.asList(DECIMAL_UNSIGNED, FLOAT_UNSIGNED, DECIMAL_UNSIGNED).contains(type)) {
if (column.getColumnSize() == null || column.getDecimalDigits() == null) {
return columnType;
}
diff --git a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/jdbc/DefaultValueHandler.java b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/jdbc/DefaultValueHandler.java
index 5c7d1015..d05a7826 100644
--- a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/jdbc/DefaultValueHandler.java
+++ b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/jdbc/DefaultValueHandler.java
@@ -18,11 +18,11 @@ public class DefaultValueHandler implements ValueHandler {
@Override
public String getString(ResultSet rs, int index, boolean limitSize) throws SQLException {
- Object obj = rs.getObject(index);
- if (obj == null) {
- return null;
- }
try {
+ Object obj = rs.getObject(index);
+ if (obj == null) {
+ return null;
+ }
if (obj instanceof BigDecimal bigDecimal) {
return bigDecimal.toPlainString();
} else if (obj instanceof Double d) {
@@ -41,8 +41,8 @@ public class DefaultValueHandler implements ValueHandler {
return obj.toString();
}
} catch (Exception e) {
- log.warn("Failed to parse number:{},{}", index, obj, e);
- return obj.toString();
+ log.warn("Failed to parse number:{},", index, e);
+ return rs.getString(index);
}
}
diff --git a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/model/Table.java b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/model/Table.java
index a75e87cd..ac080f75 100644
--- a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/model/Table.java
+++ b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/model/Table.java
@@ -98,5 +98,13 @@ public class Table implements Serializable {
private String tablespace;
+
+ private Long rows;
+
+ private Long dataLength;
+
+ private String createTime;
+
+ private String updateTime;
}
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 de724852..05f248ff 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
@@ -412,28 +412,28 @@ public class SQLExecutor implements CommandExecutor {
DatabaseMetaData metadata = connection.getMetaData();
ResultSet resultSet = metadata.getTables(databaseName, schemaName, tableName,
types);
- // If connection is mysql
- if ("MySQL".equalsIgnoreCase(metadata.getDatabaseProductName())) {
- // Get the comment of mysql table
- List tables = ResultSetUtils.toObjectList(resultSet, Table.class);
- if (CollectionUtils.isNotEmpty(tables)) {
- for (Table table : tables) {
- String sql = "show table status where name = '" + table.getName() + "'";
- try (Statement stmt = connection.createStatement()) {
- boolean query = stmt.execute(sql);
- if (query) {
- try (ResultSet rs = stmt.getResultSet();) {
- while (rs.next()) {
- table.setComment(rs.getString("Comment"));
- }
- }
- }
- }
- }
-
- return tables;
- }
- }
+// // If connection is mysql
+// if ("MySQL".equalsIgnoreCase(metadata.getDatabaseProductName())) {
+// // Get the comment of mysql table
+// List tables = ResultSetUtils.toObjectList(resultSet, Table.class);
+// if (CollectionUtils.isNotEmpty(tables)) {
+// for (Table table : tables) {
+// String sql = "show table status where name = '" + table.getName() + "'";
+// try (Statement stmt = connection.createStatement()) {
+// boolean query = stmt.execute(sql);
+// if (query) {
+// try (ResultSet rs = stmt.getResultSet();) {
+// while (rs.next()) {
+// table.setComment(rs.getString("Comment"));
+// }
+// }
+// }
+// }
+// }
+//
+// return tables;
+// }
+// }
return ResultSetUtils.toObjectList(resultSet, Table.class);
} catch (SQLException e) {
throw new RuntimeException(e);