Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
suliangchun
dbeaver
提交
35afd94e
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,发现更多精彩内容 >>
提交
35afd94e
编写于
5月 27, 2018
作者:
S
serge-rider
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
#3298 Edit joined tables
上级
c1d543f4
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
73 addition
and
45 deletion
+73
-45
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetModel.java
...g/jkiss/dbeaver/ui/controls/resultset/ResultSetModel.java
+3
-3
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetPersister.java
...iss/dbeaver/ui/controls/resultset/ResultSetPersister.java
+27
-4
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetViewer.java
.../jkiss/dbeaver/ui/controls/resultset/ResultSetViewer.java
+43
-38
未找到文件。
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetModel.java
浏览文件 @
35afd94e
...
...
@@ -663,9 +663,9 @@ public class ResultSetModel {
}
public
boolean
isAttributeReadOnly
(
@NotNull
DBDAttributeBinding
attribute
)
{
if
(!
isSingleSource
())
{
return
true
;
}
//
if (!isSingleSource()) {
//
return true;
//
}
if
(
attribute
.
getMetaAttribute
().
isReadOnly
())
{
return
true
;
}
...
...
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetPersister.java
浏览文件 @
35afd94e
...
...
@@ -109,8 +109,29 @@ class ResultSetPersister {
this
.
viewer
=
viewer
;
this
.
model
=
viewer
.
getModel
();
this
.
columns
=
model
.
getAttributes
();
collectChanges
();
}
public
boolean
hasInserts
()
{
return
!
addedRows
.
isEmpty
();
}
public
boolean
hasDeletes
()
{
return
!
deletedRows
.
isEmpty
();
}
public
boolean
hasUpdates
()
{
return
!
changedRows
.
isEmpty
();
}
public
List
<
DBDAttributeBinding
>
getUpdatedAttributes
()
{
Set
<
DBDAttributeBinding
>
attrs
=
new
LinkedHashSet
<>();
for
(
ResultSetRow
row
:
changedRows
)
{
attrs
.
addAll
(
row
.
changes
.
keySet
());
}
return
new
ArrayList
<>(
attrs
);
}
/**
* Applies changes.
* @throws org.jkiss.dbeaver.DBException
...
...
@@ -120,10 +141,12 @@ class ResultSetPersister {
boolean
applyChanges
(
@Nullable
DBRProgressMonitor
monitor
,
boolean
generateScript
,
@Nullable
DataUpdateListener
listener
)
throws
DBException
{
collectChanges
();
prepareDeleteStatements
();
prepareInsertStatements
();
if
(
hasDeletes
())
{
prepareDeleteStatements
();
}
if
(
hasInserts
())
{
prepareInsertStatements
();
}
prepareUpdateStatements
();
return
execute
(
monitor
,
generateScript
,
listener
);
}
...
...
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetViewer.java
浏览文件 @
35afd94e
...
...
@@ -2822,9 +2822,9 @@ public class ResultSetViewer extends Viewer
private
ResultSetPersister
createDataPersister
(
boolean
skipKeySearch
)
throws
DBException
{
if
(!
skipKeySearch
&&
!
model
.
isSingleSource
())
{
throw
new
DBException
(
"Can't save data for result set from multiple sources"
);
}
//
if (!skipKeySearch && !model.isSingleSource()) {
//
throw new DBException("Can't save data for result set from multiple sources");
//
}
boolean
needPK
=
false
;
if
(!
skipKeySearch
)
{
for
(
ResultSetRow
row
:
model
.
getAllRows
())
{
...
...
@@ -2834,13 +2834,12 @@ public class ResultSetViewer extends Viewer
}
}
}
ResultSetPersister
persister
=
new
ResultSetPersister
(
this
);
if
(
needPK
)
{
// If we have deleted or updated rows then check for unique identifier
if
(!
checkEntityIdentifier
())
{
throw
new
DBException
(
"No unique identifier defined"
);
}
checkEntityIdentifiers
(
persister
);
}
return
new
ResultSetPersister
(
this
)
;
return
persister
;
}
@NotNull
...
...
@@ -3006,51 +3005,57 @@ public class ResultSetViewer extends Viewer
}
}
private
boolean
checkEntityIdentifier
(
)
throws
DBException
private
void
checkEntityIdentifiers
(
ResultSetPersister
persister
)
throws
DBException
{
DBSEntity
entity
=
model
.
getSingleSource
();
if
(
entity
==
null
)
{
DBUserInterface
.
getInstance
().
showError
(
"Unrecognized entity"
,
"Can't detect source entity"
);
return
false
;
}
final
DBCExecutionContext
executionContext
=
getExecutionContext
();
if
(
executionContext
==
null
)
{
return
false
;
throw
new
DBCException
(
"Can't persist data - not connected to database"
)
;
}
// Check for value locators
// Probably we have only virtual one with empty attribute set
final
DBDRowIdentifier
identifier
=
getVirtualEntityIdentifier
();
if
(
identifier
!=
null
)
{
if
(
CommonUtils
.
isEmpty
(
identifier
.
getAttributes
()))
{
// Empty identifier. We have to define it
return
new
UIConfirmation
()
{
@Override
public
Boolean
runTask
()
{
return
ValidateUniqueKeyUsageDialog
.
validateUniqueKey
(
ResultSetViewer
.
this
,
executionContext
);
boolean
needsSingleEntity
=
persister
.
hasInserts
()
||
persister
.
hasDeletes
();
DBSEntity
entity
=
model
.
getSingleSource
();
if
(
needsSingleEntity
)
{
if
(
entity
==
null
)
{
throw
new
DBCException
(
"Can't detect source entity"
);
}
}
if
(
entity
!=
null
)
{
// Check for value locators
// Probably we have only virtual one with empty attribute set
final
DBDRowIdentifier
identifier
=
getVirtualEntityIdentifier
();
if
(
identifier
!=
null
)
{
if
(
CommonUtils
.
isEmpty
(
identifier
.
getAttributes
()))
{
// Empty identifier. We have to define it
if
(!
new
UIConfirmation
()
{
@Override
public
Boolean
runTask
()
{
return
ValidateUniqueKeyUsageDialog
.
validateUniqueKey
(
ResultSetViewer
.
this
,
executionContext
);
}
}.
confirm
())
{
throw
new
DBCException
(
"No unique key defined"
);
}
}
.
confirm
();
}
}
}
{
List
<
DBDAttributeBinding
>
updatedAttributes
=
persister
.
getUpdatedAttributes
();
for
(
DBDAttributeBinding
attr
:
updatedAttributes
)
{
// Check attributes of non-virtual identifier
DBDRowIdentifier
rowIdentifier
=
model
.
getVisibleAttribute
(
0
)
.
getRowIdentifier
();
DBDRowIdentifier
rowIdentifier
=
attr
.
getRowIdentifier
();
if
(
rowIdentifier
==
null
)
{
// We shouldn't be here ever!
// Virtual id should be created if we missing natural one
DBUserInterface
.
getInstance
().
showError
(
"No entity identifier"
,
"Entity "
+
entity
.
getName
()
+
" has no unique key"
);
return
false
;
throw
new
DBCException
(
"Attribute "
+
attr
.
getName
()
+
" was changed but it hasn't associated unique key"
);
}
else
if
(
CommonUtils
.
isEmpty
(
rowIdentifier
.
getAttributes
()))
{
DBUserInterface
.
getInstance
().
showError
(
"No entity identifier"
,
"Attributes of '"
+
DBUtils
.
getObjectFullName
(
rowIdentifier
.
getUniqueKey
(),
DBPEvaluationContext
.
UI
)
+
"' are missing in result set"
);
return
false
;
throw
new
DBCException
(
"Can't change attribute '"
+
attr
.
getName
()
+
"' - attributes of key '"
+
DBUtils
.
getObjectFullName
(
rowIdentifier
.
getUniqueKey
(),
DBPEvaluationContext
.
UI
)
+
"' are missing in result set"
);
}
}
return
true
;
}
boolean
editEntityIdentifier
(
DBRProgressMonitor
monitor
)
throws
DBException
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录