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
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
40 additions
and
30 deletions
+40
-30
README.md
+6
-18
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
...
@@ -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
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 {
...
@@ -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
;
}
}
sqlrest-common/src/main/java/com/gitee/sqlrest/common/enums/ProductTypeEnum.java
View file @
f5c816db
...
@@ -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
(
"S
HOW SCHEMAS
"
)
.
sqlSchemaList
(
"S
ELECT 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
)
...
...
sqlrest-core/src/main/java/com/gitee/sqlrest/core/dto/SwaggerEntity.java
View file @
f5c816db
...
@@ -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
);
}
}
...
...
sqlrest-core/src/main/java/com/gitee/sqlrest/core/service/DataSourceService.java
View file @
f5c816db
...
@@ -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
))
{
...
...
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;
...
@@ -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
));
}
}
}
}
...
...
sqlrest-core/src/main/java/com/gitee/sqlrest/core/servlet/ApiSwaggerService.java
View file @
f5c816db
...
@@ -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
{
...
...
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