Commit f5c816db by inrgihc

修正元数据查询错误

parent 6a768d3e
......@@ -44,17 +44,17 @@
```
└── sqlrest
├── sqlrest-common // sqlrest通用定义模块
├── sqlrest-template // sqlrest的SQL内容模板模块
├── sqlrest-script // sqlrest的接口脚本解析模块
├── sqlrest-cache // sqlrest执行器缓存模块
├── sqlrest-persistence // sqlrest的数据库持久化模块
├── sqlrest-core // sqlrest-core的接口实现模块
├── sqlrest-gateway // Gateway网关节点
├── sqlrest-executor // Executor接口执行节点
├── sqlrest-manager // Manager管理节点
├── sqlrest-manager-ui // 基于Vue2的Manager前段WEB交互页面
├── sqlrest-dist // 基于maven-assembly-plugin插件的项目打包模块
├── sqlrest-common // sqlrest通用定义模块
├── sqlrest-template // sqlrest的SQL内容模板模块
├── sqlrest-script // sqlrest的接口脚本解析模块
├── sqlrest-cache // sqlrest执行器缓存模块
├── sqlrest-persistence // sqlrest的数据库持久化模块
├── sqlrest-core // sqlrest-core的接口实现模块
├── sqlrest-gateway // Gateway网关节点
├── sqlrest-executor // Executor接口执行节点
├── sqlrest-manager // Manager管理节点
├── sqlrest-manager-ui // 基于Vue2的Manager前段WEB交互页面
├── sqlrest-dist // 基于maven-assembly-plugin插件的项目打包模块
```
## 二、编译打包
......@@ -104,27 +104,15 @@ sh ./docker-maven-build.sh
- 步骤1:准备好一个MySQL5.7+的数据库,假设连接地址如下:
```
# mysql的host地址
MYSQLDB_HOST=127.0.0.1
# mysql的端口号
MYSQLDB_PORT=3306
# mysql的库名
MYSQLDB_NAME=sqlrest
# mysql的账号
MYSQLDB_USERNAME=root
# mysql的密码
MYSQLDB_PASSWORD=123456
```
| mysql的host地址 | mysql的端口号 | mysql的账号 | mysql的密码 |
| :------| :------ | :------ | :------ |
| 127.0.0.1 | 3306 | root | 123456 |
- 步骤2:修改sqlrest-relase-x.x.x/conf/config.ini配置文件
```
# manager节点的host地址,如果gateway与executor节点与manager不在同一台机器时需要配置manger节点的IP地址
# manager节点的host地址,如果gateway与executor节点
# 与manager不在同一台机器时需要配置manger节点的IP地址
MANAGER_HOST=localhost
......@@ -166,7 +154,7 @@ MYSQLDB_PASSWORD=123456
启动gateway服务:bin/gateway_startup.cmd
> linux下,需按照如下顺序双击脚本启动对应的服务
> linux下,需按照如下顺序执行脚本启动对应的服务
启动manager服务:sh bin/sqlrestctl.sh start manager
......
docs/images/000.PNG

66.4 KB | W: | H:

docs/images/000.PNG

59.3 KB | W: | H:

docs/images/000.PNG
docs/images/000.PNG
docs/images/000.PNG
docs/images/000.PNG
  • 2-up
  • Swipe
  • Onion skin
docs/images/002.PNG

54.5 KB | W: | H:

docs/images/002.PNG

61.1 KB | W: | H:

docs/images/002.PNG
docs/images/002.PNG
docs/images/002.PNG
docs/images/002.PNG
  • 2-up
  • Swipe
  • Onion skin
docs/images/003.PNG

68.8 KB | W: | H:

docs/images/003.PNG

66.4 KB | W: | H:

docs/images/003.PNG
docs/images/003.PNG
docs/images/003.PNG
docs/images/003.PNG
  • 2-up
  • Swipe
  • Onion skin
......@@ -25,6 +25,7 @@ public class ProductContext {
private String urlSample;
private String sqlSchemaList;
private List<String> retSchemaList;
private boolean hasCatalogAndSchema;
private Function<String, Pair<String, String>> adapter;
private String pageSql;
}
......@@ -63,7 +63,7 @@ public enum ProductTypeEnum {
.tplUrls(new String[]{"jdbc:oracle:thin:@{host}:{port}:{database}",
"jdbc:oracle:thin:@//{host}[:{port}]/{database}"})
.urlSample("jdbc:oracle:thin:@172.17.2.10:1521:ORCL")
.sqlSchemaList("SELECT name FROM v$database")
.sqlSchemaList("SELECT USERNAME FROM SYS.ALL_USERS")
.adapter(database -> Pair.of(null, database))
.pageSql("SELECT * FROM ( SELECT TMP.*, ROWNUM ROW_ID FROM ( %s ) ALIAS WHERE ROWNUM <= ? ) WHERE ROW_ID > ?")
.build()),
......@@ -81,7 +81,8 @@ public enum ProductTypeEnum {
.urlPrefix("jdbc:sqlserver://")
.tplUrls(new String[]{"jdbc:sqlserver://{host}[:{port}][;DatabaseName={database}][;{params}]"})
.urlSample("jdbc:sqlserver://172.17.2.10:1433;DatabaseName=test")
.sqlSchemaList("SELECT name FROM sys.databases WHERE state = 0 AND database_id > 4")
.sqlSchemaList("select schema_name from INFORMATION_SCHEMA.SCHEMATA")
.hasCatalogAndSchema(true)
.adapter(database -> Pair.of(null, database))
.pageSql("SELECT * FROM (%s) ALIAS OFFSET ? ROWS FETCH NEXT ? ROWS ONLY")
.build()),
......@@ -139,7 +140,7 @@ public enum ProductTypeEnum {
.urlPrefix("jdbc:dm://")
.tplUrls(new String[]{"jdbc:dm://{host}:{port}[/{database}][\\\\?{params}]"})
.urlSample("jdbc:dm://172.17.2.10:5236")
.sqlSchemaList("SHOW SCHEMAS")
.sqlSchemaList("SELECT DISTINCT object_name FROM ALL_OBJECTS WHERE OBJECT_TYPE = 'SCH'")
.adapter(database -> Pair.of(null, database))
.pageSql("select * from (%s) alias limit ? offset ? ")
.build()),
......@@ -251,7 +252,7 @@ public enum ProductTypeEnum {
.driver("org.sqlite.JDBC")
.defaultPort(0)
.testSql("SELECT 1")
.urlPrefix("jdbc:sqlite://")
.urlPrefix("jdbc:sqlite:")
.tplUrls(new String[]{"jdbc:sqlite:{file}", "jdbc:sqlite::resource:{file}"})
.urlSample("jdbc:sqlite:/tmp/test.db")
.sqlSchemaList(null)
......
......@@ -292,6 +292,8 @@ public class SwaggerEntity {
private final String operationId;
private Map<String,Object> requestBody= new HashMap<>();
private List<String> produces = new ArrayList<>();
private List<String> consumes = new ArrayList<>();
......@@ -304,6 +306,13 @@ public class SwaggerEntity {
this.operationId = operationId;
}
public void setRequestBody(String description, String acceptType, Map<String, Object> schema) {
Map<String, Object> content = new HashMap<>();
content.put(acceptType, schema);
requestBody.put("description", description);
requestBody.put("content", content);
}
public void addProduce(String produce) {
this.produces.add(produce);
}
......
......@@ -25,7 +25,6 @@ import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.function.Supplier;
......@@ -151,6 +150,9 @@ public class DataSourceService {
dataSourceEntity.getVersion());
String driverPath = driverPathFile.getAbsolutePath();
String sqlList = dataSourceEntity.getType().getContext().getSqlSchemaList();
if (null == sqlList) {
return dataSourceEntity.getType().getContext().getRetSchemaList();
}
List<String> result = new ArrayList<>();
HikariDataSource ds = DataSourceUtils.getHikariDataSource(dataSourceEntity, driverPath);
if (StringUtils.isNotBlank(sqlList)) {
......@@ -178,7 +180,9 @@ public class DataSourceService {
List<String> result = new ArrayList<>();
HikariDataSource ds = DataSourceUtils.getHikariDataSource(dataSourceEntity, driverPath);
try (Connection connection = ds.getConnection()) {
String catalogName = productType.getContext().getAdapter().apply(schema).getLeft();
String catalogName = productType.getContext().isHasCatalogAndSchema()
? connection.getCatalog()
: productType.getContext().getAdapter().apply(schema).getLeft();
String schemaName = productType.getContext().getAdapter().apply(schema).getRight();
try (ResultSet rs = connection.getMetaData()
.getTables(catalogName, schemaName, "%", new String[]{"TABLE"})) {
......@@ -205,7 +209,9 @@ public class DataSourceService {
List<String> result = new ArrayList<>();
HikariDataSource ds = DataSourceUtils.getHikariDataSource(dataSourceEntity, driverPath);
try (Connection connection = ds.getConnection()) {
String catalogName = productType.getContext().getAdapter().apply(schema).getLeft();
String catalogName = productType.getContext().isHasCatalogAndSchema()
? connection.getCatalog()
: productType.getContext().getAdapter().apply(schema).getLeft();
String schemaName = productType.getContext().getAdapter().apply(schema).getRight();
try (ResultSet rs = connection.getMetaData()
.getTables(catalogName, schemaName, "%", new String[]{"VIEW"})) {
......@@ -229,7 +235,9 @@ public class DataSourceService {
List<MetadataColumnResponse> result = new ArrayList<>();
HikariDataSource ds = DataSourceUtils.getHikariDataSource(dataSourceEntity, driverPath);
try (Connection connection = ds.getConnection()) {
String catalogName = productType.getContext().getAdapter().apply(schema).getLeft();
String catalogName = productType.getContext().isHasCatalogAndSchema()
? connection.getCatalog()
: productType.getContext().getAdapter().apply(schema).getLeft();
String schemaName = productType.getContext().getAdapter().apply(schema).getRight();
try (ResultSet rs = connection.getMetaData()
.getColumns(catalogName, schemaName, table, null)) {
......
......@@ -9,12 +9,12 @@ import com.gitee.sqlrest.core.exec.ApiExecuteService;
import com.gitee.sqlrest.persistence.dao.ApiAssignmentDao;
import com.gitee.sqlrest.persistence.entity.ApiAssignmentEntity;
import java.io.IOException;
import java.io.PrintWriter;
import javax.annotation.Resource;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
@Slf4j
......@@ -28,20 +28,20 @@ public class ApiServletService {
public void process(HttpMethodEnum method, HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
response.setContentType(MediaType.APPLICATION_JSON_VALUE);
String path = request.getRequestURI().substring(Constants.API_PATH_PREFIX.length() + 2);
ApiAssignmentEntity apiConfigEntity = apiAssignmentDao.getByUk(method, path);
if (null == apiConfigEntity || !apiConfigEntity.getStatus()) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
String message = String.format("/%s/%s[%s]", Constants.API_PATH_PREFIX, path, method.name());
ResultEntity result = ResultEntity.failed(ResponseErrorCode.ERROR_PATH_NOT_EXISTS, message);
out.append(JSONUtil.toJsonStr(result));
response.getWriter().append(JSONUtil.toJsonStr(result));
} else {
ResultEntity result = apiExecuteService.execute(apiConfigEntity, request, response);
if (0 != result.getCode()) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
out.append(JSONUtil.toJsonStr(result));
response.getWriter().append(JSONUtil.toJsonStr(result));
}
}
......
......@@ -24,6 +24,9 @@ import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
/**
* https://juejin.cn/post/6996227860058865700
*/
@Service
public class ApiSwaggerService {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment