Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
sqlrest
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
comm
sqlrest
Commits
f5c816db
Commit
f5c816db
authored
Apr 26, 2024
by
inrgihc
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修正元数据查询错误
parent
6a768d3e
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
51 additions
and
41 deletions
+51
-41
README.md
+17
-29
docs/images/000.PNG
+0
-0
docs/images/002.PNG
+0
-0
docs/images/003.PNG
+0
-0
sqlrest-common/src/main/java/com/gitee/sqlrest/common/dto/ProductContext.java
+1
-0
sqlrest-common/src/main/java/com/gitee/sqlrest/common/enums/ProductTypeEnum.java
+5
-4
sqlrest-core/src/main/java/com/gitee/sqlrest/core/dto/SwaggerEntity.java
+9
-0
sqlrest-core/src/main/java/com/gitee/sqlrest/core/service/DataSourceService.java
+12
-4
sqlrest-core/src/main/java/com/gitee/sqlrest/core/servlet/ApiServletService.java
+4
-4
sqlrest-core/src/main/java/com/gitee/sqlrest/core/servlet/ApiSwaggerService.java
+3
-0
No files found.
README.md
View file @
f5c816db
...
...
@@ -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
View replaced file @
6a768d3e
View file @
f5c816db
66.4 KB
|
W:
|
H:
59.3 KB
|
W:
|
H:
2-up
Swipe
Onion skin
docs/images/002.PNG
View replaced file @
6a768d3e
View file @
f5c816db
54.5 KB
|
W:
|
H:
61.1 KB
|
W:
|
H:
2-up
Swipe
Onion skin
docs/images/003.PNG
View replaced file @
6a768d3e
View file @
f5c816db
68.8 KB
|
W:
|
H:
66.4 KB
|
W:
|
H:
2-up
Swipe
Onion skin
sqlrest-common/src/main/java/com/gitee/sqlrest/common/dto/ProductContext.java
View file @
f5c816db
...
...
@@ -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
;
}
sqlrest-common/src/main/java/com/gitee/sqlrest/common/enums/ProductTypeEnum.java
View file @
f5c816db
...
...
@@ -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
(
"S
HOW SCHEMAS
"
)
.
sqlSchemaList
(
"S
ELECT 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
)
...
...
sqlrest-core/src/main/java/com/gitee/sqlrest/core/dto/SwaggerEntity.java
View file @
f5c816db
...
...
@@ -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
);
}
...
...
sqlrest-core/src/main/java/com/gitee/sqlrest/core/service/DataSourceService.java
View file @
f5c816db
...
...
@@ -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
))
{
...
...
sqlrest-core/src/main/java/com/gitee/sqlrest/core/servlet/ApiServletService.java
View file @
f5c816db
...
...
@@ -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
));
}
}
...
...
sqlrest-core/src/main/java/com/gitee/sqlrest/core/servlet/ApiSwaggerService.java
View file @
f5c816db
...
...
@@ -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
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment