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
0c95365e
Commit
0c95365e
authored
May 30, 2022
by
zhu-mingye
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/dev' into dev
parents
e5a210de
8d6a9486
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
35 additions
and
11 deletions
+35
-11
StudioCADTO.java
dlink-admin/src/main/java/com/dlink/dto/StudioCADTO.java
+1
-0
StudioServiceImpl.java
...c/main/java/com/dlink/service/impl/StudioServiceImpl.java
+9
-2
LineageBuilder.java
...n/java/com/dlink/explainer/sqlLineage/LineageBuilder.java
+23
-9
index.tsx
...eb/src/components/Studio/StudioConsole/StudioCA/index.tsx
+1
-0
data.d.ts
dlink-web/src/components/Studio/StudioEdit/data.d.ts
+1
-0
No files found.
dlink-admin/src/main/java/com/dlink/dto/StudioCADTO.java
View file @
0c95365e
...
...
@@ -16,4 +16,5 @@ public class StudioCADTO extends AbstractStatementDTO {
private
Boolean
statementSet
;
private
Integer
type
;
private
String
dialect
;
private
Integer
databaseId
;
}
dlink-admin/src/main/java/com/dlink/service/impl/StudioServiceImpl.java
View file @
0c95365e
...
...
@@ -257,10 +257,17 @@ public class StudioServiceImpl implements StudioService {
@Override
public
LineageResult
getLineage
(
StudioCADTO
studioCADTO
)
{
if
(
Asserts
.
isNotNullString
(
studioCADTO
.
getDialect
())
&&
!
studioCADTO
.
getDialect
().
equalsIgnoreCase
(
"flinksql"
))
{
if
(
Asserts
.
isNull
(
studioCADTO
.
getDatabaseId
())){
return
null
;
}
DataBase
dataBase
=
dataBaseService
.
getById
(
studioCADTO
.
getDatabaseId
());
if
(
Asserts
.
isNull
(
dataBase
))
{
return
null
;
}
if
(
studioCADTO
.
getDialect
().
equalsIgnoreCase
(
"doris"
)){
return
com
.
dlink
.
explainer
.
sqlLineage
.
LineageBuilder
.
getSqlLineage
(
studioCADTO
.
getStatement
(),
"mysql"
);
return
com
.
dlink
.
explainer
.
sqlLineage
.
LineageBuilder
.
getSqlLineage
(
studioCADTO
.
getStatement
(),
"mysql"
,
dataBase
.
getDriverConfig
()
);
}
else
{
return
com
.
dlink
.
explainer
.
sqlLineage
.
LineageBuilder
.
getSqlLineage
(
studioCADTO
.
getStatement
(),
studioCADTO
.
getDialect
().
toLowerCase
());
return
com
.
dlink
.
explainer
.
sqlLineage
.
LineageBuilder
.
getSqlLineage
(
studioCADTO
.
getStatement
(),
studioCADTO
.
getDialect
().
toLowerCase
(),
dataBase
.
getDriverConfig
());
}
}
else
{
addFlinkSQLEnv
(
studioCADTO
);
...
...
dlink-core/src/main/java/com/dlink/explainer/sqlLineage/LineageBuilder.java
View file @
0c95365e
...
...
@@ -11,6 +11,9 @@ import com.dlink.assertion.Asserts;
import
com.dlink.explainer.lineage.LineageRelation
;
import
com.dlink.explainer.lineage.LineageResult
;
import
com.dlink.explainer.lineage.LineageTable
;
import
com.dlink.metadata.driver.Driver
;
import
com.dlink.metadata.driver.DriverConfig
;
import
com.dlink.model.Column
;
import
java.util.*
;
...
...
@@ -122,30 +125,41 @@ public class LineageBuilder {
return
LineageResult
.
build
(
tables
,
relations
);
}
public
static
LineageResult
getSqlLineage
(
String
statement
,
String
type
)
{
public
static
LineageResult
getSqlLineage
(
String
statement
,
String
type
,
DriverConfig
driverConfig
)
{
List
<
LineageTable
>
tables
=
new
ArrayList
<>();
List
<
LineageRelation
>
relations
=
new
ArrayList
<>();
Map
<
Integer
,
List
<
List
<
TableStat
.
Column
>>>
srcMap
=
new
HashMap
<>();
Map
<
Integer
,
List
<
TableStat
.
Column
>>
tgtMap
=
new
HashMap
<>();
Map
<
String
,
String
>
tableMap
=
new
HashMap
<>();
List
<
TableStat
.
Column
>
allColumnList
=
new
ArrayList
<>();
String
[]
sqls
=
statement
.
split
(
";"
);
try
{
List
<
SQLStatement
>
sqlStatements
=
SQLUtils
.
parseStatements
(
statement
.
toLowerCase
()
,
type
);
List
<
SQLStatement
>
sqlStatements
=
SQLUtils
.
parseStatements
(
statement
,
type
);
for
(
int
n
=
0
;
n
<
sqlStatements
.
size
();
n
++)
{
SQLStatement
sqlStatement
=
sqlStatements
.
get
(
n
);
List
<
List
<
TableStat
.
Column
>>
srcLists
=
new
ArrayList
<>();
List
<
TableStat
.
Column
>
tgtList
=
new
ArrayList
<>();
//只考虑insert语句
if
(
sqlStatement
instanceof
SQLInsertStatement
)
{
String
targetTable
=
((
SQLInsertStatement
)
sqlStatement
).
getTableName
().
toString
();
String
targetTable
=
((
SQLInsertStatement
)
sqlStatement
).
getTableName
().
toString
()
.
replace
(
"`"
,
""
).
replace
(
"\""
,
""
)
;
List
<
SQLExpr
>
columns
=
((
SQLInsertStatement
)
sqlStatement
).
getColumns
();
//处理target表中字段
for
(
SQLExpr
column
:
columns
)
{
if
(
column
instanceof
SQLPropertyExpr
)
{
tgtList
.
add
(
new
TableStat
.
Column
(
targetTable
,
((
SQLPropertyExpr
)
column
).
getName
().
replace
(
"`"
,
""
).
replace
(
"\""
,
""
)));
}
else
if
(
column
instanceof
SQLIdentifierExpr
)
{
tgtList
.
add
(
new
TableStat
.
Column
(
targetTable
,
((
SQLIdentifierExpr
)
column
).
getName
().
replace
(
"`"
,
""
).
replace
(
"\""
,
""
)));
if
(
columns
.
size
()
<=
0
||
sqls
[
n
].
contains
(
"*"
))
{
Driver
driver
=
Driver
.
build
(
driverConfig
);
if
(!
targetTable
.
contains
(
"."
)){
return
null
;
}
List
<
Column
>
columns1
=
driver
.
listColumns
(
targetTable
.
split
(
"\\."
)[
0
],
targetTable
.
split
(
"\\."
)[
1
]);
for
(
Column
column
:
columns1
)
{
tgtList
.
add
(
new
TableStat
.
Column
(
targetTable
,
column
.
getName
()));
}
}
else
{
for
(
SQLExpr
column
:
columns
)
{
if
(
column
instanceof
SQLPropertyExpr
)
{
tgtList
.
add
(
new
TableStat
.
Column
(
targetTable
,
((
SQLPropertyExpr
)
column
).
getName
().
replace
(
"`"
,
""
).
replace
(
"\""
,
""
)));
}
else
if
(
column
instanceof
SQLIdentifierExpr
)
{
tgtList
.
add
(
new
TableStat
.
Column
(
targetTable
,
((
SQLIdentifierExpr
)
column
).
getName
().
replace
(
"`"
,
""
).
replace
(
"\""
,
""
)));
}
}
}
//处理select 生成srcLists
...
...
dlink-web/src/components/Studio/StudioConsole/StudioCA/index.tsx
View file @
0c95365e
...
...
@@ -19,6 +19,7 @@ const StudioCA = (props: any) => {
statement
:
current
.
value
,
statementSet
:
current
.
task
.
statementSet
,
dialect
:
current
.
task
.
dialect
,
databaseId
:
current
.
task
.
databaseId
,
type
:
1
,
});
res
.
then
((
result
)
=>
{
...
...
dlink-web/src/components/Studio/StudioEdit/data.d.ts
View file @
0c95365e
...
...
@@ -48,4 +48,5 @@ export type CAParam = {
statementSet
:
boolean
,
type
:
number
,
dialect
?:
string
,
databaseId
?:
number
,
}
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