Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
5eb345db
Shardingsphere
项目概览
apache
/
Shardingsphere
通知
56
Star
3
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Shardingsphere
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
5eb345db
编写于
10月 08, 2018
作者:
C
codefairy08
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update TreeUtils paramter type and return type
上级
0fee3e3e
变更
22
隐藏空白更改
内联
并排
Showing
22 changed file
with
176 addition
and
108 deletion
+176
-108
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/AddColumnVisitor.java
.../core/parsing/antler/phrase/visitor/AddColumnVisitor.java
+5
-5
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/AddPrimaryKeyVisitor.java
...e/parsing/antler/phrase/visitor/AddPrimaryKeyVisitor.java
+3
-3
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/ColumnDefinitionVisitor.java
...arsing/antler/phrase/visitor/ColumnDefinitionVisitor.java
+2
-3
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/DropColumnVisitor.java
...core/parsing/antler/phrase/visitor/DropColumnVisitor.java
+3
-3
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/DropPrimaryKeyVisitor.java
.../parsing/antler/phrase/visitor/DropPrimaryKeyVisitor.java
+1
-1
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/ModifyColumnVisitor.java
...re/parsing/antler/phrase/visitor/ModifyColumnVisitor.java
+2
-2
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/RenameColumnVisitor.java
...re/parsing/antler/phrase/visitor/RenameColumnVisitor.java
+2
-3
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/RenameIndexVisitor.java
...ore/parsing/antler/phrase/visitor/RenameIndexVisitor.java
+24
-9
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/RenameTableVisitor.java
...ore/parsing/antler/phrase/visitor/RenameTableVisitor.java
+2
-2
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/TableNameVisitor.java
.../core/parsing/antler/phrase/visitor/TableNameVisitor.java
+5
-5
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/TableNamesVisitor.java
...core/parsing/antler/phrase/visitor/TableNamesVisitor.java
+1
-1
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/mysql/MySQLAddIndexVisitor.java
...ing/antler/phrase/visitor/mysql/MySQLAddIndexVisitor.java
+5
-5
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/mysql/MySQLAddPrimaryKeyVisitor.java
...ntler/phrase/visitor/mysql/MySQLAddPrimaryKeyVisitor.java
+3
-3
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/mysql/MySQLChangeColumnVisitor.java
...antler/phrase/visitor/mysql/MySQLChangeColumnVisitor.java
+3
-3
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/mysql/MySQLDropIndexVisitor.java
...ng/antler/phrase/visitor/mysql/MySQLDropIndexVisitor.java
+18
-6
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/oracle/OracleDropPrimaryKeyVisitor.java
...er/phrase/visitor/oracle/OracleDropPrimaryKeyVisitor.java
+2
-18
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/oracle/OracleModifyColumnVisitor.java
...tler/phrase/visitor/oracle/OracleModifyColumnVisitor.java
+3
-4
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/sqlserver/SQLServerAddIndexVisitor.java
...er/phrase/visitor/sqlserver/SQLServerAddIndexVisitor.java
+5
-5
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/sqlserver/SQLServerAddPrimaryKeyVisitor.java
...rase/visitor/sqlserver/SQLServerAddPrimaryKeyVisitor.java
+4
-4
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/sqlserver/SQLServerDropIndexVisitor.java
...r/phrase/visitor/sqlserver/SQLServerDropIndexVisitor.java
+5
-5
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/utils/TreeUtils.java
...o/shardingsphere/core/parsing/antler/utils/TreeUtils.java
+15
-8
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/utils/VisitorUtils.java
...hardingsphere/core/parsing/antler/utils/VisitorUtils.java
+63
-10
未找到文件。
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/AddColumnVisitor.java
浏览文件 @
5eb345db
...
...
@@ -37,23 +37,23 @@ public class AddColumnVisitor extends ColumnDefinitionVisitor {
@Override
public
void
visit
(
final
ParserRuleContext
ancestorNode
,
final
SQLStatement
statement
)
{
AlterTableStatement
alterStatement
=
(
AlterTableStatement
)
statement
;
List
<
Parse
Tree
>
addColumnCtxs
=
TreeUtils
.
getAllDescendantByRuleName
(
ancestorNode
,
"addColumn"
);
List
<
Parse
rRuleContext
>
addColumnCtxs
=
TreeUtils
.
getAllDescendantByRuleName
(
ancestorNode
,
"addColumn"
);
if
(
null
==
addColumnCtxs
)
{
return
;
}
for
(
Parse
Tree
each
:
addColumnCtxs
)
{
for
(
Parse
rRuleContext
each
:
addColumnCtxs
)
{
visitAddColumn
(
each
,
alterStatement
);
}
}
public
void
visitAddColumn
(
final
Parse
Tree
addColumnCtx
,
final
AlterTableStatement
alterStatement
)
{
List
<
Parse
Tree
>
columnDefinitionCtxs
=
TreeUtils
.
getAllDescendantByRuleName
(
addColumnCtx
,
"columnDefinition"
);
public
void
visitAddColumn
(
final
Parse
rRuleContext
addColumnCtx
,
final
AlterTableStatement
alterStatement
)
{
List
<
Parse
rRuleContext
>
columnDefinitionCtxs
=
TreeUtils
.
getAllDescendantByRuleName
(
addColumnCtx
,
"columnDefinition"
);
if
(
null
==
columnDefinitionCtxs
)
{
return
;
}
for
(
Parse
Tree
columnDefinitionCtx
:
columnDefinitionCtxs
)
{
for
(
Parse
rRuleContext
columnDefinitionCtx
:
columnDefinitionCtxs
)
{
ColumnDefinition
column
=
VisitorUtils
.
visitColumnDefinition
(
columnDefinitionCtx
);
if
(
null
!=
column
)
{
alterStatement
.
getAddColumns
().
add
(
column
);
...
...
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/AddPrimaryKeyVisitor.java
浏览文件 @
5eb345db
...
...
@@ -40,7 +40,7 @@ public class AddPrimaryKeyVisitor implements PhraseVisitor {
public
void
visit
(
final
ParserRuleContext
ancestorNode
,
final
SQLStatement
statement
)
{
AlterTableStatement
alterStatement
=
(
AlterTableStatement
)
statement
;
ParserRuleContext
modifyColumnCtx
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
ruleName
);
ParserRuleContext
modifyColumnCtx
=
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
ruleName
);
if
(
null
==
modifyColumnCtx
)
{
return
;
}
...
...
@@ -50,11 +50,11 @@ public class AddPrimaryKeyVisitor implements PhraseVisitor {
return
;
}
List
<
Parse
Tree
>
columnNodes
=
TreeUtils
.
getAllDescendantByRuleName
(
modifyColumnCtx
,
"columnName"
);
List
<
Parse
rRuleContext
>
columnNodes
=
TreeUtils
.
getAllDescendantByRuleName
(
modifyColumnCtx
,
"columnName"
);
if
(
null
==
columnNodes
)
{
return
;
}
for
(
final
Parse
Tree
each
:
columnNodes
)
{
for
(
final
Parse
rRuleContext
each
:
columnNodes
)
{
String
columnName
=
each
.
getText
();
ColumnDefinition
updateColumn
=
alterStatement
.
getUpdateColumns
().
get
(
columnName
);
if
(
null
==
updateColumn
)
{
...
...
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/ColumnDefinitionVisitor.java
浏览文件 @
5eb345db
...
...
@@ -20,7 +20,6 @@ package io.shardingsphere.core.parsing.antler.phrase.visitor;
import
java.util.List
;
import
org.antlr.v4.runtime.ParserRuleContext
;
import
org.antlr.v4.runtime.tree.ParseTree
;
import
io.shardingsphere.core.parsing.antler.sql.ddl.ColumnDefinition
;
import
io.shardingsphere.core.parsing.antler.utils.TreeUtils
;
...
...
@@ -38,12 +37,12 @@ public class ColumnDefinitionVisitor implements PhraseVisitor {
public
void
visit
(
final
ParserRuleContext
ancestorNode
,
final
SQLStatement
statement
)
{
CreateTableStatement
createStatement
=
(
CreateTableStatement
)
statement
;
List
<
Parse
Tree
>
columnDefinitions
=
TreeUtils
.
getAllDescendantByRuleName
(
ancestorNode
,
"ColumnDefinition"
);
List
<
Parse
rRuleContext
>
columnDefinitions
=
TreeUtils
.
getAllDescendantByRuleName
(
ancestorNode
,
"ColumnDefinition"
);
if
(
null
==
columnDefinitions
)
{
return
;
}
for
(
final
Parse
Tree
each
:
columnDefinitions
)
{
for
(
final
Parse
rRuleContext
each
:
columnDefinitions
)
{
ColumnDefinition
column
=
VisitorUtils
.
visitColumnDefinition
(
each
);
if
(
null
==
column
)
{
continue
;
...
...
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/DropColumnVisitor.java
浏览文件 @
5eb345db
...
...
@@ -36,13 +36,13 @@ public class DropColumnVisitor implements PhraseVisitor {
@Override
public
void
visit
(
final
ParserRuleContext
ancestorNode
,
final
SQLStatement
statement
)
{
AlterTableStatement
alterStatement
=
(
AlterTableStatement
)
statement
;
List
<
Parse
Tree
>
dropColumnCtxs
=
TreeUtils
.
getAllDescendantByRuleName
(
ancestorNode
,
"dropColumn"
);
List
<
Parse
rRuleContext
>
dropColumnCtxs
=
TreeUtils
.
getAllDescendantByRuleName
(
ancestorNode
,
"dropColumn"
);
if
(
null
==
dropColumnCtxs
)
{
return
;
}
for
(
Parse
Tree
each
:
dropColumnCtxs
)
{
List
<
Parse
Tree
>
columnNodes
=
TreeUtils
.
getAllDescendantByRuleName
(
each
,
"columnName"
);
for
(
Parse
rRuleContext
each
:
dropColumnCtxs
)
{
List
<
Parse
rRuleContext
>
columnNodes
=
TreeUtils
.
getAllDescendantByRuleName
(
each
,
"columnName"
);
if
(
null
==
columnNodes
)
{
continue
;
}
...
...
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/DropPrimaryKeyVisitor.java
浏览文件 @
5eb345db
...
...
@@ -33,7 +33,7 @@ public class DropPrimaryKeyVisitor implements PhraseVisitor {
public
void
visit
(
final
ParserRuleContext
ancestorNode
,
final
SQLStatement
statement
)
{
AlterTableStatement
alterStatement
=
(
AlterTableStatement
)
statement
;
ParserRuleContext
dropPrimaryKeyNode
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
ParserRuleContext
dropPrimaryKeyNode
=
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
"dropPrimaryKey"
);
if
(
null
!=
dropPrimaryKeyNode
)
{
alterStatement
.
setDropPrimaryKey
(
true
);
...
...
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/ModifyColumnVisitor.java
浏览文件 @
5eb345db
...
...
@@ -38,12 +38,12 @@ public class ModifyColumnVisitor implements PhraseVisitor {
public
void
visit
(
final
ParserRuleContext
ancestorNode
,
final
SQLStatement
statement
)
{
AlterTableStatement
alterStatement
=
(
AlterTableStatement
)
statement
;
List
<
Parse
Tree
>
modifyColumnCtxs
=
TreeUtils
.
getAllDescendantByRuleName
(
ancestorNode
,
"modifyColumn"
);
List
<
Parse
rRuleContext
>
modifyColumnCtxs
=
TreeUtils
.
getAllDescendantByRuleName
(
ancestorNode
,
"modifyColumn"
);
if
(
null
==
modifyColumnCtxs
)
{
return
;
}
for
(
Parse
Tree
each
:
modifyColumnCtxs
)
{
for
(
Parse
rRuleContext
each
:
modifyColumnCtxs
)
{
// it`s not columndefinition, but can call this method
ColumnDefinition
column
=
VisitorUtils
.
visitColumnDefinition
(
each
);
if
(
null
!=
column
)
{
...
...
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/RenameColumnVisitor.java
浏览文件 @
5eb345db
...
...
@@ -20,7 +20,6 @@ package io.shardingsphere.core.parsing.antler.phrase.visitor;
import
java.util.List
;
import
org.antlr.v4.runtime.ParserRuleContext
;
import
org.antlr.v4.runtime.tree.ParseTree
;
import
io.shardingsphere.core.parsing.antler.sql.ddl.AlterTableStatement
;
import
io.shardingsphere.core.parsing.antler.sql.ddl.ColumnDefinition
;
...
...
@@ -37,13 +36,13 @@ public class RenameColumnVisitor implements PhraseVisitor {
public
void
visit
(
final
ParserRuleContext
ancestorNode
,
final
SQLStatement
statement
)
{
AlterTableStatement
alterStatement
=
(
AlterTableStatement
)
statement
;
ParserRuleContext
modifyColumnCtx
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
ParserRuleContext
modifyColumnCtx
=
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
"renameColumn"
);
if
(
null
==
modifyColumnCtx
)
{
return
;
}
List
<
Parse
Tree
>
columnNodes
=
TreeUtils
.
getAllDescendantByRuleName
(
modifyColumnCtx
,
"columnName"
);
List
<
Parse
rRuleContext
>
columnNodes
=
TreeUtils
.
getAllDescendantByRuleName
(
modifyColumnCtx
,
"columnName"
);
if
(
null
==
columnNodes
||
columnNodes
.
size
()
!=
2
)
{
return
;
}
...
...
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/RenameIndexVisitor.java
浏览文件 @
5eb345db
...
...
@@ -18,10 +18,11 @@
package
io.shardingsphere.core.parsing.antler.phrase.visitor
;
import
org.antlr.v4.runtime.ParserRuleContext
;
import
org.antlr.v4.runtime.tree.ParseTree
;
import
io.shardingsphere.core.parsing.antler.utils.TreeUtils
;
import
io.shardingsphere.core.parsing.antler.utils.VisitorUtils
;
import
io.shardingsphere.core.parsing.parser.sql.SQLStatement
;
import
io.shardingsphere.core.parsing.parser.token.IndexToken
;
public
class
RenameIndexVisitor
implements
PhraseVisitor
{
...
...
@@ -33,14 +34,28 @@ public class RenameIndexVisitor implements PhraseVisitor {
public
void
visit
(
final
ParserRuleContext
ancestorNode
,
final
SQLStatement
statement
)
{
ParserRuleContext
renameIndexNode
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
"renameIndex"
);
if
(
null
!=
renameIndexNode
)
{
ParserRuleContext
oldIndexNode
=
(
ParserRuleContext
)
renameIndexNode
.
getChild
(
2
);
ParserRuleContext
newIndexNode
=
(
ParserRuleContext
)
renameIndexNode
.
getChild
(
renameIndexNode
.
getChildCount
()
-
1
);
statement
.
getSqlTokens
().
add
(
new
IndexToken
(
oldIndexNode
.
getStart
().
getStartIndex
(),
oldIndexNode
.
getText
(),
statement
.
getTables
().
getSingleTableName
()));
statement
.
getSqlTokens
().
add
(
new
IndexToken
(
newIndexNode
.
getStart
().
getStartIndex
(),
newIndexNode
.
getText
(),
statement
.
getTables
().
getSingleTableName
()));
if
(
null
==
renameIndexNode
||
4
>
renameIndexNode
.
getChildCount
())
{
return
;
}
ParseTree
oldIndexNode
=
renameIndexNode
.
getChild
(
2
);
if
(!(
oldIndexNode
instanceof
ParserRuleContext
))
{
return
;
}
ParseTree
newIndexNode
=
renameIndexNode
.
getChild
(
4
);
if
(!(
newIndexNode
instanceof
ParserRuleContext
))
{
return
;
}
ParserRuleContext
oldIndexCtx
=
(
ParserRuleContext
)
oldIndexNode
;
ParserRuleContext
newIndexCtx
=
(
ParserRuleContext
)
newIndexNode
;
statement
.
getSqlTokens
()
.
add
(
VisitorUtils
.
visitIndex
(
oldIndexCtx
,
statement
.
getTables
().
getSingleTableName
()));
statement
.
getSqlTokens
()
.
add
(
VisitorUtils
.
visitIndex
(
newIndexCtx
,
statement
.
getTables
().
getSingleTableName
()));
}
}
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/RenameTableVisitor.java
浏览文件 @
5eb345db
...
...
@@ -33,9 +33,9 @@ public class RenameTableVisitor implements PhraseVisitor {
public
void
visit
(
final
ParserRuleContext
ancestorNode
,
final
SQLStatement
statement
)
{
AlterTableStatement
alterStatement
=
(
AlterTableStatement
)
statement
;
ParserRuleContext
renameTableNode
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
ParserRuleContext
renameTableNode
=
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
"renameTable"
);
if
(
null
!=
renameTableNode
)
{
if
(
null
!=
renameTableNode
&&
0
<
renameTableNode
.
getChildCount
()
)
{
alterStatement
.
setNewTableName
(
renameTableNode
.
getChild
(
renameTableNode
.
getChildCount
()
-
1
).
getText
());
}
}
...
...
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/TableNameVisitor.java
浏览文件 @
5eb345db
...
...
@@ -30,16 +30,16 @@ import io.shardingsphere.core.util.SQLUtil;
public
class
TableNameVisitor
implements
PhraseVisitor
{
/** Visit table na
em
node.
/** Visit table na
me
node.
* @param ancestorNode ancestor node of ast
* @param statement sql statement
*/
@Override
public
void
visit
(
final
ParserRuleContext
ancestorNode
,
final
SQLStatement
statement
)
{
ParserRuleContext
tableName
Node
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
ParserRuleContext
tableName
Ctx
=
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
"tableName"
);
if
(
null
!=
tableName
Node
)
{
String
name
=
tableName
Node
.
getText
();
if
(
null
!=
tableName
Ctx
)
{
String
name
=
tableName
Ctx
.
getText
();
if
(
null
==
name
)
{
return
;
}
...
...
@@ -54,7 +54,7 @@ public class TableNameVisitor implements PhraseVisitor {
literals
=
name
;
}
statement
.
getSqlTokens
().
add
(
new
TableToken
(
tableName
Node
.
getStart
().
getStartIndex
(),
pos
,
name
));
statement
.
getSqlTokens
().
add
(
new
TableToken
(
tableName
Ctx
.
getStart
().
getStartIndex
(),
pos
,
name
));
statement
.
getTables
().
add
(
new
Table
(
SQLUtil
.
getExactlyValue
(
literals
),
Optional
.<
String
>
absent
()));
}
}
...
...
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/TableNamesVisitor.java
浏览文件 @
5eb345db
...
...
@@ -33,7 +33,7 @@ public class TableNamesVisitor extends TableNameVisitor {
*/
@Override
public
void
visit
(
final
ParserRuleContext
ancestorNode
,
final
SQLStatement
statement
)
{
List
<
Parse
Tree
>
tableNameCtxs
=
TreeUtils
.
getAllDescendantByRuleName
(
ancestorNode
,
"tableName"
);
List
<
Parse
rRuleContext
>
tableNameCtxs
=
TreeUtils
.
getAllDescendantByRuleName
(
ancestorNode
,
"tableName"
);
if
(
null
==
tableNameCtxs
)
{
return
;
...
...
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/mysql/MySQLAddIndexVisitor.java
浏览文件 @
5eb345db
...
...
@@ -21,8 +21,8 @@ import org.antlr.v4.runtime.ParserRuleContext;
import
io.shardingsphere.core.parsing.antler.phrase.visitor.PhraseVisitor
;
import
io.shardingsphere.core.parsing.antler.utils.TreeUtils
;
import
io.shardingsphere.core.parsing.antler.utils.VisitorUtils
;
import
io.shardingsphere.core.parsing.parser.sql.SQLStatement
;
import
io.shardingsphere.core.parsing.parser.token.IndexToken
;
public
class
MySQLAddIndexVisitor
implements
PhraseVisitor
{
...
...
@@ -32,14 +32,14 @@ public class MySQLAddIndexVisitor implements PhraseVisitor {
*/
@Override
public
void
visit
(
final
ParserRuleContext
ancestorNode
,
final
SQLStatement
statement
)
{
ParserRuleContext
indexDefOptionNode
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
ParserRuleContext
indexDefOptionNode
=
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
"indexDefOption"
);
if
(
null
!=
indexDefOptionNode
)
{
ParserRuleContext
indexNameNode
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
indexDefOptionNode
,
ParserRuleContext
indexNameNode
=
TreeUtils
.
getFirstChildByRuleName
(
indexDefOptionNode
,
"indexName"
);
if
(
null
!=
indexNameNode
)
{
statement
.
getSqlTokens
()
.
add
(
new
IndexToken
(
indexNameNode
.
getStart
().
getStartIndex
(),
indexNameNode
.
getText
()
,
statement
.
getTables
().
getSingleTableName
()));
statement
.
getSqlTokens
()
.
add
(
VisitorUtils
.
visitIndex
(
indexNameNode
,
statement
.
getTables
().
getSingleTableName
()));
}
}
}
...
...
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/mysql/MySQLAddPrimaryKeyVisitor.java
浏览文件 @
5eb345db
...
...
@@ -38,19 +38,19 @@ public class MySQLAddPrimaryKeyVisitor implements PhraseVisitor {
public
void
visit
(
final
ParserRuleContext
ancestorNode
,
final
SQLStatement
statement
)
{
AlterTableStatement
alterStatement
=
(
AlterTableStatement
)
statement
;
ParserRuleContext
constraintDefinitionNode
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
ParserRuleContext
constraintDefinitionNode
=
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
"addConstraint"
);
if
(
null
==
constraintDefinitionNode
)
{
return
;
}
ParserRuleContext
primaryKeyOptionNode
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
ParserRuleContext
primaryKeyOptionNode
=
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
"primaryKeyOption"
);
if
(
null
==
primaryKeyOptionNode
)
{
return
;
}
List
<
Parse
Tree
>
keyPartNodes
=
TreeUtils
.
getAllDescendantByRuleName
(
ancestorNode
,
"keyPart"
);
List
<
Parse
rRuleContext
>
keyPartNodes
=
TreeUtils
.
getAllDescendantByRuleName
(
ancestorNode
,
"keyPart"
);
if
(
null
==
keyPartNodes
)
{
return
;
}
...
...
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/mysql/MySQLChangeColumnVisitor.java
浏览文件 @
5eb345db
...
...
@@ -33,20 +33,20 @@ public class MySQLChangeColumnVisitor implements PhraseVisitor {
public
void
visit
(
final
ParserRuleContext
ancestorNode
,
final
SQLStatement
statement
)
{
MySQLAlterTableStatement
alterStatement
=
(
MySQLAlterTableStatement
)
statement
;
ParserRuleContext
changeColumnCtx
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
ParserRuleContext
changeColumnCtx
=
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
"changeColumn"
);
if
(
null
==
changeColumnCtx
)
{
return
;
}
ParserRuleContext
oldColumnCtx
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
changeColumnCtx
,
ParserRuleContext
oldColumnCtx
=
TreeUtils
.
getFirstChildByRuleName
(
changeColumnCtx
,
"columnName"
);
if
(
null
==
oldColumnCtx
)
{
return
;
}
ParserRuleContext
columnDefinitionCtx
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
changeColumnCtx
,
ParserRuleContext
columnDefinitionCtx
=
TreeUtils
.
getFirstChildByRuleName
(
changeColumnCtx
,
"columnDefinition"
);
if
(
null
==
columnDefinitionCtx
)
{
...
...
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/mysql/MySQLDropIndexVisitor.java
浏览文件 @
5eb345db
...
...
@@ -18,11 +18,12 @@
package
io.shardingsphere.core.parsing.antler.phrase.visitor.mysql
;
import
org.antlr.v4.runtime.ParserRuleContext
;
import
org.antlr.v4.runtime.tree.ParseTree
;
import
io.shardingsphere.core.parsing.antler.phrase.visitor.PhraseVisitor
;
import
io.shardingsphere.core.parsing.antler.utils.TreeUtils
;
import
io.shardingsphere.core.parsing.antler.utils.VisitorUtils
;
import
io.shardingsphere.core.parsing.parser.sql.SQLStatement
;
import
io.shardingsphere.core.parsing.parser.token.IndexToken
;
public
class
MySQLDropIndexVisitor
implements
PhraseVisitor
{
...
...
@@ -32,17 +33,28 @@ public class MySQLDropIndexVisitor implements PhraseVisitor {
*/
@Override
public
void
visit
(
final
ParserRuleContext
ancestorNode
,
final
SQLStatement
statement
)
{
ParserRuleContext
dropIndexDefNode
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
ParserRuleContext
dropIndexDefNode
=
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
"dropIndexDef"
);
if
(
null
==
dropIndexDefNode
)
{
return
;
}
int
childCnt
=
dropIndexDefNode
.
getChildCount
();
if
(
0
==
childCnt
)
{
return
;
}
ParseTree
lastChild
=
dropIndexDefNode
.
getChild
(
childCnt
-
1
);
if
(!(
lastChild
instanceof
ParserRuleContext
))
{
return
;
}
ParserRuleContext
indexNameNode
=
(
ParserRuleContext
)
dropIndexDefNode
.
getChild
(
dropIndexDefNode
.
getChildCount
()
-
1
);
ParserRuleContext
indexNameNode
=
(
ParserRuleContext
)
lastChild
;
if
(
null
!=
indexNameNode
)
{
statement
.
getSqlTokens
()
.
add
(
new
IndexToken
(
indexNameNode
.
getStart
().
getStartIndex
(),
indexNameNode
.
getText
()
,
statement
.
getTables
().
getSingleTableName
()));
statement
.
getSqlTokens
()
.
add
(
VisitorUtils
.
visitIndex
(
indexNameNode
,
statement
.
getTables
().
getSingleTableName
()));
}
}
...
...
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/oracle/OracleDropPrimaryKeyVisitor.java
浏览文件 @
5eb345db
...
...
@@ -16,24 +16,8 @@
*/
package
io.shardingsphere.core.parsing.antler.phrase.visitor.oracle
;
/*
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* </p>
*/
import
org.antlr.v4.runtime.ParserRuleContext
;
import
org.antlr.v4.runtime.tree.ParseTree
;
import
io.shardingsphere.core.parsing.antler.phrase.visitor.PhraseVisitor
;
import
io.shardingsphere.core.parsing.antler.sql.ddl.AlterTableStatement
;
...
...
@@ -50,9 +34,9 @@ public class OracleDropPrimaryKeyVisitor implements PhraseVisitor {
public
void
visit
(
final
ParserRuleContext
rootNode
,
final
SQLStatement
statement
)
{
AlterTableStatement
alterStatement
=
(
AlterTableStatement
)
statement
;
Parse
Tree
dropConstraintCtx
=
TreeUtils
.
getFirstChildByRuleName
(
rootNode
,
"dropConstraintClause"
);
Parse
rRuleContext
dropConstraintCtx
=
TreeUtils
.
getFirstChildByRuleName
(
rootNode
,
"dropConstraintClause"
);
if
(
null
!=
dropConstraintCtx
)
{
Parse
Tree
primaryKeyCtx
=
TreeUtils
.
getFirstChildByRuleName
(
dropConstraintCtx
,
"primaryKey"
);
Parse
rRuleContext
primaryKeyCtx
=
TreeUtils
.
getFirstChildByRuleName
(
dropConstraintCtx
,
"primaryKey"
);
if
(
null
!=
primaryKeyCtx
)
{
alterStatement
.
setDropPrimaryKey
(
true
);
}
...
...
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/oracle/OracleModifyColumnVisitor.java
浏览文件 @
5eb345db
...
...
@@ -20,7 +20,6 @@ package io.shardingsphere.core.parsing.antler.phrase.visitor.oracle;
import
java.util.List
;
import
org.antlr.v4.runtime.ParserRuleContext
;
import
org.antlr.v4.runtime.tree.ParseTree
;
import
io.shardingsphere.core.parsing.antler.phrase.visitor.PhraseVisitor
;
import
io.shardingsphere.core.parsing.antler.sql.ddl.AlterTableStatement
;
...
...
@@ -35,18 +34,18 @@ public class OracleModifyColumnVisitor implements PhraseVisitor {
public
void
visit
(
final
ParserRuleContext
ancestorNode
,
final
SQLStatement
statement
)
{
AlterTableStatement
alterStatement
=
(
AlterTableStatement
)
statement
;
ParserRuleContext
modifyColumnCtx
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
ParserRuleContext
modifyColumnCtx
=
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
"modifyColumn"
);
if
(
null
==
modifyColumnCtx
)
{
return
;
}
List
<
Parse
Tree
>
columnNodes
=
TreeUtils
.
getAllDescendantByRuleName
(
modifyColumnCtx
,
"modifyColProperties"
);
List
<
Parse
rRuleContext
>
columnNodes
=
TreeUtils
.
getAllDescendantByRuleName
(
modifyColumnCtx
,
"modifyColProperties"
);
if
(
null
==
columnNodes
)
{
return
;
}
for
(
final
Parse
Tree
each
:
columnNodes
)
{
for
(
final
Parse
rRuleContext
each
:
columnNodes
)
{
// it`s not columndefinition, but can call this method
ColumnDefinition
column
=
VisitorUtils
.
visitColumnDefinition
(
each
);
if
(
null
!=
column
)
{
...
...
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/sqlserver/SQLServerAddIndexVisitor.java
浏览文件 @
5eb345db
...
...
@@ -21,8 +21,8 @@ import org.antlr.v4.runtime.ParserRuleContext;
import
io.shardingsphere.core.parsing.antler.phrase.visitor.PhraseVisitor
;
import
io.shardingsphere.core.parsing.antler.utils.TreeUtils
;
import
io.shardingsphere.core.parsing.antler.utils.VisitorUtils
;
import
io.shardingsphere.core.parsing.parser.sql.SQLStatement
;
import
io.shardingsphere.core.parsing.parser.token.IndexToken
;
public
class
SQLServerAddIndexVisitor
implements
PhraseVisitor
{
...
...
@@ -32,17 +32,17 @@ public class SQLServerAddIndexVisitor implements PhraseVisitor {
*/
@Override
public
void
visit
(
final
ParserRuleContext
ancestorNode
,
final
SQLStatement
statement
)
{
ParserRuleContext
indexDefOptionNode
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
ParserRuleContext
indexDefOptionNode
=
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
"addColumn"
);
if
(
null
==
indexDefOptionNode
)
{
return
;
}
ParserRuleContext
indexNameNode
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
indexDefOptionNode
,
ParserRuleContext
indexNameNode
=
TreeUtils
.
getFirstChildByRuleName
(
indexDefOptionNode
,
"indexName"
);
if
(
null
!=
indexNameNode
)
{
statement
.
getSqlTokens
()
.
add
(
new
IndexToken
(
indexNameNode
.
getStart
().
getStartIndex
(),
indexNameNode
.
getText
()
,
statement
.
getTables
().
getSingleTableName
()));
statement
.
getSqlTokens
()
.
add
(
VisitorUtils
.
visitIndex
(
indexNameNode
,
statement
.
getTables
().
getSingleTableName
()));
}
}
...
...
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/sqlserver/SQLServerAddPrimaryKeyVisitor.java
浏览文件 @
5eb345db
...
...
@@ -38,25 +38,25 @@ public class SQLServerAddPrimaryKeyVisitor implements PhraseVisitor {
public
void
visit
(
final
ParserRuleContext
ancestorNode
,
final
SQLStatement
statement
)
{
AlterTableStatement
alterStatement
=
(
AlterTableStatement
)
statement
;
ParserRuleContext
addColumnCtx
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
"addColumn"
);
ParserRuleContext
addColumnCtx
=
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
"addColumn"
);
if
(
null
==
addColumnCtx
)
{
return
;
}
Parse
Tree
tableConstraintCtx
=
TreeUtils
.
getFirstChildByRuleName
(
addColumnCtx
,
"tableConstraint"
);
Parse
rRuleContext
tableConstraintCtx
=
TreeUtils
.
getFirstChildByRuleName
(
addColumnCtx
,
"tableConstraint"
);
if
(
null
==
tableConstraintCtx
)
{
return
;
}
ParserRuleContext
primaryKeyCtx
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
tableConstraintCtx
,
ParserRuleContext
primaryKeyCtx
=
TreeUtils
.
getFirstChildByRuleName
(
tableConstraintCtx
,
"primaryKey"
);
if
(
null
==
primaryKeyCtx
)
{
return
;
}
List
<
Parse
Tree
>
columnNameCtxs
=
TreeUtils
.
getAllDescendantByRuleName
(
tableConstraintCtx
,
"columnName"
);
List
<
Parse
rRuleContext
>
columnNameCtxs
=
TreeUtils
.
getAllDescendantByRuleName
(
tableConstraintCtx
,
"columnName"
);
for
(
ParseTree
columnNameCtx
:
columnNameCtxs
)
{
alterStatement
.
getUpdateColumns
().
put
(
columnNameCtx
.
getText
(),
new
ColumnDefinition
(
columnNameCtx
.
getText
(),
null
,
null
,
true
));
...
...
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/phrase/visitor/sqlserver/SQLServerDropIndexVisitor.java
浏览文件 @
5eb345db
...
...
@@ -21,8 +21,8 @@ import org.antlr.v4.runtime.ParserRuleContext;
import
io.shardingsphere.core.parsing.antler.phrase.visitor.PhraseVisitor
;
import
io.shardingsphere.core.parsing.antler.utils.TreeUtils
;
import
io.shardingsphere.core.parsing.antler.utils.VisitorUtils
;
import
io.shardingsphere.core.parsing.parser.sql.SQLStatement
;
import
io.shardingsphere.core.parsing.parser.token.IndexToken
;
public
class
SQLServerDropIndexVisitor
implements
PhraseVisitor
{
...
...
@@ -32,14 +32,14 @@ public class SQLServerDropIndexVisitor implements PhraseVisitor {
*/
@Override
public
void
visit
(
final
ParserRuleContext
ancestorNode
,
final
SQLStatement
statement
)
{
ParserRuleContext
indexDefOptionNode
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
ParserRuleContext
indexDefOptionNode
=
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
"alterDropIndex"
);
if
(
null
!=
indexDefOptionNode
)
{
ParserRuleContext
indexNameNode
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
indexDefOptionNode
,
ParserRuleContext
indexNameNode
=
TreeUtils
.
getFirstChildByRuleName
(
indexDefOptionNode
,
"indexName"
);
if
(
null
!=
indexNameNode
)
{
statement
.
getSqlTokens
()
.
add
(
new
IndexToken
(
indexNameNode
.
getStart
().
getStartIndex
(),
indexNameNode
.
getText
()
,
statement
.
getTables
().
getSingleTableName
()));
statement
.
getSqlTokens
()
.
add
(
VisitorUtils
.
visitIndex
(
indexNameNode
,
statement
.
getTables
().
getSingleTableName
()));
}
}
}
...
...
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/utils/TreeUtils.java
浏览文件 @
5eb345db
...
...
@@ -20,6 +20,7 @@ package io.shardingsphere.core.parsing.antler.utils;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.antlr.v4.runtime.ParserRuleContext
;
import
org.antlr.v4.runtime.tree.ParseTree
;
public
class
TreeUtils
{
...
...
@@ -33,7 +34,7 @@ public class TreeUtils {
* @param name rule name
* @return match node
*/
public
static
Parse
Tree
getFirstChildByRuleName
(
final
ParseTree
node
,
final
String
name
)
{
public
static
Parse
rRuleContext
getFirstChildByRuleName
(
final
ParserRuleContext
node
,
final
String
name
)
{
if
(
null
==
node
)
{
return
null
;
}
...
...
@@ -49,7 +50,11 @@ public class TreeUtils {
for
(
int
i
=
0
;
i
<
node
.
getChildCount
();
i
++)
{
ParseTree
child
=
node
.
getChild
(
i
);
ParseTree
retNode
=
getFirstChildByRuleName
(
child
,
name
);
if
(!(
child
instanceof
ParserRuleContext
))
{
continue
;
}
ParserRuleContext
retNode
=
getFirstChildByRuleName
((
ParserRuleContext
)
child
,
name
);
if
(
null
!=
retNode
)
{
return
retNode
;
}
...
...
@@ -64,7 +69,7 @@ public class TreeUtils {
* @param name rule name
* @return match nodes
*/
public
static
List
<
Parse
Tree
>
getAllDescendantByRuleName
(
final
ParseTree
node
,
final
String
name
)
{
public
static
List
<
Parse
rRuleContext
>
getAllDescendantByRuleName
(
final
ParserRuleContext
node
,
final
String
name
)
{
if
(
null
==
node
)
{
return
null
;
}
...
...
@@ -74,7 +79,7 @@ public class TreeUtils {
ruleName
=
Character
.
toUpperCase
(
name
.
charAt
(
0
))
+
name
.
substring
(
1
)
+
RULE_SUFFIX
;
}
List
<
Parse
Tree
>
childs
=
new
ArrayList
<>();
List
<
Parse
rRuleContext
>
childs
=
new
ArrayList
<>();
if
(
ruleName
.
equals
(
node
.
getClass
().
getSimpleName
()))
{
childs
.
add
(
node
);
}
...
...
@@ -84,14 +89,16 @@ public class TreeUtils {
return
childs
;
}
List
<
Parse
Tree
>
childNodes
=
new
ArrayList
<>();
List
<
Parse
rRuleContext
>
childNodes
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
count
;
i
++)
{
ParseTree
child
=
node
.
getChild
(
i
);
childNodes
.
add
(
child
);
if
(
child
instanceof
ParserRuleContext
)
{
childNodes
.
add
((
ParserRuleContext
)
child
);
}
}
for
(
final
Parse
Tree
child
:
childNodes
)
{
List
<
Parse
Tree
>
retChilds
=
getAllDescendantByRuleName
(
child
,
name
);
for
(
final
Parse
rRuleContext
child
:
childNodes
)
{
List
<
Parse
rRuleContext
>
retChilds
=
getAllDescendantByRuleName
(
child
,
name
);
if
(
retChilds
!=
null
)
{
childs
.
addAll
(
retChilds
);
}
...
...
sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/utils/VisitorUtils.java
浏览文件 @
5eb345db
...
...
@@ -17,33 +17,36 @@
package
io.shardingsphere.core.parsing.antler.utils
;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.antlr.v4.runtime.ParserRuleContext
;
import
org.antlr.v4.runtime.tree.ParseTree
;
import
io.shardingsphere.core.parsing.antler.sql.ddl.ColumnDefinition
;
import
io.shardingsphere.core.parsing.antler.sql.ddl.ColumnPosition
;
import
io.shardingsphere.core.parsing.lexer.token.Symbol
;
import
io.shardingsphere.core.parsing.parser.token.IndexToken
;
public
class
VisitorUtils
{
/**
* Parse column definition.
*
* @param columnDefinitionNode
* column definition rule
* @param columnDefinitionNode column definition rule
* @return column defition
*/
public
static
ColumnDefinition
visitColumnDefinition
(
final
Parse
Tree
columnDefinitionNode
)
{
public
static
ColumnDefinition
visitColumnDefinition
(
final
Parse
rRuleContext
columnDefinitionNode
)
{
if
(
null
==
columnDefinitionNode
)
{
return
null
;
}
ParserRuleContext
columnNameNode
=
(
ParserRuleContext
)
(
ParserRuleContext
)
TreeUtils
ParserRuleContext
columnNameNode
=
TreeUtils
.
getFirstChildByRuleName
(
columnDefinitionNode
,
"columnName"
);
if
(
null
==
columnNameNode
)
{
return
null
;
}
ParserRuleContext
dataTypeCtx
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
columnDefinitionNode
,
ParserRuleContext
dataTypeCtx
=
TreeUtils
.
getFirstChildByRuleName
(
columnDefinitionNode
,
"dataType"
);
String
typeName
=
null
;
...
...
@@ -53,7 +56,7 @@ public class VisitorUtils {
Integer
length
=
null
;
ParserRuleContext
dataTypeLengthCtx
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
dataTypeCtx
,
ParserRuleContext
dataTypeLengthCtx
=
TreeUtils
.
getFirstChildByRuleName
(
dataTypeCtx
,
"dataTypeLength"
);
if
(
null
!=
dataTypeLengthCtx
)
{
...
...
@@ -67,7 +70,7 @@ public class VisitorUtils {
}
}
ParserRuleContext
primaryKeyNode
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
columnDefinitionNode
,
ParserRuleContext
primaryKeyNode
=
TreeUtils
.
getFirstChildByRuleName
(
columnDefinitionNode
,
"primaryKey"
);
boolean
primaryKey
=
false
;
if
(
null
!=
primaryKeyNode
)
{
...
...
@@ -77,14 +80,19 @@ public class VisitorUtils {
return
new
ColumnDefinition
(
columnNameNode
.
getText
(),
typeName
,
length
,
primaryKey
);
}
/** Visit column position.
* @param ancestorNode ancestor node of ast
* @param columnName column name
* @return
*/
public
static
ColumnPosition
visitFirstOrAfter
(
ParserRuleContext
ancestorNode
,
String
columnName
)
{
ParserRuleContext
firstOrAfterColumnCtx
=
(
ParserRuleContext
)
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
ParserRuleContext
firstOrAfterColumnCtx
=
TreeUtils
.
getFirstChildByRuleName
(
ancestorNode
,
"firstOrAfterColumn"
);
if
(
null
==
firstOrAfterColumnCtx
)
{
return
null
;
}
Parse
Tree
columnNameCtx
=
TreeUtils
.
getFirstChildByRuleName
(
firstOrAfterColumnCtx
,
"columnName"
);
Parse
rRuleContext
columnNameCtx
=
TreeUtils
.
getFirstChildByRuleName
(
firstOrAfterColumnCtx
,
"columnName"
);
ColumnPosition
columnPosition
=
new
ColumnPosition
();
columnPosition
.
setStartIndex
(
firstOrAfterColumnCtx
.
getStart
().
getStartIndex
());
...
...
@@ -97,4 +105,49 @@ public class VisitorUtils {
return
columnPosition
;
}
/** Visit indices node
* @param ancestorNode ancestor node of ast
* @param tableName table name
* @return
*/
public
static
List
<
IndexToken
>
visitIndices
(
ParserRuleContext
ancestorNode
,
String
tableName
)
{
List
<
ParserRuleContext
>
indexNameCtxs
=
TreeUtils
.
getAllDescendantByRuleName
(
ancestorNode
,
"indexName"
);
if
(
null
==
indexNameCtxs
)
{
return
null
;
}
List
<
IndexToken
>
indicesToken
=
new
ArrayList
<>();
for
(
ParserRuleContext
each
:
indexNameCtxs
)
{
indicesToken
.
add
(
visitIndex
(
each
,
tableName
));
}
return
indicesToken
;
}
/** Visit index node.
* @param indexNameCtx index name context
* @param tableName table name
* @return
*/
public
static
IndexToken
visitIndex
(
ParserRuleContext
indexNameCtx
,
String
tableName
)
{
String
name
=
getName
(
indexNameCtx
.
getText
());
int
startPos
=
indexNameCtx
.
getStop
().
getStopIndex
()
-
name
.
length
();
return
new
IndexToken
(
startPos
,
name
,
tableName
);
}
public
static
String
getName
(
String
text
)
{
String
dotString
=
Symbol
.
DOT
.
getLiterals
();
int
pos
=
text
.
lastIndexOf
(
dotString
);
if
(
pos
>
0
)
{
return
text
.
substring
(
pos
+
dotString
.
length
());
}
else
{
return
text
;
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录