Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
见谅
dbeaver
提交
27a39cf5
D
dbeaver
项目概览
见谅
/
dbeaver
与 Fork 源项目一致
从无法访问的项目Fork
通知
6
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,体验更适合开发者的 AI 搜索 >>
提交
27a39cf5
编写于
5月 05, 2015
作者:
J
jurgen
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
SQL query extraction fix
上级
f2b35334
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
44 addition
and
59 deletion
+44
-59
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditor.java
....core/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditor.java
+6
-38
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorBase.java
...e/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorBase.java
+38
-21
未找到文件。
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditor.java
浏览文件 @
27a39cf5
...
...
@@ -29,7 +29,6 @@ import org.eclipse.jface.action.IMenuListener;
import
org.eclipse.jface.action.IMenuManager
;
import
org.eclipse.jface.action.MenuManager
;
import
org.eclipse.jface.text.*
;
import
org.eclipse.jface.text.rules.IToken
;
import
org.eclipse.jface.viewers.ISelectionProvider
;
import
org.eclipse.jface.viewers.StructuredSelection
;
import
org.eclipse.swt.SWT
;
...
...
@@ -83,9 +82,6 @@ import org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer;
import
org.jkiss.dbeaver.ui.dialogs.ActiveWizardDialog
;
import
org.jkiss.dbeaver.ui.editors.DatabaseEditorUtils
;
import
org.jkiss.dbeaver.ui.editors.sql.log.SQLLogPanel
;
import
org.jkiss.dbeaver.ui.editors.sql.syntax.SQLSyntaxManager
;
import
org.jkiss.dbeaver.ui.editors.sql.syntax.tokens.SQLCommentToken
;
import
org.jkiss.dbeaver.ui.editors.sql.syntax.tokens.SQLDelimiterToken
;
import
org.jkiss.dbeaver.ui.editors.text.ScriptPositionColumn
;
import
org.jkiss.dbeaver.ui.views.plan.ExplainPlanViewer
;
import
org.jkiss.dbeaver.utils.ContentUtils
;
...
...
@@ -590,43 +586,15 @@ public class SQLEditor extends SQLEditorBase
return
queryList
;
}
SQLSyntaxManager
syntaxManager
=
getSyntaxManager
();
syntaxManager
.
setRange
(
document
,
startOffset
,
length
);
int
statementStart
=
startOffset
;
boolean
hasValuableTokens
=
false
;
for
(;;)
{
IToken
token
=
syntaxManager
.
nextToken
();
if
(
token
.
isEOF
()
||
token
instanceof
SQLDelimiterToken
)
{
int
tokenOffset
=
syntaxManager
.
getTokenOffset
();
if
(
tokenOffset
>=
document
.
getLength
())
{
tokenOffset
=
document
.
getLength
();
}
try
{
while
(
statementStart
<
tokenOffset
&&
Character
.
isWhitespace
(
document
.
getChar
(
statementStart
)))
{
statementStart
++;
}
if
(
hasValuableTokens
)
{
int
queryLength
=
tokenOffset
-
statementStart
;
String
query
=
document
.
get
(
statementStart
,
queryLength
);
query
=
query
.
trim
();
if
(
query
.
length
()
>
0
)
{
SQLQuery
statementInfo
=
new
SQLQuery
(
this
,
query
,
statementStart
,
queryLength
);
queryList
.
add
(
statementInfo
);
}
}
hasValuableTokens
=
false
;
}
catch
(
BadLocationException
ex
)
{
log
.
error
(
"Error extracting script query"
,
ex
);
//$NON-NLS-1$
}
statementStart
=
tokenOffset
+
syntaxManager
.
getTokenLength
();
}
if
(
token
.
isEOF
())
{
for
(
int
queryOffset
=
startOffset
;;)
{
SQLQuery
query
=
parseQuery
(
document
,
queryOffset
,
startOffset
+
length
);
if
(
query
==
null
)
{
break
;
}
if
(!
token
.
isWhitespace
()
&&
!(
token
instanceof
SQLCommentToken
))
{
hasValuableTokens
=
true
;
}
queryList
.
add
(
query
);
queryOffset
=
query
.
getOffset
()
+
query
.
getLength
()
+
1
;
}
// Parse parameters
for
(
SQLQuery
query
:
queryList
)
{
query
.
parseParameters
(
getDocument
(),
getSyntaxManager
());
...
...
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorBase.java
浏览文件 @
27a39cf5
...
...
@@ -28,7 +28,6 @@ import org.eclipse.jface.text.*;
import
org.eclipse.jface.text.rules.FastPartitioner
;
import
org.eclipse.jface.text.rules.IToken
;
import
org.eclipse.jface.text.source.*
;
import
org.eclipse.jface.text.source.projection.ProjectionAnnotation
;
import
org.eclipse.jface.text.source.projection.ProjectionAnnotationModel
;
import
org.eclipse.jface.text.source.projection.ProjectionSupport
;
import
org.eclipse.jface.text.source.projection.ProjectionViewer
;
...
...
@@ -64,13 +63,14 @@ import org.jkiss.dbeaver.ui.editors.sql.syntax.SQLPartitionScanner;
import
org.jkiss.dbeaver.ui.editors.sql.syntax.SQLSyntaxManager
;
import
org.jkiss.dbeaver.ui.editors.sql.syntax.tokens.SQLBlockBeginToken
;
import
org.jkiss.dbeaver.ui.editors.sql.syntax.tokens.SQLBlockEndToken
;
import
org.jkiss.dbeaver.ui.editors.sql.syntax.tokens.SQLCommentToken
;
import
org.jkiss.dbeaver.ui.editors.sql.syntax.tokens.SQLDelimiterToken
;
import
org.jkiss.dbeaver.ui.editors.sql.templates.SQLTemplatesPage
;
import
org.jkiss.dbeaver.ui.editors.sql.util.SQLSymbolInserter
;
import
org.jkiss.dbeaver.ui.editors.text.BaseTextEditor
;
import
org.jkiss.utils.CommonUtils
;
import
java.util.
*
;
import
java.util.
ResourceBundle
;
/**
* SQL Executor
...
...
@@ -83,7 +83,7 @@ public abstract class SQLEditorBase extends BaseTextEditor {
private
ProjectionSupport
projectionSupport
;
private
ProjectionAnnotationModel
annotationModel
;
private
Map
<
Annotation
,
Position
>
curAnnotations
;
//
private Map<Annotation, Position> curAnnotations;
private
IAnnotationAccess
annotationAccess
;
private
boolean
hasVerticalRuler
=
true
;
...
...
@@ -199,10 +199,10 @@ public abstract class SQLEditorBase extends BaseTextEditor {
return
hasVerticalRuler
?
super
.
createVerticalRuler
()
:
new
VerticalRuler
(
0
);
}
public
void
setHasVerticalRuler
(
boolean
hasVerticalRuler
)
{
this
.
hasVerticalRuler
=
hasVerticalRuler
;
}
//
public void setHasVerticalRuler(boolean hasVerticalRuler)
//
{
//
this.hasVerticalRuler = hasVerticalRuler;
//
}
@Override
protected
void
doSetInput
(
IEditorInput
input
)
throws
CoreException
...
...
@@ -422,6 +422,10 @@ public abstract class SQLEditorBase extends BaseTextEditor {
public
boolean
hasActiveQuery
()
{
Document
document
=
getDocument
();
if
(
document
==
null
)
{
return
false
;
}
ISelectionProvider
selectionProvider
=
getSelectionProvider
();
if
(
selectionProvider
==
null
)
{
return
false
;
...
...
@@ -429,7 +433,6 @@ public abstract class SQLEditorBase extends BaseTextEditor {
ITextSelection
selection
=
(
ITextSelection
)
selectionProvider
.
getSelection
();
String
selText
=
selection
.
getText
();
if
(
CommonUtils
.
isEmpty
(
selText
)
&&
selection
.
getOffset
()
>=
0
)
{
Document
document
=
getDocument
();
try
{
IRegion
lineRegion
=
document
.
getLineInformationOfOffset
(
selection
.
getOffset
());
selText
=
document
.
get
(
lineRegion
.
getOffset
(),
lineRegion
.
getLength
());
...
...
@@ -468,7 +471,7 @@ public abstract class SQLEditorBase extends BaseTextEditor {
public
SQLQuery
extractQueryAtPos
(
int
currentPos
)
{
Document
document
=
getDocument
();
if
(
document
.
getLength
()
==
0
)
{
if
(
document
==
null
||
document
.
getLength
()
==
0
)
{
return
null
;
}
IDocumentPartitioner
partitioner
=
document
.
getDocumentPartitioner
(
SQLPartitionScanner
.
SQL_PARTITIONING
);
...
...
@@ -484,7 +487,7 @@ public abstract class SQLEditorBase extends BaseTextEditor {
int
endPos
=
document
.
getLength
();
try
{
int
currentLine
=
document
.
getLineOfOffset
(
currentPos
);
int
lineOffset
=
document
.
getLineOffset
(
currentLine
);
//
int lineOffset = document.getLineOffset(currentLine);
int
linesCount
=
document
.
getNumberOfLines
();
int
firstLine
=
currentLine
,
lastLine
=
currentLine
;
while
(
firstLine
>
0
)
{
...
...
@@ -506,24 +509,21 @@ public abstract class SQLEditorBase extends BaseTextEditor {
}
startPos
=
document
.
getLineOffset
(
firstLine
);
endPos
=
document
.
getLineOffset
(
lastLine
)
+
document
.
getLineLength
(
lastLine
);
//String lastDelimiter = document.getLineDelimiter(lastLine);
//if (lastDelimiter != null) {
// endPos += lastDelimiter.length();
//}
// Move currentPos at line begin
currentPos
=
lineOffset
;
}
catch
(
BadLocationException
e
)
{
log
.
warn
(
e
);
}
return
parseQuery
(
document
,
startPos
,
endPos
);
}
protected
SQLQuery
parseQuery
(
Document
document
,
int
startPos
,
int
endPos
)
{
protected
SQLQuery
parseQuery
(
IDocument
document
,
int
startPos
,
int
endPos
)
{
if
(
endPos
-
startPos
<=
0
)
{
return
null
;
}
// Parse range
syntaxManager
.
setRange
(
document
,
startPos
,
endPos
-
startPos
);
int
statementStart
=
startPos
;
int
bracketDepth
=
0
;
boolean
hasValuableTokens
=
false
;
for
(;
;
)
{
IToken
token
=
syntaxManager
.
nextToken
();
int
tokenOffset
=
syntaxManager
.
getTokenOffset
();
...
...
@@ -549,7 +549,7 @@ public abstract class SQLEditorBase extends BaseTextEditor {
// Delimiter in some brackets - ignore it
continue
;
}
if
(
token
.
isEOF
()
||
(
isDelimiter
&&
tokenOffset
>=
startPos
)
||
tokenOffset
>
endPos
)
{
if
(
hasValuableTokens
&&
(
token
.
isEOF
()
||
(
isDelimiter
&&
tokenOffset
>=
startPos
)
||
tokenOffset
>
endPos
)
)
{
// get position before last token start
if
(
tokenOffset
>
endPos
)
{
tokenOffset
=
endPos
;
...
...
@@ -570,10 +570,22 @@ public abstract class SQLEditorBase extends BaseTextEditor {
while
(
statementStart
<
tokenOffset
&&
Character
.
isWhitespace
(
document
.
getChar
(
tokenOffset
-
1
)))
{
tokenOffset
--;
}
if
(
tokenOffset
==
statementStart
)
{
// Empty statement
return
null
;
}
String
queryText
=
document
.
get
(
statementStart
,
tokenOffset
-
statementStart
);
queryText
=
queryText
.
trim
();
if
(
queryText
.
endsWith
(
syntaxManager
.
getStatementDelimiter
()))
{
queryText
=
queryText
.
substring
(
0
,
queryText
.
length
()
-
syntaxManager
.
getStatementDelimiter
().
length
());
String
delimiterText
;
if
(
isDelimiter
)
{
delimiterText
=
document
.
get
(
tokenOffset
,
tokenLength
);
}
else
{
delimiterText
=
syntaxManager
.
getStatementDelimiter
();
}
if
(
queryText
.
endsWith
(
delimiterText
))
{
queryText
=
queryText
.
substring
(
0
,
queryText
.
length
()
-
delimiterText
.
length
());
}
// make script line
return
new
SQLQuery
(
...
...
@@ -592,9 +604,13 @@ public abstract class SQLEditorBase extends BaseTextEditor {
if
(
token
.
isEOF
())
{
return
null
;
}
if
(!
token
.
isWhitespace
()
&&
!(
token
instanceof
SQLCommentToken
))
{
hasValuableTokens
=
true
;
}
}
}
/*
public synchronized void updateFoldingStructure(int offset, int length, List<Position> positions)
{
if (curAnnotations == null) {
...
...
@@ -629,6 +645,7 @@ public abstract class SQLEditorBase extends BaseTextEditor {
// Update current annotations
curAnnotations.putAll(newAnnotations);
}
*/
public
boolean
isDisposed
()
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录