Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
suliangchun
dbeaver
提交
155bf0c4
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,发现更多精彩内容 >>
提交
155bf0c4
编写于
6月 09, 2016
作者:
S
serge-rider
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/devel' into devel
上级
d1400ca0
4834dab2
变更
17
隐藏空白更改
内联
并排
Showing
17 changed file
with
289 addition
and
77 deletion
+289
-77
plugins/org.jkiss.dbeaver.core/icons/misc/filter_add.png
plugins/org.jkiss.dbeaver.core/icons/misc/filter_add.png
+0
-0
plugins/org.jkiss.dbeaver.core/plugin.properties
plugins/org.jkiss.dbeaver.core/plugin.properties
+3
-1
plugins/org.jkiss.dbeaver.core/plugin.xml
plugins/org.jkiss.dbeaver.core/plugin.xml
+18
-1
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreMessages.java
...dbeaver.core/src/org/jkiss/dbeaver/core/CoreMessages.java
+1
-1
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources.properties
....core/src/org/jkiss/dbeaver/core/CoreResources.properties
+1
-0
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/ObjectPropertyTester.java
...rc/org/jkiss/dbeaver/ui/actions/ObjectPropertyTester.java
+7
-0
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/navigator/NavigatorHandlerFilterObjects.java
...r/ui/actions/navigator/NavigatorHandlerFilterObjects.java
+93
-0
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/FilterValueEditDialog.java
.../dbeaver/ui/controls/resultset/FilterValueEditDialog.java
+19
-8
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/spreadsheet/ViewValuePanel.java
...ver/ui/controls/resultset/spreadsheet/ViewValuePanel.java
+8
-9
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/editors/ReferenceValueEditor.java
...g/jkiss/dbeaver/ui/data/editors/ReferenceValueEditor.java
+40
-35
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/connection/EditObjectFilterDialog.java
...dbeaver/ui/dialogs/connection/EditObjectFilterDialog.java
+12
-0
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/data/DBDLabelValuePair.java
...l/src/org/jkiss/dbeaver/model/data/DBDLabelValuePair.java
+26
-1
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/jdbc/struct/JDBCTableColumn.java
...jkiss/dbeaver/model/impl/jdbc/struct/JDBCTableColumn.java
+5
-4
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/jdbc/struct/JDBCTableConstraint.java
...s/dbeaver/model/impl/jdbc/struct/JDBCTableConstraint.java
+18
-3
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/sql/SQLUtils.java
...eaver.model/src/org/jkiss/dbeaver/model/sql/SQLUtils.java
+5
-1
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/struct/DBSObjectFilter.java
...l/src/org/jkiss/dbeaver/model/struct/DBSObjectFilter.java
+27
-10
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/virtual/DBVUtils.java
...r.model/src/org/jkiss/dbeaver/model/virtual/DBVUtils.java
+6
-3
未找到文件。
plugins/org.jkiss.dbeaver.core/icons/misc/filter_add.png
0 → 100644
浏览文件 @
155bf0c4
1.2 KB
plugins/org.jkiss.dbeaver.core/plugin.properties
浏览文件 @
155bf0c4
...
...
@@ -89,7 +89,9 @@ command.org.jkiss.dbeaver.core.object.create.description=Create new database obj
command.org.jkiss.dbeaver.core.object.delete.name
=
Delete Object
command.org.jkiss.dbeaver.core.object.delete.description
=
Delete database object
command.org.jkiss.dbeaver.core.object.filter.name
=
Filter
command.org.jkiss.dbeaver.core.object.filter.description
=
Filter objects
command.org.jkiss.dbeaver.core.object.filter.description
=
Configure objects filter
command.org.jkiss.dbeaver.core.object.filter.add.name
=
Filter object
command.org.jkiss.dbeaver.core.object.filter.add.description
=
Filter selected object
command.org.jkiss.dbeaver.core.object.goto.name
=
Open Database Object ...
command.org.jkiss.dbeaver.core.object.goto.description
=
Open database meta object
...
...
plugins/org.jkiss.dbeaver.core/plugin.xml
浏览文件 @
155bf0c4
...
...
@@ -70,7 +70,7 @@
class=
"org.jkiss.dbeaver.ui.actions.ObjectPropertyTester"
id=
"org.jkiss.dbeaver.ui.actions.ObjectPropertyTester"
namespace=
"org.jkiss.dbeaver.core.object"
properties=
"canOpen,canCreate,canPaste,canDelete,canRename,canFilter"
properties=
"canOpen,canCreate,canPaste,canDelete,canRename,canFilter
,canFilterObject
"
type=
"org.jkiss.dbeaver.model.navigator.DBNNode"
/>
<propertyTester
class=
"org.jkiss.dbeaver.ui.actions.ResourcePropertyTester"
...
...
@@ -206,6 +206,7 @@
<command
id=
"org.jkiss.dbeaver.core.object.create"
name=
"%command.org.jkiss.dbeaver.core.object.create.name"
description=
"%command.org.jkiss.dbeaver.core.object.create.description"
categoryId=
"org.jkiss.dbeaver.core.database"
/>
<command
id=
"org.jkiss.dbeaver.core.object.delete"
name=
"%command.org.jkiss.dbeaver.core.object.delete.name"
description=
"%command.org.jkiss.dbeaver.core.object.delete.description"
categoryId=
"org.jkiss.dbeaver.core.database"
/>
<command
id=
"org.jkiss.dbeaver.core.object.filter"
name=
"%command.org.jkiss.dbeaver.core.object.filter.name"
description=
"%command.org.jkiss.dbeaver.core.object.filter.description"
categoryId=
"org.jkiss.dbeaver.core.database"
/>
<command
id=
"org.jkiss.dbeaver.core.object.filter.add"
name=
"%command.org.jkiss.dbeaver.core.object.filter.add.name"
description=
"%command.org.jkiss.dbeaver.core.object.filter.add.description"
categoryId=
"org.jkiss.dbeaver.core.database"
/>
<command
id=
"org.jkiss.dbeaver.core.object.goto"
name=
"%command.org.jkiss.dbeaver.core.object.goto.name"
description=
"%command.org.jkiss.dbeaver.core.object.goto.description"
categoryId=
"org.jkiss.dbeaver.core.database"
/>
<command
id=
"org.jkiss.dbeaver.ui.editors.sql.run.statement"
name=
"%command.org.jkiss.dbeaver.ui.editors.sql.run.statement.name"
description=
"%command.org.jkiss.dbeaver.ui.editors.sql.run.statement.description"
categoryId=
"org.jkiss.dbeaver.core.sql"
/>
...
...
@@ -295,6 +296,7 @@
<image
commandId=
"org.jkiss.dbeaver.core.object.create"
icon=
"IMG_TOOL_NEW_WIZARD"
/>
<image
commandId=
"org.jkiss.dbeaver.core.object.delete"
icon=
"IMG_ETOOL_DELETE"
/>
<image
commandId=
"org.jkiss.dbeaver.core.object.filter"
icon=
"icons/misc/filter.png"
/>
<image
commandId=
"org.jkiss.dbeaver.core.object.filter.add"
icon=
"icons/misc/filter_add.png"
/>
<image
commandId=
"org.jkiss.dbeaver.ui.editors.sql.run.statement"
icon=
"icons/sql/sql_exec.png"
/>
<image
commandId=
"org.jkiss.dbeaver.ui.editors.sql.run.statementNew"
icon=
"icons/sql/sql_exec_new.png"
/>
...
...
@@ -705,6 +707,18 @@
</with>
</enabledWhen>
</handler>
<handler
commandId=
"org.jkiss.dbeaver.core.object.filter.add"
class=
"org.jkiss.dbeaver.ui.actions.navigator.NavigatorHandlerFilterObjects"
>
<enabledWhen>
<with
variable=
"selection"
>
<iterate
operator=
"and"
>
<and>
<instanceof
value=
"org.jkiss.dbeaver.model.navigator.DBNNode"
/>
<test
property=
"org.jkiss.dbeaver.core.object.canFilterObject"
/>
</and>
</iterate>
</with>
</enabledWhen>
</handler>
<handler
commandId=
"org.eclipse.ui.edit.paste"
class=
"org.jkiss.dbeaver.ui.actions.navigator.NavigatorHandlerObjectCreateCopy"
>
<activeWhen><reference
definitionId=
"org.jkiss.dbeaver.core.ui.navigator.part"
/></activeWhen>
...
...
@@ -1561,6 +1575,9 @@
<command
commandId=
"org.eclipse.ui.edit.rename"
>
<visibleWhen
checkEnabled=
"true"
/>
</command>
<command
commandId=
"org.jkiss.dbeaver.core.object.filter.add"
>
<visibleWhen
checkEnabled=
"true"
/>
</command>
<command
commandId=
"org.jkiss.dbeaver.core.sql.script.associate"
>
<visibleWhen
checkEnabled=
"true"
/>
...
...
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreMessages.java
浏览文件 @
155bf0c4
...
...
@@ -687,7 +687,7 @@ public class CoreMessages extends NLS {
public
static
String
dialog_filter_button_enable
;
public
static
String
dialog_filter_button_remove
;
public
static
String
dialog_filter_button_clear
;
public
static
String
dialog_filter_global_link
;
public
static
String
dialog_filter_list_exclude
;
...
...
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources.properties
浏览文件 @
155bf0c4
...
...
@@ -416,6 +416,7 @@ data_transfer_wizard_settings_title=Settings
dialog_filter_button_add
=
Add
dialog_filter_button_enable
=
Enable
dialog_filter_button_remove
=
Remove
dialog_filter_button_clear
=
Clear
dialog_filter_global_link
=
<a>Show global filter</a>
dialog_filter_list_exclude
=
Exclude
dialog_filter_list_include
=
Include
...
...
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/ObjectPropertyTester.java
浏览文件 @
155bf0c4
...
...
@@ -44,6 +44,7 @@ public class ObjectPropertyTester extends PropertyTester
public
static
final
String
PROP_CAN_DELETE
=
"canDelete"
;
public
static
final
String
PROP_CAN_RENAME
=
"canRename"
;
public
static
final
String
PROP_CAN_FILTER
=
"canFilter"
;
public
static
final
String
PROP_CAN_FILTER_OBJECT
=
"canFilterObject"
;
public
ObjectPropertyTester
()
{
super
();
...
...
@@ -162,6 +163,12 @@ public class ObjectPropertyTester extends PropertyTester
}
break
;
}
case
PROP_CAN_FILTER_OBJECT:
{
if
(
node
.
getParentNode
()
instanceof
DBNDatabaseFolder
&&
((
DBNDatabaseFolder
)
node
.
getParentNode
()).
getItemsMeta
()
!=
null
)
{
return
true
;
}
break
;
}
}
return
false
;
}
...
...
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/navigator/NavigatorHandlerFilterObjects.java
0 → 100644
浏览文件 @
155bf0c4
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2016 Serge Rieder (serge@jkiss.org)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License (version 2)
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package
org.jkiss.dbeaver.ui.actions.navigator
;
import
org.eclipse.core.commands.ExecutionEvent
;
import
org.eclipse.core.commands.ExecutionException
;
import
org.eclipse.jface.viewers.ISelection
;
import
org.eclipse.jface.viewers.ISelectionProvider
;
import
org.eclipse.jface.viewers.IStructuredSelection
;
import
org.eclipse.ui.commands.IElementUpdater
;
import
org.eclipse.ui.handlers.HandlerUtil
;
import
org.eclipse.ui.menus.UIElement
;
import
org.jkiss.dbeaver.model.navigator.DBNDatabaseFolder
;
import
org.jkiss.dbeaver.model.navigator.DBNNode
;
import
org.jkiss.dbeaver.model.struct.DBSObjectFilter
;
import
org.jkiss.dbeaver.ui.UIUtils
;
import
org.jkiss.dbeaver.ui.navigator.NavigatorUtils
;
import
java.util.HashMap
;
import
java.util.Map
;
public
class
NavigatorHandlerFilterObjects
extends
NavigatorHandlerObjectCreateBase
implements
IElementUpdater
{
@Override
public
Object
execute
(
ExecutionEvent
event
)
throws
ExecutionException
{
final
ISelection
selection
=
HandlerUtil
.
getCurrentSelection
(
event
);
if
(
selection
instanceof
IStructuredSelection
)
{
Map
<
DBNDatabaseFolder
,
DBSObjectFilter
>
folders
=
new
HashMap
<>();
for
(
Object
item
:
((
IStructuredSelection
)
selection
).
toArray
())
{
if
(
item
instanceof
DBNNode
)
{
final
DBNNode
node
=
(
DBNNode
)
item
;
DBNDatabaseFolder
folder
=
(
DBNDatabaseFolder
)
node
.
getParentNode
();
DBSObjectFilter
nodeFilter
=
folders
.
get
(
folder
);
if
(
nodeFilter
==
null
)
{
nodeFilter
=
folder
.
getNodeFilter
(
folder
.
getItemsMeta
(),
true
);
if
(
nodeFilter
==
null
)
{
nodeFilter
=
new
DBSObjectFilter
();
}
folders
.
put
(
folder
,
nodeFilter
);
}
nodeFilter
.
addExclude
(
node
.
getNodeName
());
nodeFilter
.
setEnabled
(
true
);
}
}
// Save folders
for
(
Map
.
Entry
<
DBNDatabaseFolder
,
DBSObjectFilter
>
entry
:
folders
.
entrySet
())
{
entry
.
getKey
().
setNodeFilter
(
entry
.
getKey
().
getItemsMeta
(),
entry
.
getValue
());
}
// Refresh all folders
NavigatorHandlerRefresh
.
refreshNavigator
(
folders
.
keySet
());
}
return
null
;
}
@Override
public
void
updateElement
(
UIElement
element
,
Map
parameters
)
{
if
(!
updateUI
)
{
return
;
}
ISelectionProvider
selectionProvider
=
UIUtils
.
getSelectionProvider
(
element
.
getServiceLocator
());
if
(
selectionProvider
!=
null
)
{
final
ISelection
selection
=
selectionProvider
.
getSelection
();
if
(
selection
instanceof
IStructuredSelection
)
{
final
int
objectCount
=
((
IStructuredSelection
)
selection
).
size
();
if
(
objectCount
>
1
)
{
element
.
setText
(
"Filter "
+
objectCount
+
" objects"
);
}
else
{
DBNNode
node
=
NavigatorUtils
.
getSelectedNode
(
selection
);
if
(
node
!=
null
)
{
element
.
setText
(
"Filter "
+
node
.
getNodeType
());
}
}
}
}
}
}
\ No newline at end of file
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/FilterValueEditDialog.java
浏览文件 @
155bf0c4
...
...
@@ -37,18 +37,19 @@ import org.jkiss.dbeaver.model.exec.DBCSession;
import
org.jkiss.dbeaver.model.runtime.AbstractJob
;
import
org.jkiss.dbeaver.model.runtime.DBRProgressMonitor
;
import
org.jkiss.dbeaver.model.struct.DBSAttributeEnumerable
;
import
org.jkiss.dbeaver.model.struct.DBSEntityReferrer
;
import
org.jkiss.dbeaver.ui.DBeaverIcons
;
import
org.jkiss.dbeaver.ui.UIIcon
;
import
org.jkiss.dbeaver.ui.UIUtils
;
import
org.jkiss.dbeaver.ui.data.IValueController
;
import
org.jkiss.dbeaver.ui.data.IValueEditor
;
import
org.jkiss.dbeaver.ui.data.editors.ReferenceValueEditor
;
import
org.jkiss.dbeaver.ui.dialogs.BaseDialog
;
import
org.jkiss.dbeaver.utils.GeneralUtils
;
import
org.jkiss.utils.ArrayUtils
;
import
org.jkiss.utils.CommonUtils
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.TreeMap
;
import
java.util.*
;
class
FilterValueEditDialog
extends
BaseDialog
{
...
...
@@ -138,14 +139,19 @@ class FilterValueEditDialog extends BaseDialog {
}
private
void
createMultiValueSelector
(
Composite
composite
)
{
table
=
new
Table
(
composite
,
SWT
.
BORDER
|
SWT
.
SINGLE
|
SWT
.
CHECK
);
table
=
new
Table
(
composite
,
SWT
.
BORDER
|
SWT
.
SINGLE
|
SWT
.
CHECK
|
SWT
.
FULL_SELECTION
);
table
.
setLinesVisible
(
true
);
GridData
gd
=
new
GridData
(
GridData
.
FILL_BOTH
);
gd
.
widthHint
=
400
;
gd
.
heightHint
=
300
;
table
.
setLayoutData
(
gd
);
UIUtils
.
createTableColumn
(
table
,
SWT
.
LEFT
,
"Value"
);
UIUtils
.
createTableColumn
(
table
,
SWT
.
LEFT
,
"Description"
);
if
(
attr
.
getEntityAttribute
()
instanceof
DBSAttributeEnumerable
)
{
final
DBSEntityReferrer
enumerableConstraint
=
ReferenceValueEditor
.
getEnumerableConstraint
(
attr
);
if
(
enumerableConstraint
!=
null
)
{
}
else
if
(
attr
.
getEntityAttribute
()
instanceof
DBSAttributeEnumerable
)
{
loadAttributeEnum
((
DBSAttributeEnumerable
)
attr
.
getEntityAttribute
());
}
else
{
java
.
util
.
Map
<
String
,
DBDLabelValuePair
>
enumList
=
new
TreeMap
<>();
...
...
@@ -184,18 +190,23 @@ class FilterValueEditDialog extends BaseDialog {
}
private
void
loadMultiValueList
(
Collection
<
DBDLabelValuePair
>
values
)
{
for
(
DBDLabelValuePair
row
:
values
)
{
java
.
util
.
List
<
DBDLabelValuePair
>
sortedList
=
new
ArrayList
<>(
values
);
Collections
.
sort
(
sortedList
);
for
(
DBDLabelValuePair
row
:
sortedList
)
{
Object
cellValue
=
row
.
getValue
();
String
itemString
=
attr
.
getValueHandler
().
getValueDisplayString
(
attr
,
cellValue
,
DBDDisplayFormat
.
UI
);
TableItem
item
=
new
TableItem
(
table
,
SWT
.
LEFT
);
item
.
setData
(
cellValue
);
item
.
setText
(
itemString
);
item
.
setText
(
0
,
itemString
);
if
(!
CommonUtils
.
isEmpty
(
row
.
getLabel
()))
{
item
.
setText
(
1
,
row
.
getLabel
());
}
if
(
ArrayUtils
.
contains
(
rows
,
row
))
{
item
.
setChecked
(
true
);
}
}
UIUtils
.
packColumns
(
table
);
UIUtils
.
packColumns
(
table
,
false
);
}
@Override
...
...
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/spreadsheet/ViewValuePanel.java
浏览文件 @
155bf0c4
...
...
@@ -21,7 +21,10 @@ import org.eclipse.jface.action.Action;
import
org.eclipse.jface.action.Separator
;
import
org.eclipse.jface.action.ToolBarManager
;
import
org.eclipse.swt.SWT
;
import
org.eclipse.swt.events.*
;
import
org.eclipse.swt.events.PaintEvent
;
import
org.eclipse.swt.events.PaintListener
;
import
org.eclipse.swt.events.TraverseEvent
;
import
org.eclipse.swt.events.TraverseListener
;
import
org.eclipse.swt.graphics.Color
;
import
org.eclipse.swt.graphics.Point
;
import
org.eclipse.swt.graphics.Rectangle
;
...
...
@@ -36,7 +39,10 @@ import org.jkiss.dbeaver.model.DBIcon;
import
org.jkiss.dbeaver.model.DBUtils
;
import
org.jkiss.dbeaver.model.data.DBDValue
;
import
org.jkiss.dbeaver.model.exec.DBCException
;
import
org.jkiss.dbeaver.ui.*
;
import
org.jkiss.dbeaver.ui.ActionUtils
;
import
org.jkiss.dbeaver.ui.DBeaverIcons
;
import
org.jkiss.dbeaver.ui.UIIcon
;
import
org.jkiss.dbeaver.ui.UIUtils
;
import
org.jkiss.dbeaver.ui.controls.resultset.IResultSetController
;
import
org.jkiss.dbeaver.ui.data.IValueController
;
import
org.jkiss.dbeaver.ui.data.IValueEditor
;
...
...
@@ -212,9 +218,6 @@ abstract class ViewValuePanel extends Composite {
}
if
(
valueViewer
!=
null
)
{
try
{
if
(
referenceValueEditor
!=
null
)
{
referenceValueEditor
.
setHandleEditorChange
(
false
);
}
Object
newValue
=
previewController
.
getValue
();
if
(
newValue
instanceof
DBDValue
)
{
// Do not check for difference
...
...
@@ -227,10 +230,6 @@ abstract class ViewValuePanel extends Composite {
}
}
catch
(
DBException
e
)
{
log
.
error
(
e
);
}
finally
{
if
(
referenceValueEditor
!=
null
)
{
referenceValueEditor
.
setHandleEditorChange
(
true
);
}
}
valueViewer
.
setDirty
(
false
);
}
...
...
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/editors/ReferenceValueEditor.java
浏览文件 @
155bf0c4
...
...
@@ -75,7 +75,6 @@ public class ReferenceValueEditor {
private
IValueEditor
valueEditor
;
private
DBSEntityReferrer
refConstraint
;
private
Table
editorSelector
;
private
boolean
handleEditorChange
;
private
SelectorLoaderJob
loaderJob
=
null
;
public
ReferenceValueEditor
(
IValueController
valueController
,
IValueEditor
valueEditor
)
{
...
...
@@ -92,21 +91,28 @@ public class ReferenceValueEditor {
private
DBSEntityReferrer
getEnumerableConstraint
()
{
if
(
valueController
instanceof
IAttributeController
)
{
try
{
DBSEntityAttribute
entityAttribute
=
((
IAttributeController
)
valueController
).
getBinding
().
getEntityAttribute
();
if
(
entityAttribute
!=
null
)
{
List
<
DBSEntityReferrer
>
refs
=
DBUtils
.
getAttributeReferrers
(
VoidProgressMonitor
.
INSTANCE
,
entityAttribute
);
DBSEntityReferrer
constraint
=
refs
.
isEmpty
()
?
null
:
refs
.
get
(
0
);
if
(
constraint
instanceof
DBSEntityAssociation
&&
((
DBSEntityAssociation
)
constraint
).
getReferencedConstraint
()
instanceof
DBSConstraintEnumerable
&&
((
DBSConstraintEnumerable
)((
DBSEntityAssociation
)
constraint
).
getReferencedConstraint
()).
supportsEnumeration
())
{
return
getEnumerableConstraint
(((
IAttributeController
)
valueController
).
getBinding
());
}
return
null
;
}
public
static
DBSEntityReferrer
getEnumerableConstraint
(
DBDAttributeBinding
binding
)
{
try
{
DBSEntityAttribute
entityAttribute
=
binding
.
getEntityAttribute
();
if
(
entityAttribute
!=
null
)
{
List
<
DBSEntityReferrer
>
refs
=
DBUtils
.
getAttributeReferrers
(
VoidProgressMonitor
.
INSTANCE
,
entityAttribute
);
DBSEntityReferrer
constraint
=
refs
.
isEmpty
()
?
null
:
refs
.
get
(
0
);
if
(
constraint
instanceof
DBSEntityAssociation
&&
((
DBSEntityAssociation
)
constraint
).
getReferencedConstraint
()
instanceof
DBSConstraintEnumerable
)
{
final
DBSConstraintEnumerable
refConstraint
=
(
DBSConstraintEnumerable
)
((
DBSEntityAssociation
)
constraint
).
getReferencedConstraint
();
if
(
refConstraint
!=
null
&&
refConstraint
.
supportsEnumeration
())
{
return
constraint
;
}
}
}
catch
(
DBException
e
)
{
log
.
error
(
e
);
}
}
catch
(
DBException
e
)
{
log
.
error
(
e
);
}
return
null
;
}
...
...
@@ -185,7 +191,6 @@ public class ReferenceValueEditor {
{
TableItem
[]
selection
=
editorSelector
.
getSelection
();
if
(
selection
!=
null
&&
selection
.
length
>
0
)
{
handleEditorChange
=
false
;
Object
value
=
selection
[
0
].
getData
();
//editorControl.setText(selection[0].getText());
try
{
...
...
@@ -193,7 +198,6 @@ public class ReferenceValueEditor {
}
catch
(
DBException
e1
)
{
log
.
error
(
e1
);
}
handleEditorChange
=
true
;
}
}
});
...
...
@@ -210,7 +214,23 @@ public class ReferenceValueEditor {
log
.
error
(
e1
);
return
;
}
if
(
handleEditorChange
)
{
// Try to select current value in the table
final
String
curTextValue
=
valueController
.
getValueHandler
().
getValueDisplayString
(
((
IAttributeController
)
valueController
).
getBinding
(),
curEditorValue
,
DBDDisplayFormat
.
UI
);
boolean
valueFound
=
false
;
for
(
TableItem
item
:
editorSelector
.
getItems
())
{
if
(
item
.
getText
(
0
).
equals
(
curTextValue
))
{
editorSelector
.
select
(
editorSelector
.
indexOf
(
item
));
editorSelector
.
showItem
(
item
);
valueFound
=
true
;
break
;
}
}
if
(!
valueFound
)
{
// Read dictionary
if
(
loaderJob
.
getState
()
==
Job
.
RUNNING
)
{
// Cancel it and create new one
loaderJob
.
cancel
();
...
...
@@ -218,21 +238,7 @@ public class ReferenceValueEditor {
}
loaderJob
.
setPattern
(
curEditorValue
);
if
(
loaderJob
.
getState
()
!=
Job
.
WAITING
)
{
loaderJob
.
schedule
(
500
);
}
}
else
{
// Just select current value in the table
final
String
curTextValue
=
valueController
.
getValueHandler
().
getValueDisplayString
(
((
IAttributeController
)
valueController
).
getBinding
(),
curEditorValue
,
DBDDisplayFormat
.
UI
);
for
(
TableItem
item
:
editorSelector
.
getItems
())
{
if
(
item
.
getText
(
0
).
equals
(
curTextValue
))
{
editorSelector
.
select
(
editorSelector
.
indexOf
(
item
));
editorSelector
.
showItem
(
item
);
break
;
}
loaderJob
.
schedule
(
100
);
}
}
}
...
...
@@ -242,18 +248,17 @@ public class ReferenceValueEditor {
}
else
if
(
control
instanceof
StyledText
)
{
((
StyledText
)
control
).
addModifyListener
(
modifyListener
);
}
handleEditorChange
=
true
;
loaderJob
=
new
SelectorLoaderJob
();
final
Object
curValue
=
valueController
.
getValue
();
if
(
curValue
instanceof
Number
)
{
loaderJob
.
setPattern
(
curValue
);
}
loaderJob
.
schedule
(
500
);
return
true
;
}
public
void
setHandleEditorChange
(
boolean
handleEditorChange
)
{
this
.
handleEditorChange
=
handleEditorChange
;
}
private
void
updateDictionarySelector
(
Map
<
Object
,
String
>
keyValues
,
DBSEntityAttributeRef
keyColumn
,
DBDValueHandler
keyHandler
)
{
if
(
editorSelector
==
null
||
editorSelector
.
isDisposed
())
{
return
;
...
...
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/connection/EditObjectFilterDialog.java
浏览文件 @
155bf0c4
...
...
@@ -165,6 +165,18 @@ public class EditObjectFilterDialog extends HelpEnabledDialog {
});
removeButton
.
setEnabled
(
false
);
final
Button
clearButton
=
new
Button
(
buttonsGroup
,
SWT
.
PUSH
);
clearButton
.
setText
(
CoreMessages
.
dialog_filter_button_clear
);
clearButton
.
setLayoutData
(
new
GridData
(
GridData
.
FILL_HORIZONTAL
));
clearButton
.
addSelectionListener
(
new
SelectionAdapter
()
{
@Override
public
void
widgetSelected
(
SelectionEvent
e
)
{
tableEditor
.
closeEditor
();
valueTable
.
removeAll
();
removeButton
.
setEnabled
(
false
);
}
});
valueTable
.
addSelectionListener
(
new
SelectionAdapter
()
{
@Override
public
void
widgetSelected
(
SelectionEvent
e
)
{
...
...
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/data/DBDLabelValuePair.java
浏览文件 @
155bf0c4
...
...
@@ -21,7 +21,7 @@ package org.jkiss.dbeaver.model.data;
/**
* Label value pair
*/
public
class
DBDLabelValuePair
{
public
class
DBDLabelValuePair
implements
Comparable
{
private
final
String
label
;
private
final
Object
value
;
...
...
@@ -38,4 +38,29 @@ public class DBDLabelValuePair {
public
Object
getValue
()
{
return
value
;
}
@Override
public
String
toString
()
{
return
value
+
" ("
+
label
+
")"
;
}
@Override
public
int
compareTo
(
Object
o
)
{
if
(
o
instanceof
DBDLabelValuePair
)
{
final
DBDLabelValuePair
lvp
=
(
DBDLabelValuePair
)
o
;
if
(
value
==
lvp
.
value
)
{
return
0
;
}
if
(
value
==
null
)
{
return
-
1
;
}
if
(
lvp
.
value
==
null
)
{
return
1
;
}
if
(
value
instanceof
Comparable
&&
lvp
.
value
instanceof
Comparable
)
{
return
((
Comparable
)
value
).
compareTo
(
lvp
.
value
);
}
}
return
0
;
}
}
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/jdbc/struct/JDBCTableColumn.java
浏览文件 @
155bf0c4
...
...
@@ -160,10 +160,11 @@ public abstract class JDBCTableColumn<TABLE_TYPE extends DBSEntity> extends JDBC
DBDValueHandler
valueHandler
=
DBUtils
.
findValueHandler
(
session
,
this
);
StringBuilder
query
=
new
StringBuilder
();
query
.
append
(
"SELECT DISTINCT "
).
append
(
DBUtils
.
getQuotedIdentifier
(
this
));
String
descColumns
=
DBVUtils
.
getDictionaryDescriptionColumns
(
session
.
getProgressMonitor
(),
this
);
if
(
descColumns
!=
null
)
{
query
.
append
(
", "
).
append
(
descColumns
);
}
// Do not use description columns because they duplicate distinct value
// String descColumns = DBVUtils.getDictionaryDescriptionColumns(session.getProgressMonitor(), this);
// if (descColumns != null) {
// query.append(", ").append(descColumns);
// }
query
.
append
(
" FROM "
).
append
(
DBUtils
.
getObjectFullName
(
getTable
()));
try
(
DBCStatement
dbStat
=
session
.
prepareStatement
(
DBCStatementType
.
QUERY
,
query
.
toString
(),
false
,
false
,
false
))
{
...
...
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/jdbc/struct/JDBCTableConstraint.java
浏览文件 @
155bf0c4
...
...
@@ -20,7 +20,6 @@ package org.jkiss.dbeaver.model.impl.jdbc.struct;
import
org.jkiss.code.NotNull
;
import
org.jkiss.code.Nullable
;
import
org.jkiss.dbeaver.DBException
;
import
org.jkiss.dbeaver.Log
;
import
org.jkiss.dbeaver.model.DBPSaveableObject
;
import
org.jkiss.dbeaver.model.DBUtils
;
import
org.jkiss.dbeaver.model.data.DBDAttributeValue
;
...
...
@@ -38,6 +37,7 @@ import org.jkiss.dbeaver.model.struct.DBSEntityAttribute;
import
org.jkiss.dbeaver.model.struct.DBSEntityConstraintType
;
import
org.jkiss.dbeaver.model.virtual.DBVUtils
;
import
java.math.BigInteger
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.Collections
;
...
...
@@ -50,8 +50,6 @@ public abstract class JDBCTableConstraint<TABLE extends JDBCTable>
extends
AbstractTableConstraint
<
TABLE
>
implements
DBSConstraintEnumerable
,
DBPSaveableObject
{
private
static
final
Log
log
=
Log
.
getLog
(
JDBCTableConstraint
.
class
);
private
boolean
persisted
;
protected
JDBCTableConstraint
(
TABLE
table
,
String
name
,
@Nullable
String
description
,
DBSEntityConstraintType
constraintType
,
boolean
persisted
)
{
...
...
@@ -170,6 +168,23 @@ public abstract class JDBCTableConstraint<TABLE extends JDBCTable>
keyPattern
=
keyPattern
.
toString
()
+
"%"
;
}
if
(
keyPattern
!=
null
)
{
if
(
keyPattern
instanceof
Number
)
{
// Subtract gap value to see some values before specified
int
gapSize
=
maxResults
/
2
;
if
(
keyPattern
instanceof
Integer
)
{
keyPattern
=
(
Integer
)
keyPattern
-
gapSize
;
}
else
if
(
keyPattern
instanceof
Short
)
{
keyPattern
=
(
Short
)
keyPattern
-
gapSize
;
}
else
if
(
keyPattern
instanceof
Long
)
{
keyPattern
=
(
Long
)
keyPattern
-
gapSize
;
}
else
if
(
keyPattern
instanceof
Float
)
{
keyPattern
=
(
Float
)
keyPattern
-
gapSize
;
}
else
if
(
keyPattern
instanceof
Double
)
{
keyPattern
=
(
Double
)
keyPattern
-
gapSize
;
}
else
if
(
keyPattern
instanceof
BigInteger
)
{
keyPattern
=
((
BigInteger
)
keyPattern
).
subtract
(
BigInteger
.
valueOf
(
gapSize
));
}
}
keyValueHandler
.
bindValueObject
(
session
,
dbStat
,
keyColumn
,
paramPos
++,
keyPattern
);
}
...
...
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/sql/SQLUtils.java
浏览文件 @
155bf0c4
...
...
@@ -46,7 +46,6 @@ import java.lang.reflect.Array;
import
java.util.Collection
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.UUID
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
...
...
@@ -148,6 +147,11 @@ public final class SQLUtils {
return
false
;
}
public
static
boolean
isLikePattern
(
String
like
)
{
return
like
.
indexOf
(
'%'
)
!=
-
1
;
// || like.indexOf('_') != -1;
}
public
static
String
makeLikePattern
(
String
like
)
{
return
like
.
replace
(
"%"
,
".*"
).
replace
(
"_"
,
".?"
);
...
...
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/struct/DBSObjectFilter.java
浏览文件 @
155bf0c4
...
...
@@ -17,6 +17,7 @@
*/
package
org.jkiss.dbeaver.model.struct
;
import
org.jkiss.code.NotNull
;
import
org.jkiss.code.Nullable
;
import
org.jkiss.dbeaver.model.sql.SQLUtils
;
import
org.jkiss.utils.CommonUtils
;
...
...
@@ -36,8 +37,8 @@ public class DBSObjectFilter
private
List
<
String
>
include
;
private
List
<
String
>
exclude
;
private
transient
List
<
Pattern
>
includePatterns
=
null
;
private
transient
List
<
Pattern
>
excludePatterns
=
null
;
private
transient
List
<
Object
>
includePatterns
=
null
;
private
transient
List
<
Object
>
excludePatterns
=
null
;
public
DBSObjectFilter
()
{
...
...
@@ -156,16 +157,15 @@ public class DBSObjectFilter
includePatterns
=
new
ArrayList
<>(
include
.
size
());
for
(
String
inc
:
include
)
{
if
(!
inc
.
isEmpty
())
{
includePatterns
.
add
(
Pattern
.
compile
(
SQLUtils
.
makeLikePattern
(
inc
),
Pattern
.
CASE_INSENSITIVE
|
Pattern
.
MULTILINE
));
includePatterns
.
add
(
makePattern
(
inc
));
}
}
}
if
(
includePatterns
!=
null
)
{
// Match includes (at least one should match)
boolean
matched
=
false
;
for
(
Pattern
pattern
:
includePatterns
)
{
if
(
pattern
.
matcher
(
name
).
matches
(
))
{
for
(
Object
pattern
:
includePatterns
)
{
if
(
matchesPattern
(
pattern
,
name
))
{
matched
=
true
;
break
;
}
...
...
@@ -179,15 +179,14 @@ public class DBSObjectFilter
excludePatterns
=
new
ArrayList
<>(
exclude
.
size
());
for
(
String
exc
:
exclude
)
{
if
(!
exc
.
isEmpty
())
{
excludePatterns
.
add
(
Pattern
.
compile
(
SQLUtils
.
makeLikePattern
(
exc
),
Pattern
.
CASE_INSENSITIVE
|
Pattern
.
MULTILINE
));
excludePatterns
.
add
(
makePattern
(
exc
));
}
}
}
if
(
excludePatterns
!=
null
)
{
// Match excludes
for
(
Pattern
pattern
:
excludePatterns
)
{
if
(
pattern
.
matcher
(
name
).
matches
(
))
{
for
(
Object
pattern
:
excludePatterns
)
{
if
(
matchesPattern
(
pattern
,
name
))
{
return
false
;
}
}
...
...
@@ -196,4 +195,22 @@ public class DBSObjectFilter
return
true
;
}
private
static
boolean
matchesPattern
(
Object
pattern
,
String
name
)
{
if
(
pattern
instanceof
Pattern
)
{
return
((
Pattern
)
pattern
).
matcher
(
name
).
matches
();
}
else
{
return
((
String
)
pattern
).
equalsIgnoreCase
(
name
);
}
}
@NotNull
private
static
Object
makePattern
(
String
str
)
{
if
(
SQLUtils
.
isLikePattern
(
str
))
{
return
Pattern
.
compile
(
SQLUtils
.
makeLikePattern
(
str
),
Pattern
.
CASE_INSENSITIVE
|
Pattern
.
MULTILINE
);
}
else
{
return
str
;
}
}
}
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/virtual/DBVUtils.java
浏览文件 @
155bf0c4
...
...
@@ -139,11 +139,14 @@ public abstract class DBVUtils {
public
static
String
getDictionaryDescriptionColumns
(
DBRProgressMonitor
monitor
,
DBSEntityAttribute
attribute
)
throws
DBException
{
DBVEntity
dictionary
=
DBVUtils
.
findVirtualEntity
(
attribute
.
getParentObject
(),
false
);
String
descColumns
=
null
;
if
(
dictionary
!=
null
)
{
return
dictionary
.
getDescriptionColumnNames
();
}
else
{
return
DBVEntity
.
getDefaultDescriptionColumn
(
monitor
,
attribute
);
descColumns
=
dictionary
.
getDescriptionColumnNames
();
}
if
(
descColumns
==
null
)
{
descColumns
=
DBVEntity
.
getDefaultDescriptionColumn
(
monitor
,
attribute
);
}
return
descColumns
;
}
@NotNull
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录