mirror of
https://github.com/CodePhiliaX/Chat2DB.git
synced 2025-07-29 02:32:33 +08:00
Supports fuzzy query of table names, not case sensitive.
Automatically add pagination parameters when users query SQL without pagination parameters. Sort the database schema and prioritize the user-defined ones.
This commit is contained in:
@ -14,10 +14,33 @@ import ai.chat2db.spi.SqlBuilder;
|
||||
import ai.chat2db.spi.jdbc.DefaultMetaService;
|
||||
import ai.chat2db.spi.model.*;
|
||||
import ai.chat2db.spi.sql.SQLExecutor;
|
||||
import ai.chat2db.spi.util.SortUtils;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import static ai.chat2db.spi.util.SortUtils.sortDatabase;
|
||||
|
||||
public class SqlServerMetaData extends DefaultMetaService implements MetaData {
|
||||
|
||||
|
||||
|
||||
private List<String> systemDatabases = Arrays.asList("master", "model", "msdb", "tempdb");
|
||||
@Override
|
||||
public List<Database> databases(Connection connection) {
|
||||
List<Database> databases = SQLExecutor.getInstance().databases(connection);
|
||||
return sortDatabase(databases,systemDatabases,connection);
|
||||
}
|
||||
|
||||
private List<String> systemSchemas = Arrays.asList("guest", "INFORMATION_SCHEMA", "sys", "db_owner",
|
||||
"db_accessadmin", "db_securityadmin", "db_ddladmin", "db_backupoperator", "db_datareader", "db_datawriter",
|
||||
"db_denydatareader", "db_denydatawriter");
|
||||
|
||||
@Override
|
||||
public List<Schema> schemas(Connection connection, String databaseName) {
|
||||
List<Schema> schemas = SQLExecutor.getInstance().schemas(connection, databaseName, null);
|
||||
return SortUtils.sortSchema(schemas, systemSchemas);
|
||||
}
|
||||
|
||||
private String functionSQL
|
||||
= "CREATE FUNCTION tableSchema.ufn_GetCreateTableScript( @schema_name NVARCHAR(128), @table_name NVARCHAR"
|
||||
+ "(128)) RETURNS NVARCHAR(MAX) AS BEGIN DECLARE @CreateTableScript NVARCHAR(MAX); DECLARE @IndexScripts "
|
||||
@ -49,7 +72,6 @@ public class SqlServerMetaData extends DefaultMetaService implements MetaData {
|
||||
@Override
|
||||
public String tableDDL(Connection connection, String databaseName, String schemaName, String tableName) {
|
||||
try {
|
||||
System.out.println(functionSQL);
|
||||
SQLExecutor.getInstance().executeSql(connection, functionSQL.replace("tableSchema", schemaName),
|
||||
resultSet -> null);
|
||||
} catch (Exception e) {
|
||||
|
@ -6,6 +6,7 @@ import ai.chat2db.spi.SqlBuilder;
|
||||
import ai.chat2db.spi.model.Table;
|
||||
import ai.chat2db.spi.model.TableColumn;
|
||||
import ai.chat2db.spi.model.TableIndex;
|
||||
import ai.chat2db.spi.sql.Chat2DBContext;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
public class SqlServerSqlBuilder implements SqlBuilder {
|
||||
@ -80,9 +81,9 @@ public class SqlServerSqlBuilder implements SqlBuilder {
|
||||
script.append(buildRenameTable(oldTable, newTable));
|
||||
}
|
||||
if (!StringUtils.equalsIgnoreCase(oldTable.getComment(), newTable.getComment())) {
|
||||
if(oldTable.getComment() == null){
|
||||
if (oldTable.getComment() == null) {
|
||||
script.append("\n").append(buildTableComment(newTable));
|
||||
}else {
|
||||
} else {
|
||||
script.append("\n").append(buildUpdateTableComment(newTable));
|
||||
}
|
||||
}
|
||||
@ -110,8 +111,8 @@ public class SqlServerSqlBuilder implements SqlBuilder {
|
||||
return script.toString();
|
||||
}
|
||||
|
||||
|
||||
private static String UPDATE_TABLE_COMMENT_SCRIPT = "exec sp_updateextendedproperty 'MS_Description','%s','SCHEMA','%s','TABLE','%s' \ngo";
|
||||
|
||||
private String buildUpdateTableComment(Table newTable) {
|
||||
return String.format(UPDATE_TABLE_COMMENT_SCRIPT, newTable.getComment(), newTable.getSchemaName(), newTable.getName());
|
||||
}
|
||||
@ -121,4 +122,24 @@ public class SqlServerSqlBuilder implements SqlBuilder {
|
||||
private String buildRenameTable(Table oldTable, Table newTable) {
|
||||
return String.format(RENAME_TABLE_SCRIPT, oldTable.getName(), newTable.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String pageLimit(String sql, int offset, int pageNo, int pageSize) {
|
||||
String version = Chat2DBContext.getDbVersion();
|
||||
if (StringUtils.isNotBlank(version)) {
|
||||
String[] versions = version.split("\\.");
|
||||
if (versions.length > 0 && Integer.parseInt(versions[0]) >= 11) {
|
||||
StringBuilder sqlBuilder = new StringBuilder(sql.length() + 14);
|
||||
sqlBuilder.append(sql);
|
||||
sqlBuilder.append("\n OFFSET ");
|
||||
sqlBuilder.append(offset);
|
||||
sqlBuilder.append(" ROWS ");
|
||||
sqlBuilder.append(" FETCH NEXT ");
|
||||
sqlBuilder.append(pageSize);
|
||||
sqlBuilder.append(" ROWS ONLY");
|
||||
return sqlBuilder.toString();
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user