Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
suliangchun
dbeaver
提交
c824e773
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,发现更多精彩内容 >>
提交
c824e773
编写于
11月 22, 2020
作者:
S
Serge Rider
提交者:
GitHub
11月 22, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #10449 from dbeaver/datatransfer-task-context#10311
#10311 Datatransfer task context Former-commit-id:
4c252254
上级
ddce10bd
0182d341
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
63 addition
and
63 deletion
+63
-63
plugins/org.jkiss.dbeaver.data.transfer.ui/src/org/jkiss/dbeaver/tools/transfer/ui/wizard/DataTransferTaskConfigurator.java
...ools/transfer/ui/wizard/DataTransferTaskConfigurator.java
+31
-10
plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/database/DatabaseTransferProducer.java
...ver/tools/transfer/database/DatabaseTransferProducer.java
+32
-53
未找到文件。
plugins/org.jkiss.dbeaver.data.transfer.ui/src/org/jkiss/dbeaver/tools/transfer/ui/wizard/DataTransferTaskConfigurator.java
浏览文件 @
c824e773
...
...
@@ -32,6 +32,8 @@ import org.jkiss.dbeaver.model.DBPObject;
import
org.jkiss.dbeaver.model.DBUtils
;
import
org.jkiss.dbeaver.model.app.DBPProject
;
import
org.jkiss.dbeaver.model.data.DBDCollection
;
import
org.jkiss.dbeaver.model.exec.DBCExecutionContext
;
import
org.jkiss.dbeaver.model.exec.DBCExecutionContextDefaults
;
import
org.jkiss.dbeaver.model.exec.DBExecUtils
;
import
org.jkiss.dbeaver.model.impl.DataSourceContextProvider
;
import
org.jkiss.dbeaver.model.navigator.*
;
...
...
@@ -220,7 +222,8 @@ public class DataTransferTaskConfigurator implements DBTTaskConfigurator {
newInstanceName
=
dataSourceObject
.
getName
();
newObjectName
=
null
;
}
else
if
(
dataSourceObject
instanceof
DBSSchema
)
{
newInstanceName
=
DBUtils
.
getObjectOwnerInstance
(
dataSourceObject
).
getName
();
DBSObject
parentObject
=
dataSourceObject
.
getParentObject
();
newInstanceName
=
parentObject
instanceof
DBSCatalog
?
parentObject
.
getName
()
:
null
;
newObjectName
=
dataSourceObject
.
getName
();
}
else
{
// Use default database and schema
...
...
@@ -229,16 +232,25 @@ public class DataTransferTaskConfigurator implements DBTTaskConfigurator {
}
DataSourceContextProvider
contextProvider
=
new
DataSourceContextProvider
(
dataSourceObject
);
DBCExecutionContext
executionContext
=
contextProvider
.
getExecutionContext
();
String
oldInstanceName
=
null
;
String
oldObjectName
=
null
;
if
(
executionContext
instanceof
DBCExecutionContextDefaults
)
{
DBCExecutionContextDefaults
<?,
?>
contextDefaults
=
((
DBCExecutionContextDefaults
<?,
?>)
executionContext
);
DBSCatalog
defaultCatalog
=
contextDefaults
.
getDefaultCatalog
();
if
(
defaultCatalog
!=
null
)
{
oldInstanceName
=
defaultCatalog
.
getName
();
}
DBSSchema
defaultSchema
=
contextDefaults
.
getDefaultSchema
();
if
(
defaultSchema
!=
null
)
{
oldObjectName
=
defaultSchema
.
getName
();
}
}
try
{
DBExecUtils
.
setExecutionContextDefaults
(
new
VoidProgressMonitor
(),
dataSource
,
contextProvider
.
getExecutionContext
(),
newInstanceName
,
null
,
newObjectName
);
DBExecUtils
.
setExecutionContextDefaults
(
new
VoidProgressMonitor
(),
dataSource
,
executionContext
,
newInstanceName
,
null
,
newObjectName
);
}
catch
(
DBException
ex
)
{
log
.
error
(
"Error setting context defaults"
,
ex
);
return
;
...
...
@@ -250,11 +262,20 @@ public class DataTransferTaskConfigurator implements DBTTaskConfigurator {
if
(
query
!=
null
)
{
SQLScriptContext
scriptContext
=
new
SQLScriptContext
(
null
,
contextProvider
,
null
,
new
PrintWriter
(
System
.
err
,
true
),
null
);
SQLQueryDataContainer
container
=
new
SQLQueryDataContainer
(
contextProvider
,
new
SQLQuery
(
dataSource
,
query
),
scriptContext
,
log
);
DataTransferPipe
pipe
=
new
DataTransferPipe
(
new
DatabaseTransferProducer
(
container
),
null
);
DatabaseTransferProducer
producer
=
new
DatabaseTransferProducer
(
container
);
producer
.
setDefaultCatalog
(
newInstanceName
);
producer
.
setDefaultSchema
(
newObjectName
);
DataTransferPipe
pipe
=
new
DataTransferPipe
(
producer
,
null
);
addPipeToTable
(
pipe
);
updateSettings
(
propertyChangeListener
);
}
}
try
{
DBExecUtils
.
setExecutionContextDefaults
(
new
VoidProgressMonitor
(),
dataSource
,
executionContext
,
oldInstanceName
,
null
,
oldObjectName
);
}
catch
(
DBException
ex
)
{
log
.
error
(
"Error setting context defaults"
,
ex
);
}
}
}
});
...
...
plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/database/DatabaseTransferProducer.java
浏览文件 @
c824e773
...
...
@@ -27,6 +27,7 @@ import org.jkiss.dbeaver.model.app.DBPProject;
import
org.jkiss.dbeaver.model.data.DBDDataFilter
;
import
org.jkiss.dbeaver.model.exec.*
;
import
org.jkiss.dbeaver.model.impl.AbstractExecutionSource
;
import
org.jkiss.dbeaver.model.impl.DataSourceContextProvider
;
import
org.jkiss.dbeaver.model.meta.DBSerializable
;
import
org.jkiss.dbeaver.model.runtime.DBRProgressMonitor
;
import
org.jkiss.dbeaver.model.runtime.DBRRunnableContext
;
...
...
@@ -67,6 +68,10 @@ public class DatabaseTransferProducer implements IDataTransferProducer<DatabaseP
private
DBSDataContainer
dataContainer
;
@Nullable
private
DBDDataFilter
dataFilter
;
@Nullable
private
String
defaultCatalog
;
@Nullable
private
String
defaultSchema
;
public
DatabaseTransferProducer
()
{
}
...
...
@@ -120,6 +125,24 @@ public class DatabaseTransferProducer implements IDataTransferProducer<DatabaseP
return
null
;
}
@Nullable
public
String
getDefaultCatalog
()
{
return
defaultCatalog
;
}
public
void
setDefaultCatalog
(
@Nullable
String
defaultCatalog
)
{
this
.
defaultCatalog
=
defaultCatalog
;
}
@Nullable
public
String
getDefaultSchema
()
{
return
defaultSchema
;
}
public
void
setDefaultSchema
(
@Nullable
String
defaultSchema
)
{
this
.
defaultSchema
=
defaultSchema
;
}
@Override
public
void
transferData
(
@NotNull
DBRProgressMonitor
monitor1
,
...
...
@@ -162,6 +185,7 @@ public class DatabaseTransferProducer implements IDataTransferProducer<DatabaseP
}
if
(!
selectiveExportFromUI
&&
newConnection
)
{
context
=
DBUtils
.
getObjectOwnerInstance
(
getDatabaseObject
()).
openIsolatedContext
(
monitor
,
"Data transfer producer"
,
context
);
DBExecUtils
.
setExecutionContextDefaults
(
monitor
,
dataSource
,
context
,
defaultCatalog
,
null
,
defaultSchema
);
}
if
(
task
!=
null
)
{
DBTaskUtils
.
initFromContext
(
monitor
,
task
,
context
);
...
...
@@ -291,20 +315,14 @@ public class DatabaseTransferProducer implements IDataTransferProducer<DatabaseP
state
.
put
(
"type"
,
"query"
);
SQLQueryContainer
queryContainer
=
(
SQLQueryContainer
)
dataContainer
;
DBPDataSourceContainer
dataSource
=
queryContainer
.
getDataSourceContainer
();
DBCExecutionContext
executionContext
=
queryContainer
.
getExecutionContext
();
if
(
dataSource
!=
null
)
{
state
.
put
(
"project"
,
dataSource
.
getProject
().
getName
());
state
.
put
(
"dataSource"
,
dataSource
.
getId
());
if
(
executionContext
instanceof
DBCExecutionContextDefaults
)
{
DBCExecutionContextDefaults
contextDefaults
=
((
DBCExecutionContextDefaults
)
executionContext
);
DBSCatalog
defaultCatalog
=
contextDefaults
.
getDefaultCatalog
();
if
(
defaultCatalog
!=
null
)
{
state
.
put
(
"defaultCatalog"
,
defaultCatalog
.
getName
());
}
DBSSchema
defaultSchema
=
contextDefaults
.
getDefaultSchema
();
if
(
defaultSchema
!=
null
)
{
state
.
put
(
"defaultSchema"
,
defaultSchema
.
getName
());
}
if
(
object
.
defaultCatalog
!=
null
)
{
state
.
put
(
"defaultCatalog"
,
object
.
defaultCatalog
);
}
if
(
object
.
defaultSchema
!=
null
)
{
state
.
put
(
"defaultSchema"
,
object
.
defaultSchema
);
}
}
SQLScriptElement
query
=
queryContainer
.
getQuery
();
...
...
@@ -353,18 +371,12 @@ public class DatabaseTransferProducer implements IDataTransferProducer<DatabaseP
}
DBPDataSource
dataSource
=
ds
.
getDataSource
();
SQLQuery
query
=
new
SQLQuery
(
dataSource
,
queryText
);
TaskContextProvider
taskContextProvider
=
new
TaskContextProvider
(
runnableContext
,
dataSource
,
objectContext
);
DBExecUtils
.
setExecutionContextDefaults
(
monitor
,
dataSource
,
taskContextProvider
.
getExecutionContext
(),
CommonUtils
.
toString
(
state
.
get
(
"defaultCatalog"
),
null
),
null
,
CommonUtils
.
toString
(
state
.
get
(
"defaultSchema"
),
null
)
);
DataSourceContextProvider
taskContextProvider
=
new
DataSourceContextProvider
(
dataSource
);
SQLScriptContext
scriptContext
=
new
SQLScriptContext
(
null
,
taskContextProvider
,
null
,
new
PrintWriter
(
System
.
err
,
true
),
null
);
scriptContext
.
setVariables
(
DBTaskUtils
.
getVariables
(
objectContext
));
producer
.
defaultCatalog
=
CommonUtils
.
toString
(
state
.
get
(
"defaultCatalog"
),
null
);
producer
.
defaultSchema
=
CommonUtils
.
toString
(
state
.
get
(
"defaultSchema"
),
null
);
producer
.
dataContainer
=
new
SQLQueryDataContainer
(
taskContextProvider
,
query
,
...
...
@@ -388,37 +400,4 @@ public class DatabaseTransferProducer implements IDataTransferProducer<DatabaseP
return
producer
;
}
}
public
static
class
TaskContextProvider
implements
DBPContextProvider
{
private
final
DBRRunnableContext
runnableContext
;
private
final
DBPDataSource
dataSource
;
private
final
DBTTask
task
;
private
DBCExecutionContext
executionContext
;
TaskContextProvider
(
DBRRunnableContext
runnableContext
,
DBPDataSource
dataSource
,
DBTTask
task
)
{
this
.
runnableContext
=
runnableContext
;
this
.
dataSource
=
dataSource
;
this
.
task
=
task
;
}
@Override
public
DBCExecutionContext
getExecutionContext
()
{
if
(
executionContext
==
null
)
{
executionContext
=
DBUtils
.
getDefaultContext
(
dataSource
,
false
);
try
{
runnableContext
.
run
(
true
,
true
,
monitor
->
{
try
{
DBTaskUtils
.
initFromContext
(
monitor
,
task
,
executionContext
);
}
catch
(
DBException
e
)
{
throw
new
InvocationTargetException
(
e
);
}
});
}
catch
(
Exception
e
)
{
log
.
error
(
"Error initializing context"
,
e
);
}
}
return
executionContext
;
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录