Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
suliangchun
dbeaver
提交
91a0e363
D
dbeaver
项目概览
suliangchun
/
dbeaver
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
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,发现更多精彩内容 >>
提交
91a0e363
编写于
9月 23, 2016
作者:
S
Serge Rider
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
SQL query execute fix (handle errors after filters apply)
上级
61ce94f2
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
29 addition
and
31 deletion
+29
-31
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/runtime/sql/SQLQueryJob.java
...r.core/src/org/jkiss/dbeaver/runtime/sql/SQLQueryJob.java
+20
-22
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/sql/BasicSQLDialect.java
...src/org/jkiss/dbeaver/model/impl/sql/BasicSQLDialect.java
+1
-3
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/sql/SQLDialect.java
...ver.model/src/org/jkiss/dbeaver/model/sql/SQLDialect.java
+1
-1
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/sql/parser/SQLSemanticProcessor.java
.../jkiss/dbeaver/model/sql/parser/SQLSemanticProcessor.java
+7
-5
未找到文件。
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/runtime/sql/SQLQueryJob.java
浏览文件 @
91a0e363
...
...
@@ -270,50 +270,48 @@ public class SQLQueryJob extends DataSourceJob implements Closeable
}
}
private
boolean
executeSingleQuery
(
@NotNull
DBCSession
session
,
@NotNull
SQLQuery
sqlQuery
,
boolean
fireEvents
)
private
boolean
executeSingleQuery
(
@NotNull
DBCSession
session
,
@NotNull
SQLQuery
sqlQuery
,
final
boolean
fireEvents
)
{
lastError
=
null
;
final
String
originalQueryText
=
sqlQuery
.
getQuery
();
DBCExecutionContext
executionContext
=
getExecutionContext
();
SQLQueryResult
curResult
=
new
SQLQueryResult
(
sqlQuery
);
final
DBCExecutionContext
executionContext
=
getExecutionContext
();
final
DBPDataSource
dataSource
=
executionContext
.
getDataSource
();
final
SQLQuery
originalQuery
=
sqlQuery
;
long
startTime
=
System
.
currentTimeMillis
();
boolean
startQueryAlerted
=
false
;
// Modify query (filters + parameters)
if
(
dataFilter
!=
null
&&
dataFilter
.
hasFilters
()
&&
dataSource
instanceof
SQLDataSource
)
{
String
filteredQueryText
=
((
SQLDataSource
)
dataSource
).
getSQLDialect
().
addFiltersToQuery
(
dataSource
,
originalQuery
.
getQuery
(),
dataFilter
);
sqlQuery
=
new
SQLQuery
(
filteredQueryText
,
sqlQuery
.
getOffset
(),
sqlQuery
.
getLength
());
}
final
SQLQueryResult
curResult
=
new
SQLQueryResult
(
sqlQuery
);
if
(
rsOffset
>
0
)
{
curResult
.
setRowOffset
(
rsOffset
);
}
SQLQuery
originalQuery
=
sqlQuery
;
long
startTime
=
System
.
currentTimeMillis
();
boolean
startQueryAlerted
=
false
;
try
{
// Prepare statement
closeStatement
();
// Check and invalidate connection
DBPDataSource
dataSource
=
executionContext
.
getDataSource
();
if
(!
connectionInvalidated
&&
dataSource
.
getContainer
().
getPreferenceStore
().
getBoolean
(
DBeaverPreferences
.
STATEMENT_INVALIDATE_BEFORE_EXECUTE
))
{
executionContext
.
invalidateContext
(
session
.
getProgressMonitor
());
connectionInvalidated
=
true
;
}
try
{
// Modify query (filters + parameters)
if
(
dataFilter
!=
null
&&
dataFilter
.
hasFilters
()
&&
dataSource
instanceof
SQLDataSource
)
{
String
filteredQueryText
=
((
SQLDataSource
)
dataSource
).
getSQLDialect
().
addFiltersToQuery
(
dataSource
,
originalQueryText
,
dataFilter
);
sqlQuery
=
new
SQLQuery
(
filteredQueryText
,
sqlQuery
.
getOffset
(),
sqlQuery
.
getLength
());
}
}
catch
(
DBException
e
)
{
throw
new
DBCException
(
"Can't apply query filter"
,
e
);
}
Boolean
hasParameters
=
prepareStatementParameters
(
sqlQuery
);
if
(
hasParameters
==
null
)
{
return
false
;
}
statistics
.
setQueryText
(
originalQuery
Text
);
statistics
.
setQueryText
(
originalQuery
.
getQuery
()
);
// Notify query start
if
(
fireEvents
&&
listener
!=
null
)
{
...
...
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/sql/BasicSQLDialect.java
浏览文件 @
91a0e363
...
...
@@ -19,7 +19,6 @@ package org.jkiss.dbeaver.model.impl.sql;
import
org.jkiss.code.NotNull
;
import
org.jkiss.code.Nullable
;
import
org.jkiss.dbeaver.DBException
;
import
org.jkiss.dbeaver.model.DBPDataSource
;
import
org.jkiss.dbeaver.model.DBPIdentifierCase
;
import
org.jkiss.dbeaver.model.DBPKeywordType
;
...
...
@@ -32,7 +31,6 @@ import org.jkiss.dbeaver.model.sql.SQLStateType;
import
org.jkiss.dbeaver.model.sql.parser.SQLSemanticProcessor
;
import
org.jkiss.dbeaver.model.struct.DBSAttributeBase
;
import
org.jkiss.utils.ArrayUtils
;
import
org.jkiss.utils.CommonUtils
;
import
org.jkiss.utils.Pair
;
import
java.util.*
;
...
...
@@ -305,7 +303,7 @@ public class BasicSQLDialect implements SQLDialect {
}
@Override
public
String
addFiltersToQuery
(
DBPDataSource
dataSource
,
String
query
,
DBDDataFilter
filter
)
throws
DBException
{
public
String
addFiltersToQuery
(
DBPDataSource
dataSource
,
String
query
,
DBDDataFilter
filter
)
{
return
SQLSemanticProcessor
.
addFiltersToQuery
(
dataSource
,
query
,
filter
);
}
...
...
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/sql/SQLDialect.java
浏览文件 @
91a0e363
...
...
@@ -233,7 +233,7 @@ public interface SQLDialect {
@NotNull
MultiValueInsertMode
getMultiValueInsertMode
();
String
addFiltersToQuery
(
DBPDataSource
dataSource
,
String
query
,
DBDDataFilter
filter
)
throws
DBException
;
String
addFiltersToQuery
(
DBPDataSource
dataSource
,
String
query
,
DBDDataFilter
filter
);
/**
* Two-item array containing begin and end of multi-line comments.
...
...
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/sql/parser/SQLSemanticProcessor.java
浏览文件 @
91a0e363
...
...
@@ -30,7 +30,7 @@ import net.sf.jsqlparser.statement.select.FromItem;
import
net.sf.jsqlparser.statement.select.OrderByElement
;
import
net.sf.jsqlparser.statement.select.PlainSelect
;
import
net.sf.jsqlparser.statement.select.Select
;
import
org.jkiss.dbeaver.
DBException
;
import
org.jkiss.dbeaver.
Log
;
import
org.jkiss.dbeaver.model.DBPDataSource
;
import
org.jkiss.dbeaver.model.DBPEvaluationContext
;
import
org.jkiss.dbeaver.model.DBUtils
;
...
...
@@ -48,6 +48,8 @@ import java.util.List;
*/
public
class
SQLSemanticProcessor
{
private
static
final
Log
log
=
Log
.
getLog
(
SQLSemanticProcessor
.
class
);
private
static
final
String
NESTED_QUERY_AlIAS
=
"z_q"
;
public
static
boolean
isSelectQuery
(
String
query
)
...
...
@@ -64,7 +66,7 @@ public class SQLSemanticProcessor {
}
}
public
static
String
addFiltersToQuery
(
final
DBPDataSource
dataSource
,
String
sqlQuery
,
final
DBDDataFilter
dataFilter
)
throws
DBException
{
public
static
String
addFiltersToQuery
(
final
DBPDataSource
dataSource
,
String
sqlQuery
,
final
DBDDataFilter
dataFilter
)
{
boolean
supportSubqueries
=
dataSource
instanceof
SQLDataSource
&&
((
SQLDataSource
)
dataSource
).
getSQLDialect
().
supportsSubqueries
();
try
{
Statement
statement
=
CCJSqlParserUtil
.
parse
(
sqlQuery
);
...
...
@@ -75,13 +77,13 @@ public class SQLSemanticProcessor {
return
statement
.
toString
();
}
}
return
wrapQuery
(
dataSource
,
sqlQuery
,
dataFilter
);
}
catch
(
Throwable
e
)
{
throw
new
DBException
(
"SQL parse error"
,
e
);
log
.
debug
(
"SQL parse error"
,
e
);
}
return
wrapQuery
(
dataSource
,
sqlQuery
,
dataFilter
);
}
public
static
String
wrapQuery
(
final
DBPDataSource
dataSource
,
String
sqlQuery
,
final
DBDDataFilter
dataFilter
)
throws
DBException
{
public
static
String
wrapQuery
(
final
DBPDataSource
dataSource
,
String
sqlQuery
,
final
DBDDataFilter
dataFilter
)
{
// Append filter conditions to query
StringBuilder
modifiedQuery
=
new
StringBuilder
(
sqlQuery
.
length
()
+
100
);
modifiedQuery
.
append
(
"SELECT * FROM (\n"
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录