Commit f5c816db by inrgihc

修正元数据查询错误

parent 6a768d3e
...@@ -104,27 +104,15 @@ sh ./docker-maven-build.sh ...@@ -104,27 +104,15 @@ sh ./docker-maven-build.sh
- 步骤1:准备好一个MySQL5.7+的数据库,假设连接地址如下: - 步骤1:准备好一个MySQL5.7+的数据库,假设连接地址如下:
``` | mysql的host地址 | mysql的端口号 | mysql的账号 | mysql的密码 |
# mysql的host地址 | :------| :------ | :------ | :------ |
MYSQLDB_HOST=127.0.0.1 | 127.0.0.1 | 3306 | root | 123456 |
# mysql的端口号
MYSQLDB_PORT=3306
# mysql的库名
MYSQLDB_NAME=sqlrest
# mysql的账号
MYSQLDB_USERNAME=root
# mysql的密码
MYSQLDB_PASSWORD=123456
```
- 步骤2:修改sqlrest-relase-x.x.x/conf/config.ini配置文件 - 步骤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 MANAGER_HOST=localhost
...@@ -166,7 +154,7 @@ MYSQLDB_PASSWORD=123456 ...@@ -166,7 +154,7 @@ MYSQLDB_PASSWORD=123456
启动gateway服务:bin/gateway_startup.cmd 启动gateway服务:bin/gateway_startup.cmd
> linux下,需按照如下顺序双击脚本启动对应的服务 > linux下,需按照如下顺序执行脚本启动对应的服务
启动manager服务:sh bin/sqlrestctl.sh start manager 启动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 { ...@@ -25,6 +25,7 @@ public class ProductContext {
private String urlSample; private String urlSample;
private String sqlSchemaList; private String sqlSchemaList;
private List<String> retSchemaList; private List<String> retSchemaList;
private boolean hasCatalogAndSchema;
private Function<String, Pair<String, String>> adapter; private Function<String, Pair<String, String>> adapter;
private String pageSql; private String pageSql;
} }
...@@ -63,7 +63,7 @@ public enum ProductTypeEnum { ...@@ -63,7 +63,7 @@ public enum ProductTypeEnum {
.tplUrls(new String[]{"jdbc:oracle:thin:@{host}:{port}:{database}", .tplUrls(new String[]{"jdbc:oracle:thin:@{host}:{port}:{database}",
"jdbc:oracle:thin:@//{host}[:{port}]/{database}"}) "jdbc:oracle:thin:@//{host}[:{port}]/{database}"})
.urlSample("jdbc:oracle:thin:@172.17.2.10:1521:ORCL") .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)) .adapter(database -> Pair.of(null, database))
.pageSql("SELECT * FROM ( SELECT TMP.*, ROWNUM ROW_ID FROM ( %s ) ALIAS WHERE ROWNUM <= ? ) WHERE ROW_ID > ?") .pageSql("SELECT * FROM ( SELECT TMP.*, ROWNUM ROW_ID FROM ( %s ) ALIAS WHERE ROWNUM <= ? ) WHERE ROW_ID > ?")
.build()), .build()),
...@@ -81,7 +81,8 @@ public enum ProductTypeEnum { ...@@ -81,7 +81,8 @@ public enum ProductTypeEnum {
.urlPrefix("jdbc:sqlserver://") .urlPrefix("jdbc:sqlserver://")
.tplUrls(new String[]{"jdbc:sqlserver://{host}[:{port}][;DatabaseName={database}][;{params}]"}) .tplUrls(new String[]{"jdbc:sqlserver://{host}[:{port}][;DatabaseName={database}][;{params}]"})
.urlSample("jdbc:sqlserver://172.17.2.10:1433;DatabaseName=test") .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)) .adapter(database -> Pair.of(null, database))
.pageSql("SELECT * FROM (%s) ALIAS OFFSET ? ROWS FETCH NEXT ? ROWS ONLY") .pageSql("SELECT * FROM (%s) ALIAS OFFSET ? ROWS FETCH NEXT ? ROWS ONLY")
.build()), .build()),
...@@ -139,7 +140,7 @@ public enum ProductTypeEnum { ...@@ -139,7 +140,7 @@ public enum ProductTypeEnum {
.urlPrefix("jdbc:dm://") .urlPrefix("jdbc:dm://")
.tplUrls(new String[]{"jdbc:dm://{host}:{port}[/{database}][\\\\?{params}]"}) .tplUrls(new String[]{"jdbc:dm://{host}:{port}[/{database}][\\\\?{params}]"})
.urlSample("jdbc:dm://172.17.2.10:5236") .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)) .adapter(database -> Pair.of(null, database))
.pageSql("select * from (%s) alias limit ? offset ? ") .pageSql("select * from (%s) alias limit ? offset ? ")
.build()), .build()),
...@@ -251,7 +252,7 @@ public enum ProductTypeEnum { ...@@ -251,7 +252,7 @@ public enum ProductTypeEnum {
.driver("org.sqlite.JDBC") .driver("org.sqlite.JDBC")
.defaultPort(0) .defaultPort(0)
.testSql("SELECT 1") .testSql("SELECT 1")
.urlPrefix("jdbc:sqlite://") .urlPrefix("jdbc:sqlite:")
.tplUrls(new String[]{"jdbc:sqlite:{file}", "jdbc:sqlite::resource:{file}"}) .tplUrls(new String[]{"jdbc:sqlite:{file}", "jdbc:sqlite::resource:{file}"})
.urlSample("jdbc:sqlite:/tmp/test.db") .urlSample("jdbc:sqlite:/tmp/test.db")
.sqlSchemaList(null) .sqlSchemaList(null)
......
...@@ -292,6 +292,8 @@ public class SwaggerEntity { ...@@ -292,6 +292,8 @@ public class SwaggerEntity {
private final String operationId; private final String operationId;
private Map<String,Object> requestBody= new HashMap<>();
private List<String> produces = new ArrayList<>(); private List<String> produces = new ArrayList<>();
private List<String> consumes = new ArrayList<>(); private List<String> consumes = new ArrayList<>();
...@@ -304,6 +306,13 @@ public class SwaggerEntity { ...@@ -304,6 +306,13 @@ public class SwaggerEntity {
this.operationId = operationId; 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) { public void addProduce(String produce) {
this.produces.add(produce); this.produces.add(produce);
} }
......
...@@ -25,7 +25,6 @@ import java.sql.Connection; ...@@ -25,7 +25,6 @@ import java.sql.Connection;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.Statement; import java.sql.Statement;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.function.Supplier; import java.util.function.Supplier;
...@@ -151,6 +150,9 @@ public class DataSourceService { ...@@ -151,6 +150,9 @@ public class DataSourceService {
dataSourceEntity.getVersion()); dataSourceEntity.getVersion());
String driverPath = driverPathFile.getAbsolutePath(); String driverPath = driverPathFile.getAbsolutePath();
String sqlList = dataSourceEntity.getType().getContext().getSqlSchemaList(); String sqlList = dataSourceEntity.getType().getContext().getSqlSchemaList();
if (null == sqlList) {
return dataSourceEntity.getType().getContext().getRetSchemaList();
}
List<String> result = new ArrayList<>(); List<String> result = new ArrayList<>();
HikariDataSource ds = DataSourceUtils.getHikariDataSource(dataSourceEntity, driverPath); HikariDataSource ds = DataSourceUtils.getHikariDataSource(dataSourceEntity, driverPath);
if (StringUtils.isNotBlank(sqlList)) { if (StringUtils.isNotBlank(sqlList)) {
...@@ -178,7 +180,9 @@ public class DataSourceService { ...@@ -178,7 +180,9 @@ public class DataSourceService {
List<String> result = new ArrayList<>(); List<String> result = new ArrayList<>();
HikariDataSource ds = DataSourceUtils.getHikariDataSource(dataSourceEntity, driverPath); HikariDataSource ds = DataSourceUtils.getHikariDataSource(dataSourceEntity, driverPath);
try (Connection connection = ds.getConnection()) { 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(); String schemaName = productType.getContext().getAdapter().apply(schema).getRight();
try (ResultSet rs = connection.getMetaData() try (ResultSet rs = connection.getMetaData()
.getTables(catalogName, schemaName, "%", new String[]{"TABLE"})) { .getTables(catalogName, schemaName, "%", new String[]{"TABLE"})) {
...@@ -205,7 +209,9 @@ public class DataSourceService { ...@@ -205,7 +209,9 @@ public class DataSourceService {
List<String> result = new ArrayList<>(); List<String> result = new ArrayList<>();
HikariDataSource ds = DataSourceUtils.getHikariDataSource(dataSourceEntity, driverPath); HikariDataSource ds = DataSourceUtils.getHikariDataSource(dataSourceEntity, driverPath);
try (Connection connection = ds.getConnection()) { 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(); String schemaName = productType.getContext().getAdapter().apply(schema).getRight();
try (ResultSet rs = connection.getMetaData() try (ResultSet rs = connection.getMetaData()
.getTables(catalogName, schemaName, "%", new String[]{"VIEW"})) { .getTables(catalogName, schemaName, "%", new String[]{"VIEW"})) {
...@@ -229,7 +235,9 @@ public class DataSourceService { ...@@ -229,7 +235,9 @@ public class DataSourceService {
List<MetadataColumnResponse> result = new ArrayList<>(); List<MetadataColumnResponse> result = new ArrayList<>();
HikariDataSource ds = DataSourceUtils.getHikariDataSource(dataSourceEntity, driverPath); HikariDataSource ds = DataSourceUtils.getHikariDataSource(dataSourceEntity, driverPath);
try (Connection connection = ds.getConnection()) { 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(); String schemaName = productType.getContext().getAdapter().apply(schema).getRight();
try (ResultSet rs = connection.getMetaData() try (ResultSet rs = connection.getMetaData()
.getColumns(catalogName, schemaName, table, null)) { .getColumns(catalogName, schemaName, table, null)) {
......
...@@ -9,12 +9,12 @@ import com.gitee.sqlrest.core.exec.ApiExecuteService; ...@@ -9,12 +9,12 @@ import com.gitee.sqlrest.core.exec.ApiExecuteService;
import com.gitee.sqlrest.persistence.dao.ApiAssignmentDao; import com.gitee.sqlrest.persistence.dao.ApiAssignmentDao;
import com.gitee.sqlrest.persistence.entity.ApiAssignmentEntity; import com.gitee.sqlrest.persistence.entity.ApiAssignmentEntity;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Slf4j @Slf4j
...@@ -28,20 +28,20 @@ public class ApiServletService { ...@@ -28,20 +28,20 @@ public class ApiServletService {
public void process(HttpMethodEnum method, HttpServletRequest request, HttpServletResponse response) public void process(HttpMethodEnum method, HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { throws ServletException, IOException {
PrintWriter out = response.getWriter(); response.setContentType(MediaType.APPLICATION_JSON_VALUE);
String path = request.getRequestURI().substring(Constants.API_PATH_PREFIX.length() + 2); String path = request.getRequestURI().substring(Constants.API_PATH_PREFIX.length() + 2);
ApiAssignmentEntity apiConfigEntity = apiAssignmentDao.getByUk(method, path); ApiAssignmentEntity apiConfigEntity = apiAssignmentDao.getByUk(method, path);
if (null == apiConfigEntity || !apiConfigEntity.getStatus()) { if (null == apiConfigEntity || !apiConfigEntity.getStatus()) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND); response.setStatus(HttpServletResponse.SC_NOT_FOUND);
String message = String.format("/%s/%s[%s]", Constants.API_PATH_PREFIX, path, method.name()); String message = String.format("/%s/%s[%s]", Constants.API_PATH_PREFIX, path, method.name());
ResultEntity result = ResultEntity.failed(ResponseErrorCode.ERROR_PATH_NOT_EXISTS, message); ResultEntity result = ResultEntity.failed(ResponseErrorCode.ERROR_PATH_NOT_EXISTS, message);
out.append(JSONUtil.toJsonStr(result)); response.getWriter().append(JSONUtil.toJsonStr(result));
} else { } else {
ResultEntity result = apiExecuteService.execute(apiConfigEntity, request, response); ResultEntity result = apiExecuteService.execute(apiConfigEntity, request, response);
if (0 != result.getCode()) { if (0 != result.getCode()) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 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; ...@@ -24,6 +24,9 @@ import org.springframework.http.MediaType;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
/**
* https://juejin.cn/post/6996227860058865700
*/
@Service @Service
public class ApiSwaggerService { 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