Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
D
dlink
Project
Project
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
zhaowei
dlink
Commits
0bb87154
Commit
0bb87154
authored
Dec 30, 2021
by
wenmo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
元数据查询与执行合并
parent
397a3faa
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
200 additions
and
59 deletions
+200
-59
StudioServiceImpl.java
...c/main/java/com/dlink/service/impl/StudioServiceImpl.java
+1
-1
AbstractResult.java
...common/src/main/java/com/dlink/result/AbstractResult.java
+26
-1
SqlUtil.java
dlink-common/src/main/java/com/dlink/utils/SqlUtil.java
+0
-1
AbstractJdbcDriver.java
...in/java/com/dlink/metadata/driver/AbstractJdbcDriver.java
+56
-17
Driver.java
...-base/src/main/java/com/dlink/metadata/driver/Driver.java
+9
-4
JdbcSelectResult.java
...main/java/com/dlink/metadata/result/JdbcSelectResult.java
+68
-3
index.tsx
...b/src/components/Studio/StudioConsole/StudioMsg/index.tsx
+2
-2
index.tsx
...src/components/Studio/StudioConsole/StudioTable/index.tsx
+36
-22
index.tsx
dlink-web/src/components/Studio/StudioMenu/index.tsx
+0
-6
index.tsx
dlink-web/src/components/Studio/StudioTree/index.tsx
+2
-2
No files found.
dlink-admin/src/main/java/com/dlink/service/impl/StudioServiceImpl.java
View file @
0bb87154
...
...
@@ -113,7 +113,7 @@ public class StudioServiceImpl implements StudioService {
return
result
;
}
Driver
driver
=
Driver
.
build
(
dataBase
.
getDriverConfig
()).
connect
();
JdbcSelectResult
selectResult
=
driver
.
query
(
sqlDTO
.
getStatement
(),
sqlDTO
.
getMaxRowNum
());
JdbcSelectResult
selectResult
=
driver
.
executeSql
(
sqlDTO
.
getStatement
(),
sqlDTO
.
getMaxRowNum
());
driver
.
close
();
result
.
setResult
(
selectResult
);
if
(
selectResult
.
isSuccess
()){
...
...
dlink-common/src/main/java/com/dlink/result/AbstractResult.java
View file @
0bb87154
package
com
.
dlink
.
result
;
import
java.time.Duration
;
import
java.time.LocalDateTime
;
/**
...
...
@@ -13,9 +14,21 @@ public class AbstractResult {
protected
boolean
success
;
protected
LocalDateTime
startTime
;
protected
LocalDateTime
endTime
;
protected
long
time
;
protected
String
error
;
public
void
setStartTime
(
LocalDateTime
startTime
){
public
void
success
(){
this
.
setEndTime
(
LocalDateTime
.
now
());
this
.
setSuccess
(
true
);
}
public
void
error
(
String
error
){
this
.
setEndTime
(
LocalDateTime
.
now
());
this
.
setSuccess
(
false
);
this
.
setError
(
error
);
}
public
void
setStartTime
(
LocalDateTime
startTime
)
{
this
.
startTime
=
startTime
;
}
...
...
@@ -37,6 +50,10 @@ public class AbstractResult {
public
void
setEndTime
(
LocalDateTime
endTime
)
{
this
.
endTime
=
endTime
;
if
(
startTime
!=
null
&&
endTime
!=
null
)
{
Duration
duration
=
java
.
time
.
Duration
.
between
(
startTime
,
endTime
);
time
=
duration
.
toMillis
();
}
}
public
String
getError
()
{
...
...
@@ -46,4 +63,12 @@ public class AbstractResult {
public
void
setError
(
String
error
)
{
this
.
error
=
error
;
}
public
long
getTime
()
{
return
time
;
}
public
void
setTime
(
long
time
)
{
this
.
time
=
time
;
}
}
dlink-
executor
/src/main/java/com/dlink/utils/SqlUtil.java
→
dlink-
common
/src/main/java/com/dlink/utils/SqlUtil.java
View file @
0bb87154
package
com
.
dlink
.
utils
;
import
com.dlink.assertion.Asserts
;
import
com.dlink.constant.FlinkSQLConstant
;
/**
* SqlUtil
...
...
dlink-metadata/dlink-metadata-base/src/main/java/com/dlink/metadata/driver/AbstractJdbcDriver.java
View file @
0bb87154
...
...
@@ -24,6 +24,7 @@ import java.sql.SQLException;
import
java.sql.Statement
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
/**
...
...
@@ -177,7 +178,7 @@ public abstract class AbstractJdbcDriver extends AbstractDriver {
}
@Override
public
boolean
createTable
(
Table
table
)
{
public
boolean
createTable
(
Table
table
)
throws
Exception
{
String
sql
=
getCreateTableSql
(
table
).
replaceAll
(
"\r\n"
,
" "
);
if
(
Asserts
.
isNotNull
(
sql
))
{
return
execute
(
sql
);
...
...
@@ -187,7 +188,7 @@ public abstract class AbstractJdbcDriver extends AbstractDriver {
}
@Override
public
boolean
dropTable
(
Table
table
)
{
public
boolean
dropTable
(
Table
table
)
throws
Exception
{
String
sql
=
getDropTableSql
(
table
).
replaceAll
(
"\r\n"
,
" "
);
if
(
Asserts
.
isNotNull
(
sql
))
{
return
execute
(
sql
);
...
...
@@ -197,7 +198,7 @@ public abstract class AbstractJdbcDriver extends AbstractDriver {
}
@Override
public
boolean
truncateTable
(
Table
table
)
{
public
boolean
truncateTable
(
Table
table
)
throws
Exception
{
String
sql
=
getTruncateTableSql
(
table
).
replaceAll
(
"\r\n"
,
" "
);
if
(
Asserts
.
isNotNull
(
sql
))
{
return
execute
(
sql
);
...
...
@@ -229,21 +230,23 @@ public abstract class AbstractJdbcDriver extends AbstractDriver {
}
@Override
public
boolean
execute
(
String
sql
)
{
public
boolean
execute
(
String
sql
)
throws
Exception
{
Asserts
.
checkNullString
(
sql
,
"Sql 语句为空"
);
String
[]
sqls
=
sql
.
split
(
";"
)
;
boolean
res
=
false
;
try
(
Statement
statement
=
conn
.
createStatement
())
{
for
(
int
i
=
0
;
i
<
sqls
.
length
;
i
++)
{
if
(
Asserts
.
isNullString
(
sqls
[
i
]))
{
continue
;
}
statement
.
execute
(
sqls
[
i
]);
}
return
true
;
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
res
=
statement
.
execute
(
sql
);
}
return
false
;
return
res
;
}
@Override
public
int
executeUpdate
(
String
sql
)
throws
Exception
{
Asserts
.
checkNullString
(
sql
,
"Sql 语句为空"
);
int
res
=
0
;
try
(
Statement
statement
=
conn
.
createStatement
())
{
res
=
statement
.
executeUpdate
(
sql
);
}
return
res
;
}
@Override
...
...
@@ -252,7 +255,7 @@ public abstract class AbstractJdbcDriver extends AbstractDriver {
limit
=
100
;
}
JdbcSelectResult
result
=
new
JdbcSelectResult
();
List
<
HashMap
<
String
,
Object
>>
datas
=
new
ArrayList
<>();
List
<
Linked
HashMap
<
String
,
Object
>>
datas
=
new
ArrayList
<>();
List
<
Column
>
columns
=
new
ArrayList
<>();
List
<
String
>
columnNameList
=
new
ArrayList
<>();
PreparedStatement
preparedStatement
=
null
;
...
...
@@ -277,7 +280,7 @@ public abstract class AbstractJdbcDriver extends AbstractDriver {
}
result
.
setColumns
(
columnNameList
);
while
(
results
.
next
())
{
HashMap
<
String
,
Object
>
data
=
new
HashMap
<>();
LinkedHashMap
<
String
,
Object
>
data
=
new
Linked
HashMap
<>();
for
(
int
i
=
0
;
i
<
columns
.
size
();
i
++)
{
data
.
put
(
columns
.
get
(
i
).
getName
(),
getTypeConvert
().
convertValue
(
results
,
columns
.
get
(
i
).
getName
(),
columns
.
get
(
i
).
getType
()));
}
...
...
@@ -298,6 +301,42 @@ public abstract class AbstractJdbcDriver extends AbstractDriver {
}
}
@Override
public
JdbcSelectResult
executeSql
(
String
sql
,
Integer
limit
)
{
List
<
SQLStatement
>
stmtList
=
SQLUtils
.
parseStatements
(
sql
,
config
.
getType
());
List
<
Object
>
resList
=
new
ArrayList
<>();
JdbcSelectResult
result
=
JdbcSelectResult
.
buildResult
();
for
(
SQLStatement
item
:
stmtList
){
String
type
=
item
.
getClass
().
getSimpleName
();
if
(
type
.
toUpperCase
().
contains
(
"SELECT"
)||
type
.
toUpperCase
().
contains
(
"SHOW"
)||
type
.
toUpperCase
().
contains
(
"DESC"
)){
return
query
(
item
.
toString
(),
limit
);
}
else
if
(
type
.
toUpperCase
().
contains
(
"INSERT"
)||
type
.
toUpperCase
().
contains
(
"UPDATE"
)||
type
.
toUpperCase
().
contains
(
"DELETE"
)){
try
{
resList
.
add
(
executeUpdate
(
item
.
toString
()));
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
resList
.
add
(
0
);
result
.
setStatusList
(
resList
);
result
.
error
(
e
.
getMessage
());
return
result
;
}
}
else
{
try
{
resList
.
add
(
execute
(
item
.
toString
()));
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
resList
.
add
(
false
);
result
.
setStatusList
(
resList
);
result
.
error
(
e
.
getMessage
());
return
result
;
}
}
}
result
.
setStatusList
(
resList
);
result
.
success
();
return
result
;
}
@Override
public
List
<
SqlExplainResult
>
explain
(
String
sql
){
List
<
SqlExplainResult
>
sqlExplainResults
=
new
ArrayList
<>();
...
...
dlink-metadata/dlink-metadata-base/src/main/java/com/dlink/metadata/driver/Driver.java
View file @
0bb87154
...
...
@@ -9,6 +9,7 @@ import com.dlink.model.Table;
import
com.dlink.result.SqlExplainResult
;
import
sun.misc.Service
;
import
java.sql.SQLException
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Optional
;
...
...
@@ -67,11 +68,11 @@ public interface Driver {
boolean
existTable
(
Table
table
);
boolean
createTable
(
Table
table
);
boolean
createTable
(
Table
table
)
throws
Exception
;
boolean
dropTable
(
Table
table
);
boolean
dropTable
(
Table
table
)
throws
Exception
;
boolean
truncateTable
(
Table
table
);
boolean
truncateTable
(
Table
table
)
throws
Exception
;
String
getCreateTableSql
(
Table
table
);
...
...
@@ -87,10 +88,14 @@ public interface Driver {
SelectResult select(String sql);*/
boolean
execute
(
String
sql
);
boolean
execute
(
String
sql
)
throws
Exception
;
int
executeUpdate
(
String
sql
)
throws
Exception
;
JdbcSelectResult
query
(
String
sql
,
Integer
limit
);
JdbcSelectResult
executeSql
(
String
sql
,
Integer
limit
);
List
<
SqlExplainResult
>
explain
(
String
sql
);
}
dlink-metadata/dlink-metadata-base/src/main/java/com/dlink/metadata/result/JdbcSelectResult.java
View file @
0bb87154
...
...
@@ -5,7 +5,10 @@ import com.dlink.result.IResult;
import
lombok.Getter
;
import
lombok.Setter
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
/**
...
...
@@ -14,17 +17,79 @@ import java.util.List;
* @author wenmo
* @since 2021/7/19 23:31
*/
@Setter
@Getter
public
class
JdbcSelectResult
extends
AbstractResult
implements
IResult
{
private
List
<
String
>
columns
;
private
List
<
HashMap
<
String
,
Object
>>
rowData
;
private
List
<
Linked
HashMap
<
String
,
Object
>>
rowData
;
private
Integer
total
;
private
Integer
page
;
private
Integer
limit
;
private
static
final
String
STATUS
=
"status"
;
private
static
final
List
<
String
>
STATUS_COLUMN
=
new
ArrayList
<
String
>(){{
add
(
"status"
);
}};
public
JdbcSelectResult
()
{
}
public
static
JdbcSelectResult
buildResult
(){
JdbcSelectResult
result
=
new
JdbcSelectResult
();
result
.
setStartTime
(
LocalDateTime
.
now
());
return
result
;
}
public
void
setStatusList
(
List
<
Object
>
statusList
){
this
.
setColumns
(
STATUS_COLUMN
);
List
<
LinkedHashMap
<
String
,
Object
>>
dataList
=
new
ArrayList
<>();
for
(
Object
item:
statusList
){
LinkedHashMap
map
=
new
LinkedHashMap
<
String
,
Object
>();
map
.
put
(
STATUS
,
item
);
dataList
.
add
(
map
);
}
this
.
setRowData
(
dataList
);
this
.
setTotal
(
statusList
.
size
());
}
@Override
public
String
getJobId
()
{
return
null
;
}
public
List
<
String
>
getColumns
()
{
return
columns
;
}
public
void
setColumns
(
List
<
String
>
columns
)
{
this
.
columns
=
columns
;
}
public
List
<
LinkedHashMap
<
String
,
Object
>>
getRowData
()
{
return
rowData
;
}
public
void
setRowData
(
List
<
LinkedHashMap
<
String
,
Object
>>
rowData
)
{
this
.
rowData
=
rowData
;
}
public
Integer
getTotal
()
{
return
total
;
}
public
void
setTotal
(
Integer
total
)
{
this
.
total
=
total
;
}
public
Integer
getPage
()
{
return
page
;
}
public
void
setPage
(
Integer
page
)
{
this
.
page
=
page
;
}
public
Integer
getLimit
()
{
return
limit
;
}
public
void
setLimit
(
Integer
limit
)
{
this
.
limit
=
limit
;
}
}
dlink-web/src/components/Studio/StudioConsole/StudioMsg/index.tsx
View file @
0bb87154
...
...
@@ -3,7 +3,7 @@ import {StateType} from "@/pages/FlinkSqlStudio/model";
import
{
connect
}
from
"umi"
;
import
{
FireOutlined
,
ScheduleOutlined
}
from
'@ant-design/icons'
;
import
StudioSqlConfig
from
"@/components/Studio/StudioRightTool/StudioSqlConfig"
;
import
{
DIALECT
}
from
"@/components/Studio/conf"
;
import
{
DIALECT
,
isSql
}
from
"@/components/Studio/conf"
;
const
{
Title
,
Paragraph
,
Text
,
Link
}
=
Typography
;
...
...
@@ -56,7 +56,7 @@ const StudioMsg = (props:any) => {
return
(
<
Typography
>
{
current
.
console
.
result
.
startTime
?(
current
.
task
.
dialect
===
DIALECT
.
SQL
?
renderCommonSqlContent
():
{
current
.
console
.
result
.
startTime
?(
isSql
(
current
.
task
.
dialect
)
?
renderCommonSqlContent
():
renderFlinkSqlContent
()
):<
Empty
image=
{
Empty
.
PRESENTED_IMAGE_SIMPLE
}
/>
}
</
Typography
>
...
...
dlink-web/src/components/Studio/StudioConsole/StudioTable/index.tsx
View file @
0bb87154
import
{
Typography
,
Input
,
Button
,
Space
,
Table
,
Select
,
Tag
,
Form
,
Empty
,
Tooltip
}
from
"antd"
;
import
{
StateType
}
from
"@/pages/FlinkSqlStudio/model"
;
import
{
connect
}
from
"umi"
;
import
{
useState
}
from
"react"
;
import
React
,
{
useState
}
from
"react"
;
// import Highlighter from 'react-highlight-words';
import
{
SearchOutlined
}
from
'@ant-design/icons'
;
import
{
FireOutlined
,
SearchOutlined
}
from
'@ant-design/icons'
;
import
{
showJobData
}
from
"@/components/Studio/StudioEvent/DQL"
;
import
ProTable
from
'@ant-design/pro-table'
;
import
{
DIALECT
}
from
"@/components/Studio/conf"
;
import
{
DIALECT
,
isSql
}
from
"@/components/Studio/conf"
;
const
{
Option
}
=
Select
;
const
{
Title
,
Paragraph
,
Text
,
Link
}
=
Typography
;
...
...
@@ -90,7 +90,7 @@ const StudioTable = (props:any) => {
title
:
item
,
dataIndex
:
item
,
key
:
item
,
sorter
:
true
,
//
sorter: true,
...
getColumnSearchProps
(
item
),
});
});
...
...
@@ -100,26 +100,40 @@ const StudioTable = (props:any) => {
const
showDetail
=
()
=>
{
showJobData
(
current
.
console
.
result
.
jobId
,
dispatch
)
};
const
renderFlinkSQLContent
=
()
=>
{
return
(<>
<
Button
type=
"primary"
onClick=
{
showDetail
}
icon=
{
<
SearchOutlined
/>
}
>
获取最新数据
</
Button
>
{
current
.
console
.
result
.
jobId
&&
(<
Tag
color=
"blue"
key=
{
current
.
console
.
result
.
jobId
}
>
<
FireOutlined
/>
{
current
.
console
.
result
.
jobId
}
</
Tag
>)
}
{
result
.
columns
?
<
ProTable
dataSource=
{
result
.
rowData
}
columns=
{
getColumns
(
result
.
columns
)
}
search=
{
false
}
options=
{
{
search
:
false
,
}
}
/>
:(<
Empty
image=
{
Empty
.
PRESENTED_IMAGE_SIMPLE
}
/>)
}
</>)
}
const
renderSQLContent
=
()
=>
{
return
(<>
{
current
.
console
.
result
.
result
?
<
ProTable
dataSource=
{
current
.
console
.
result
.
result
.
rowData
}
columns=
{
getColumns
(
current
.
console
.
result
.
result
.
columns
)
}
search=
{
false
}
options=
{
{
search
:
false
,
}
}
/>
:(<
Empty
image=
{
Empty
.
PRESENTED_IMAGE_SIMPLE
}
/>)
}
</>)
}
return
(
<
div
style=
{
{
width
:
'100%'
}
}
>
{
current
.
console
&&
current
.
console
.
result
.
success
?
(<>
{
current
.
task
.
dialect
===
DIALECT
.
FLINKSQL
?
(<
Button
type=
"primary"
onClick=
{
showDetail
}
icon=
{
<
SearchOutlined
/>
}
>
获取最新数据
</
Button
>):
undefined
}
{
result
.
rowData
&&
result
.
columns
?
<
ProTable
dataSource=
{
result
.
rowData
}
columns=
{
getColumns
(
result
.
columns
)
}
search=
{
false
}
options=
{
{
search
:
false
,
}
}
/>
:(<
Empty
image=
{
Empty
.
PRESENTED_IMAGE_SIMPLE
}
/>)
}
</>):
current
.
console
&&
current
.
console
.
result
&&
current
.
console
.
result
.
result
&&
current
.
console
.
result
.
result
.
rowData
&&
current
.
console
.
result
.
result
.
columns
?
(<
ProTable
dataSource=
{
current
.
console
.
result
.
result
.
rowData
}
columns=
{
getColumns
(
current
.
console
.
result
.
result
.
columns
)
}
search=
{
false
}
/>):(<
Empty
image=
{
Empty
.
PRESENTED_IMAGE_SIMPLE
}
/>)
}
{
isSql
(
current
.
task
.
dialect
)?
renderSQLContent
():
renderFlinkSQLContent
()
}
</
div
>
);
};
...
...
dlink-web/src/components/Studio/StudioMenu/index.tsx
View file @
0bb87154
...
...
@@ -83,12 +83,6 @@ const StudioMenu = (props: any) => {
type
:
"Studio/saveTabs"
,
payload
:
newTabs
,
});
if
(
current
.
task
.
dialect
===
DIALECT
.
SQL
){
dispatch
&&
dispatch
({
type
:
"Studio/saveResult"
,
payload
:
res
.
datas
.
result
,
});
}
useSession
&&
showTables
(
currentSession
.
session
,
dispatch
);
})
};
...
...
dlink-web/src/components/Studio/StudioTree/index.tsx
View file @
0bb87154
...
...
@@ -60,7 +60,7 @@ const StudioTree: React.FC<StudioTreeProps> = (props) => {
list
[
i
].
icon
=
getIcon
(
list
[
i
].
type
);
}
}
data
=
convertToTreeData
(
data
,
0
);
data
=
convertToTreeData
(
list
,
0
);
setTreeData
(
data
);
};
...
...
@@ -75,7 +75,7 @@ const StudioTree: React.FC<StudioTreeProps> = (props) => {
list
[
i
].
icon
=
getIcon
(
list
[
i
].
type
);
}
}
data
=
convertToTreeData
(
data
,
0
);
data
=
convertToTreeData
(
list
,
0
);
setTreeData
(
data
);
let
node
=
getTreeNodeByKey
(
data
,
key
);
onSelect
([],{
node
:
node
});
...
...
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