Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
suliangchun
dbeaver
提交
88e58a76
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,发现更多精彩内容 >>
提交
88e58a76
编写于
2月 25, 2015
作者:
J
jurgen
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
SQL query with filters processing fix
RSV filters dialog refactoring
上级
b217ede0
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
72 addition
and
169 deletion
+72
-169
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/sql/parser/SQLSemanticProcessor.java
.../jkiss/dbeaver/model/sql/parser/SQLSemanticProcessor.java
+6
-3
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/runtime/sql/SQLQueryJob.java
...r.core/src/org/jkiss/dbeaver/runtime/sql/SQLQueryJob.java
+12
-8
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/UIUtils.java
....jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/UIUtils.java
+1
-54
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/CustomTableEditor.java
.../src/org/jkiss/dbeaver/ui/controls/CustomTableEditor.java
+3
-0
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/FilterSettingsDialog.java
...s/dbeaver/ui/controls/resultset/FilterSettingsDialog.java
+50
-104
未找到文件。
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/sql/parser/SQLSemanticProcessor.java
浏览文件 @
88e58a76
...
...
@@ -26,12 +26,10 @@ import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import
net.sf.jsqlparser.schema.Column
;
import
net.sf.jsqlparser.schema.Table
;
import
net.sf.jsqlparser.statement.Statement
;
import
net.sf.jsqlparser.statement.insert.Insert
;
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.core.Log
;
import
org.jkiss.dbeaver.DBException
;
import
org.jkiss.dbeaver.model.DBPDataSource
;
import
org.jkiss.dbeaver.model.DBUtils
;
...
...
@@ -105,7 +103,12 @@ public class SQLSemanticProcessor {
if
(
filter
.
hasConditions
())
{
StringBuilder
whereString
=
new
StringBuilder
();
SQLUtils
.
appendConditionString
(
filter
,
dataSource
,
tableAlias
,
whereString
,
true
);
Expression
filterWhere
=
CCJSqlParserUtil
.
parseCondExpression
(
whereString
.
toString
());
Expression
filterWhere
;
try
{
filterWhere
=
CCJSqlParserUtil
.
parseCondExpression
(
whereString
.
toString
());
}
catch
(
JSQLParserException
e
)
{
throw
new
JSQLParserException
(
"Bad query condition: ["
+
whereString
+
"]"
,
e
);
}
Expression
sourceWhere
=
select
.
getWhere
();
if
(
sourceWhere
==
null
)
{
select
.
setWhere
(
filterWhere
);
...
...
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/runtime/sql/SQLQueryJob.java
浏览文件 @
88e58a76
...
...
@@ -265,6 +265,11 @@ public class SQLQueryJob extends DataSourceJob
}
long
startTime
=
System
.
currentTimeMillis
();
if
(
fireEvents
&&
listener
!=
null
)
{
// Notify query start
listener
.
onStartQuery
(
sqlStatement
);
}
try
{
// Prepare statement
closeStatement
();
...
...
@@ -275,9 +280,13 @@ public class SQLQueryJob extends DataSourceJob
connectionInvalidated
=
true
;
}
// Modify query (filters + parameters)
if
(
dataFilter
!=
null
&&
dataFilter
.
hasFilters
()
&&
dataSource
instanceof
SQLDataSource
)
{
sqlQuery
=
((
SQLDataSource
)
dataSource
).
getSQLDialect
().
addFiltersToQuery
(
dataSource
,
sqlQuery
,
dataFilter
);
try
{
// Modify query (filters + parameters)
if
(
dataFilter
!=
null
&&
dataFilter
.
hasFilters
()
&&
dataSource
instanceof
SQLDataSource
)
{
sqlQuery
=
((
SQLDataSource
)
dataSource
).
getSQLDialect
().
addFiltersToQuery
(
dataSource
,
sqlQuery
,
dataFilter
);
}
}
catch
(
DBException
e
)
{
throw
new
DBCException
(
"Can't apply query filter"
,
e
);
}
Boolean
hasParameters
=
prepareStatementParameters
(
sqlStatement
);
...
...
@@ -285,11 +294,6 @@ public class SQLQueryJob extends DataSourceJob
return
false
;
}
if
(
fireEvents
&&
listener
!=
null
)
{
// Notify query start
listener
.
onStartQuery
(
sqlStatement
);
}
statistics
.
setQueryText
(
sqlQuery
);
startTime
=
System
.
currentTimeMillis
();
...
...
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/UIUtils.java
浏览文件 @
88e58a76
...
...
@@ -18,7 +18,6 @@
*/
package
org.jkiss.dbeaver.ui
;
import
org.jkiss.dbeaver.core.Log
;
import
org.eclipse.core.resources.IProject
;
import
org.eclipse.core.runtime.*
;
import
org.eclipse.jface.action.IAction
;
...
...
@@ -32,7 +31,6 @@ import org.eclipse.swt.SWTException;
import
org.eclipse.swt.custom.CTabFolder
;
import
org.eclipse.swt.custom.CTabItem
;
import
org.eclipse.swt.custom.SashForm
;
import
org.eclipse.swt.custom.TableEditor
;
import
org.eclipse.swt.dnd.Clipboard
;
import
org.eclipse.swt.dnd.Transfer
;
import
org.eclipse.swt.events.*
;
...
...
@@ -52,10 +50,7 @@ import org.jkiss.code.NotNull;
import
org.jkiss.code.Nullable
;
import
org.jkiss.dbeaver.DBException
;
import
org.jkiss.dbeaver.DBeaverConstants
;
import
org.jkiss.dbeaver.core.CoreMessages
;
import
org.jkiss.dbeaver.core.DBeaverActivator
;
import
org.jkiss.dbeaver.core.DBeaverCore
;
import
org.jkiss.dbeaver.core.DBeaverUI
;
import
org.jkiss.dbeaver.core.*
;
import
org.jkiss.dbeaver.model.DBUtils
;
import
org.jkiss.dbeaver.runtime.RunnableWithResult
;
import
org.jkiss.dbeaver.runtime.RuntimeUtils
;
...
...
@@ -1165,52 +1160,4 @@ public class UIUtils {
return
new
RGB
(
r
,
g
,
b
);
}
public
interface
TableEditorController
{
void
showEditor
(
TableItem
item
);
void
closeEditor
(
TableEditor
tableEditor
);
}
public
static
class
ColumnTextEditorTraverseListener
implements
TraverseListener
{
private
final
Table
table
;
private
final
TableEditor
tableEditor
;
private
final
int
columnIndex
;
private
final
TableEditorController
controller
;
public
ColumnTextEditorTraverseListener
(
Table
table
,
TableEditor
tableEditor
,
int
columnIndex
,
TableEditorController
controller
)
{
this
.
table
=
table
;
this
.
tableEditor
=
tableEditor
;
this
.
columnIndex
=
columnIndex
;
this
.
controller
=
controller
;
}
@Override
public
void
keyTraversed
(
TraverseEvent
e
)
{
Text
editor
=
(
Text
)
tableEditor
.
getEditor
();
if
(
editor
!=
null
&&
editor
.
isDisposed
())
{
editor
=
null
;
}
if
(
e
.
detail
==
SWT
.
TRAVERSE_RETURN
)
{
if
(
editor
!=
null
)
{
tableEditor
.
getItem
().
setText
(
columnIndex
,
editor
.
getText
());
controller
.
closeEditor
(
tableEditor
);
}
else
{
TableItem
[]
selection
=
table
.
getSelection
();
if
(
selection
!=
null
&&
selection
.
length
>=
1
)
{
controller
.
showEditor
(
selection
[
0
]);
}
}
e
.
doit
=
false
;
e
.
detail
=
SWT
.
TRAVERSE_NONE
;
}
else
if
(
e
.
detail
==
SWT
.
TRAVERSE_ESCAPE
&&
editor
!=
null
)
{
controller
.
closeEditor
(
tableEditor
);
e
.
doit
=
false
;
e
.
detail
=
SWT
.
TRAVERSE_NONE
;
}
}
}
}
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/CustomTableEditor.java
浏览文件 @
88e58a76
...
...
@@ -72,6 +72,9 @@ public abstract class CustomTableEditor implements MouseListener, TraverseListen
closeEditor
();
table
.
showItem
(
item
);
final
Control
editor
=
createEditor
(
table
,
columnIndex
,
item
);
if
(
editor
==
null
)
{
return
;
}
editor
.
setFocus
();
editor
.
addFocusListener
(
new
FocusAdapter
()
{
@Override
...
...
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/FilterSettingsDialog.java
浏览文件 @
88e58a76
...
...
@@ -40,6 +40,7 @@ import org.jkiss.dbeaver.model.sql.SQLUtils;
import
org.jkiss.dbeaver.ui.DBIcon
;
import
org.jkiss.dbeaver.ui.IHelpContextIds
;
import
org.jkiss.dbeaver.ui.UIUtils
;
import
org.jkiss.dbeaver.ui.controls.CustomTableEditor
;
import
org.jkiss.dbeaver.ui.controls.ListContentProvider
;
import
org.jkiss.dbeaver.ui.dialogs.HelpEnabledDialog
;
import
org.jkiss.utils.CommonUtils
;
...
...
@@ -113,26 +114,62 @@ class FilterSettingsDialog extends HelpEnabledDialog {
UIUtils
.
createTableColumn
(
columnsTable
,
SWT
.
LEFT
,
CoreMessages
.
controls_resultset_filter_column_order
);
criteriaColumn
=
UIUtils
.
createTableColumn
(
columnsTable
,
SWT
.
LEFT
,
CoreMessages
.
controls_resultset_filter_column_criteria
);
//columnsTable.addListener(SWT.PaintItem, new ColumnPaintListener());
final
TableEditor
tableEditor
=
new
TableEditor
(
columnsTable
);
tableEditor
.
horizontalAlignment
=
SWT
.
CENTER
;
tableEditor
.
verticalAlignment
=
SWT
.
TOP
;
tableEditor
.
grabHorizontal
=
true
;
tableEditor
.
minimumWidth
=
50
;
final
CustomTableEditor
tableEditor
=
new
CustomTableEditor
(
columnsTable
)
{
@Override
protected
Control
createEditor
(
Table
table
,
int
index
,
TableItem
item
)
{
if
(
index
==
2
)
{
toggleColumnOrder
(
item
);
return
null
;
}
else
if
(
index
==
3
&&
resultSetViewer
.
supportsDataFilter
())
{
Text
text
=
new
Text
(
columnsTable
,
SWT
.
BORDER
);
text
.
setText
(
item
.
getText
(
index
));
text
.
selectAll
();
return
text
;
}
return
null
;
}
@Override
protected
void
saveEditorValue
(
Control
control
,
int
index
,
TableItem
item
)
{
Text
text
=
(
Text
)
control
;
String
criteria
=
text
.
getText
().
trim
();
DBDAttributeConstraint
constraint
=
(
DBDAttributeConstraint
)
item
.
getData
();
if
(
CommonUtils
.
isEmpty
(
criteria
))
{
constraint
.
setCriteria
(
null
);
}
else
{
constraint
.
setCriteria
(
criteria
);
}
item
.
setText
(
3
,
criteria
);
}
private
void
toggleColumnOrder
(
TableItem
item
)
{
DBDAttributeConstraint
constraint
=
(
DBDAttributeConstraint
)
item
.
getData
();
if
(
constraint
.
getOrderPosition
()
==
0
)
{
// Add new ordered column
constraint
.
setOrderPosition
(
dataFilter
.
getMaxOrderingPosition
()
+
1
);
constraint
.
setOrderDescending
(
false
);
}
else
if
(!
constraint
.
isOrderDescending
())
{
constraint
.
setOrderDescending
(
true
);
}
else
{
// Remove ordered column
for
(
DBDAttributeConstraint
con2
:
dataFilter
.
getConstraints
())
{
if
(
con2
.
getOrderPosition
()
>
constraint
.
getOrderPosition
())
{
con2
.
setOrderPosition
(
con2
.
getOrderPosition
()
-
1
);
}
}
constraint
.
setOrderPosition
(
0
);
constraint
.
setOrderDescending
(
false
);
}
columnsViewer
.
refresh
();
}
};
columnsViewer
.
addCheckStateListener
(
new
ICheckStateListener
()
{
@Override
public
void
checkStateChanged
(
CheckStateChangedEvent
event
)
{
public
void
checkStateChanged
(
CheckStateChangedEvent
event
)
{
((
DBDAttributeConstraint
)
event
.
getElement
()).
setVisible
(
event
.
getChecked
());
}
});
ColumnsMouseListener
mouseListener
=
new
ColumnsMouseListener
(
tableEditor
,
columnsTable
);
columnsTable
.
addMouseListener
(
mouseListener
);
columnsTable
.
addTraverseListener
(
new
UIUtils
.
ColumnTextEditorTraverseListener
(
columnsTable
,
tableEditor
,
3
,
mouseListener
));
{
Composite
controlGroup
=
new
Composite
(
columnsGroup
,
SWT
.
NONE
);
gd
=
new
GridData
(
GridData
.
FILL_HORIZONTAL
);
...
...
@@ -371,97 +408,6 @@ class FilterSettingsDialog extends HelpEnabledDialog {
}
private
class
ColumnsMouseListener
extends
MouseAdapter
implements
UIUtils
.
TableEditorController
{
private
final
TableEditor
tableEditor
;
private
final
Table
columnsTable
;
public
ColumnsMouseListener
(
TableEditor
tableEditor
,
Table
columnsTable
)
{
this
.
tableEditor
=
tableEditor
;
this
.
columnsTable
=
columnsTable
;
}
@Override
public
void
mouseUp
(
MouseEvent
e
)
{
// Clean up any previous editor control
closeEditor
(
tableEditor
);
TableItem
item
=
columnsTable
.
getItem
(
new
Point
(
e
.
x
,
e
.
y
));
if
(
item
==
null
)
{
return
;
}
int
columnIndex
=
UIUtils
.
getColumnAtPos
(
item
,
e
.
x
,
e
.
y
);
if
(
columnIndex
<=
0
)
{
return
;
}
if
(
columnIndex
==
2
)
{
//if (isDef) {
toggleColumnOrder
(
item
);
//}
}
else
if
(
columnIndex
==
3
&&
resultSetViewer
.
supportsDataFilter
())
{
showEditor
(
item
);
}
}
private
void
toggleColumnOrder
(
TableItem
item
)
{
DBDAttributeConstraint
constraint
=
(
DBDAttributeConstraint
)
item
.
getData
();
if
(
constraint
.
getOrderPosition
()
==
0
)
{
// Add new ordered column
constraint
.
setOrderPosition
(
dataFilter
.
getMaxOrderingPosition
()
+
1
);
constraint
.
setOrderDescending
(
false
);
}
else
if
(!
constraint
.
isOrderDescending
())
{
constraint
.
setOrderDescending
(
true
);
}
else
{
// Remove ordered column
for
(
DBDAttributeConstraint
con2
:
dataFilter
.
getConstraints
())
{
if
(
con2
.
getOrderPosition
()
>
constraint
.
getOrderPosition
())
{
con2
.
setOrderPosition
(
con2
.
getOrderPosition
()
-
1
);
}
}
constraint
.
setOrderPosition
(
0
);
constraint
.
setOrderDescending
(
false
);
}
columnsViewer
.
refresh
();
}
@Override
public
void
showEditor
(
final
TableItem
item
)
{
// Identify the selected row
Text
text
=
new
Text
(
columnsTable
,
SWT
.
BORDER
);
text
.
setText
(
item
.
getText
(
3
));
text
.
addModifyListener
(
new
ModifyListener
()
{
@Override
public
void
modifyText
(
ModifyEvent
e
)
{
Text
text
=
(
Text
)
tableEditor
.
getEditor
();
String
criteria
=
text
.
getText
().
trim
();
DBDAttributeConstraint
constraint
=
(
DBDAttributeConstraint
)
item
.
getData
();
if
(
CommonUtils
.
isEmpty
(
criteria
))
{
constraint
.
setCriteria
(
null
);
}
else
{
constraint
.
setCriteria
(
criteria
);
}
tableEditor
.
getItem
().
setText
(
3
,
criteria
);
}
});
text
.
selectAll
();
// Selected by mouse
text
.
setFocus
();
tableEditor
.
setEditor
(
text
,
item
,
3
);
}
@Override
public
void
closeEditor
(
TableEditor
tableEditor
)
{
Control
oldEditor
=
this
.
tableEditor
.
getEditor
();
if
(
oldEditor
!=
null
)
oldEditor
.
dispose
();
}
}
class
CheckStateProvider
implements
ICheckStateProvider
{
@Override
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录