Fixed the problem of direct query table data error due to characters

This commit is contained in:
SwallowGG
2023-12-29 11:39:26 +08:00
parent 09a6c91ece
commit 056df5d273
10 changed files with 43 additions and 10 deletions

View File

@ -21,6 +21,7 @@ import ai.chat2db.spi.model.TableMeta;
import ai.chat2db.spi.sql.SQLExecutor;
import ai.chat2db.spi.util.SortUtils;
import com.google.common.collect.Lists;
import org.apache.commons.lang3.StringUtils;
public class DB2MetaData extends DefaultMetaService implements MetaData {
@ -156,5 +157,9 @@ public class DB2MetaData extends DefaultMetaService implements MetaData {
.defaultValues(DB2DefaultValueEnum.getDefaultValues())
.build();
}
@Override
public String getMetaDataName(String... names) {
return Arrays.stream(names).filter(name -> StringUtils.isNotBlank(name)).map(name -> "\"" + name + "\"").collect(Collectors.joining("."));
}
}

View File

@ -4,6 +4,7 @@ import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.*;
import java.util.stream.Collectors;
import ai.chat2db.plugin.h2.builder.H2SqlBuilder;
import ai.chat2db.spi.MetaData;
@ -14,6 +15,7 @@ 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;
public class H2Meta extends DefaultMetaService implements MetaData {
@ -198,4 +200,9 @@ public class H2Meta extends DefaultMetaService implements MetaData {
return new H2SqlBuilder();
}
@Override
public String getMetaDataName(String... names) {
return Arrays.stream(names).filter(name -> StringUtils.isNotBlank(name)).map(name -> "\"" + name + "\"").collect(Collectors.joining("."));
}
}

View File

@ -2,8 +2,19 @@ package ai.chat2db.plugin.mongodb;
import ai.chat2db.spi.MetaData;
import ai.chat2db.spi.jdbc.DefaultMetaService;
import ai.chat2db.spi.model.Database;
import ai.chat2db.spi.sql.SQLExecutor;
import com.google.common.collect.Lists;
import java.sql.Connection;
import java.util.List;
public class MongodbMetaData extends DefaultMetaService implements MetaData {
@Override
public List<Database> databases(Connection connection) {
return Lists.newArrayList();
}
}

View File

@ -1,6 +1,6 @@
{
"dbType": "MONGODB",
"supportDatabase": true,
"supportDatabase": false,
"supportSchema": true,
"driverConfigList": [
{

View File

@ -4,4 +4,6 @@ import ai.chat2db.spi.MetaData;
import ai.chat2db.spi.jdbc.DefaultMetaService;
public class OceanBaseMetaData extends DefaultMetaService implements MetaData {
}

View File

@ -302,4 +302,8 @@ public class PostgreSQLMetaData extends DefaultMetaService implements MetaData {
.build();
}
@Override
public String getMetaDataName(String... names) {
return Arrays.stream(names).filter(name -> StringUtils.isNotBlank(name)).map(name -> "\"" + name + "\"").collect(Collectors.joining("."));
}
}

View File

@ -96,11 +96,9 @@
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>com.manticore-projects.jsqlformatter</groupId>
<artifactId>jsqlformatter</artifactId>
<version>1.0.0</version>
<groupId>com.github.vertical-blank</groupId>
<artifactId>sql-formatter</artifactId>
</dependency>
</dependencies>

View File

@ -23,6 +23,7 @@ import ai.chat2db.server.web.api.controller.rdb.vo.ExecuteResultVO;
import ai.chat2db.server.web.api.http.GatewayClientService;
import ai.chat2db.server.web.api.http.request.SqlExecuteHistoryCreateRequest;
import ai.chat2db.server.web.api.util.ApplicationContextUtil;
import ai.chat2db.spi.MetaData;
import ai.chat2db.spi.model.ExecuteResult;
import ai.chat2db.spi.sql.Chat2DBContext;
import com.google.common.collect.Lists;
@ -124,11 +125,12 @@ public class RdbDmlController {
if (DataSourceTypeEnum.MONGODB.getCode().equals(type)) {
param.setSql("db." + request.getTableName() + ".find()");
} else {
MetaData metaData = Chat2DBContext.getMetaData();
// 拼接`tableName`,避免关键字被占用问题
param.setSql("select * from " +"`"+ request.getTableName()+"`");
param.setSql("select * from " + metaData.getMetaDataName(request.getTableName()));
}
return dlTemplateService.execute(param)
.map(rdbWebConverter::dto2vo);
.map(rdbWebConverter::dto2vo);
}
/**

View File

@ -3,7 +3,7 @@ package ai.chat2db.server.web.api.controller.sql;
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
import ai.chat2db.server.web.api.aspect.ConnectionInfoAspect;
import ai.chat2db.server.web.api.controller.sql.request.SqlFormatRequest;
import com.manticore.jsqlformatter.JSQLFormatter;
import com.github.vertical_blank.sqlformatter.SqlFormatter;
import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@ -27,7 +27,7 @@ public class SqlController {
public DataResult<String> list(@Valid SqlFormatRequest sqlFormatRequest) {
String sql = sqlFormatRequest.getSql();
try {
sql = JSQLFormatter.format(sql);
sql = SqlFormatter.format(sql);
} catch (Exception e) {
// ignore
}

View File

@ -313,7 +313,11 @@
<artifactId>bson</artifactId>
<version>4.11.1</version>
</dependency>
<dependency>
<groupId>com.github.vertical-blank</groupId>
<artifactId>sql-formatter</artifactId>
<version>2.0.4</version>
</dependency>
</dependencies>
</dependencyManagement>