Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
suliangchun
dbeaver
提交
de319249
D
dbeaver
项目概览
suliangchun
/
dbeaver
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dbeaver
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
de319249
编写于
12月 27, 2019
作者:
S
Serge Rider
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
#7460 PgSQL parser (code blocks recognition) fixes.
上级
58c3c124
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
24 addition
and
9 deletion
+24
-9
plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorBase.java
...l/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorBase.java
+24
-9
未找到文件。
plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorBase.java
浏览文件 @
de319249
...
...
@@ -885,12 +885,19 @@ public abstract class SQLEditorBase extends BaseTextEditor implements DBPContext
private
static
class
ScriptBlockInfo
{
final
ScriptBlockInfo
parent
;
final
String
togglePattern
;
boolean
isHeader
;
// block started by DECLARE, FUNCTION, etc
public
ScriptBlockInfo
(
ScriptBlockInfo
parent
,
boolean
isHeader
)
{
this
.
parent
=
parent
;
this
.
togglePattern
=
null
;
this
.
isHeader
=
isHeader
;
}
public
ScriptBlockInfo
(
ScriptBlockInfo
parent
,
String
togglePattern
)
{
this
.
parent
=
parent
;
this
.
togglePattern
=
togglePattern
;
}
}
protected
SQLScriptElement
parseQuery
(
final
IDocument
document
,
final
int
startPos
,
final
int
endPos
,
final
int
currentPos
,
final
boolean
scriptMode
,
final
boolean
keepDelimiters
)
{
...
...
@@ -907,7 +914,6 @@ public abstract class SQLEditorBase extends BaseTextEditor implements DBPContext
boolean
hasValuableTokens
=
false
;
ScriptBlockInfo
curBlock
=
null
;
boolean
hasBlocks
=
false
;
String
blockTogglePattern
=
null
;
int
lastTokenLineFeeds
=
0
;
int
prevNotEmptyTokenType
=
SQLToken
.
T_UNKNOWN
;
String
lastKeyword
=
null
;
...
...
@@ -975,12 +981,10 @@ public abstract class SQLEditorBase extends BaseTextEditor implements DBPContext
}
// Second toggle pattern must be the same as first one.
// Toggles can be nested (PostgreSQL) and we need to count only outer
if
(
curBlock
!=
null
&&
curBlock
.
parent
==
null
&&
togglePattern
.
equals
(
blockT
ogglePattern
))
{
if
(
curBlock
!=
null
&&
curBlock
.
parent
==
null
&&
togglePattern
.
equals
(
curBlock
.
t
ogglePattern
))
{
curBlock
=
curBlock
.
parent
;
blockTogglePattern
=
null
;
}
else
if
(
curBlock
==
null
&&
blockTogglePattern
==
null
)
{
curBlock
=
new
ScriptBlockInfo
(
curBlock
,
false
);
blockTogglePattern
=
togglePattern
;
}
else
if
(
curBlock
==
null
)
{
curBlock
=
new
ScriptBlockInfo
(
curBlock
,
togglePattern
);
}
else
{
log
.
debug
(
"Block toggle token inside another block. Can't process it"
);
}
...
...
@@ -988,15 +992,26 @@ public abstract class SQLEditorBase extends BaseTextEditor implements DBPContext
}
else
if
(
tokenType
==
SQLToken
.
T_BLOCK_BEGIN
)
{
if
(
curBlock
==
null
||
!
curBlock
.
isHeader
)
{
curBlock
=
new
ScriptBlockInfo
(
curBlock
,
false
);
}
else
if
(
curBlock
!=
null
)
{
}
else
{
curBlock
.
isHeader
=
false
;
}
hasBlocks
=
true
;
}
else
if
(
curBlock
!=
null
&&
tokenType
==
SQLToken
.
T_BLOCK_END
)
{
}
else
if
(
tokenType
==
SQLToken
.
T_BLOCK_END
)
{
// Sometimes query contains END clause without BEGIN. E.g. CASE, IF, etc.
// This END doesn't mean block
if
(
curBlock
!=
null
)
{
curBlock
=
curBlock
.
parent
;
if
(!
CommonUtils
.
isEmpty
(
curBlock
.
togglePattern
))
{
// Block end inside of block toggle (#7460).
// Actually it is a result of some wrong SQL parse (e.g. we didn't recognize block begin correctly).
// However block toggle has higher priority. At the moment it is PostgreSQL specific.
try
{
log
.
debug
(
"Block end '"
+
document
.
get
(
tokenOffset
,
tokenLength
)
+
"' inside of named block toggle '"
+
curBlock
.
togglePattern
+
"'. Ignore."
);
}
catch
(
Throwable
e
)
{
log
.
debug
(
e
);
}
}
else
{
curBlock
=
curBlock
.
parent
;
}
}
}
else
if
(
isDelimiter
&&
curBlock
!=
null
)
{
// Delimiter in some brackets - ignore it
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录