Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
suliangchun
dbeaver
提交
8a9ed486
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,发现更多精彩内容 >>
提交
8a9ed486
编写于
2月 03, 2019
作者:
S
serge-rider
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
#2855 Export from multiple queries
上级
27c9b4a7
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
242 addition
and
59 deletion
+242
-59
plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditor.java
...s.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditor.java
+89
-59
plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLQueryDataContainer.java
...g/jkiss/dbeaver/ui/editors/sql/SQLQueryDataContainer.java
+134
-0
plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLQueryResultsConsumer.java
...jkiss/dbeaver/ui/editors/sql/SQLQueryResultsConsumer.java
+19
-0
未找到文件。
plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditor.java
浏览文件 @
8a9ed486
...
...
@@ -47,7 +47,6 @@ import org.eclipse.swt.widgets.*;
import
org.eclipse.ui.*
;
import
org.eclipse.ui.actions.CompoundContributionItem
;
import
org.eclipse.ui.ide.FileStoreEditorInput
;
import
org.eclipse.ui.menus.CommandContributionItem
;
import
org.eclipse.ui.texteditor.DefaultRangeIndicator
;
import
org.eclipse.ui.texteditor.ITextEditorActionConstants
;
import
org.eclipse.ui.texteditor.rulers.IColumnSupport
;
...
...
@@ -1624,13 +1623,23 @@ public class SQLEditor extends SQLEditorBase implements
public
void
exportDataFromQuery
()
{
SQLScriptElement
sqlQuery
=
extractActiveQuery
();
if
(
sqlQuery
instanceof
SQLQuery
)
{
processQueries
(
Collections
.
singletonList
(
sqlQuery
),
false
,
true
,
true
,
null
);
List
<
SQLScriptElement
>
elements
;
ITextSelection
selection
=
(
ITextSelection
)
getSelectionProvider
().
getSelection
();
if
(
selection
.
getLength
()
>
1
)
{
elements
=
extractScriptQueries
(
selection
.
getOffset
(),
selection
.
getLength
(),
true
,
false
,
true
);
}
else
{
elements
=
new
ArrayList
<>();
elements
.
add
(
extractActiveQuery
());
}
elements
.
removeIf
(
element
->
!(
element
instanceof
SQLQuery
));
if
(!
elements
.
isEmpty
())
{
processQueries
(
elements
,
false
,
true
,
true
,
null
);
}
else
{
DBWorkbench
.
getPlatformUI
().
showError
(
"Extract data"
,
"C
an't extract data from control command
"
);
"C
hoose one or more queries to export from
"
);
}
}
...
...
@@ -1714,6 +1723,7 @@ public class SQLEditor extends SQLEditorBase implements
if
(
getActivePreferenceStore
().
getBoolean
(
SQLPreferenceConstants
.
AUTO_SAVE_ON_EXECUTE
)
&&
isDirty
())
{
doSave
(
new
NullProgressMonitor
());
}
if
(!
export
)
{
if
(
getActivePreferenceStore
().
getBoolean
(
SQLPreferenceConstants
.
CLEAR_OUTPUT_BEFORE_EXECUTE
))
{
outputViewer
.
clearOutput
();
}
...
...
@@ -1722,6 +1732,7 @@ public class SQLEditor extends SQLEditorBase implements
// We don't need new tab or we are executing a script - so close all extra tabs
closeExtraResultTabs
(
null
);
}
}
if
(
resultTabs
.
getItemCount
()
==
0
)
{
// If all tabs were closed
...
...
@@ -1740,6 +1751,7 @@ public class SQLEditor extends SQLEditorBase implements
getActivePreferenceStore
().
getBoolean
(
SQLPreferenceConstants
.
RESULT_SET_CLOSE_ON_ERROR
),
queryListener
);
}
}
else
{
if
(!
export
)
{
// Use current tab.
// If current tab was pinned then use first tab
QueryResultsContainer
firstResults
=
curQueryProcessor
.
getFirstResults
();
...
...
@@ -1765,6 +1777,7 @@ public class SQLEditor extends SQLEditorBase implements
resultTabs
.
setSelection
(
firstResults
.
tabItem
);
}
}
}
curQueryProcessor
.
processQueries
(
queries
,
false
,
export
,
false
,
queryListener
);
}
}
...
...
@@ -2340,32 +2353,48 @@ public class SQLEditor extends SQLEditorBase implements
listener
.
setExtListener
(
queryListener
);
}
File
localFile
=
EditorUtils
.
getLocalFileFromInput
(
getEditorInput
());
final
SQLQueryJob
job
=
new
SQLQueryJob
(
if
(
export
)
{
// Use special consumer and data containers
SQLQueryResultsConsumer
resultsConsumer
=
new
SQLQueryResultsConsumer
();
SQLQueryJob
job
=
new
SQLQueryJob
(
getSite
(),
isSingleQuery
?
SQLEditorMessages
.
editors_sql_job_execute_query
:
SQLEditorMessages
.
editors_sql_job_execute_script
,
"Export from query"
,
executionContext
,
resultsContainer
,
queries
,
new
SQLScriptContext
(
globalScriptContext
,
SQLEditor
.
this
,
localFile
,
new
OutputLogWriter
()),
this
,
resultsConsumer
,
listener
);
if
(
export
||
isSingleQuery
)
{
resultsContainer
.
query
=
queries
.
get
(
0
);
List
<
IDataTransferProducer
>
producers
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
queries
.
size
();
i
++)
{
SQLScriptElement
element
=
queries
.
get
(
i
);
SQLQuery
query
=
(
SQLQuery
)
element
;
producers
.
add
(
new
DatabaseTransferProducer
(
new
SQLQueryDataContainer
(
job
,
resultsConsumer
,
query
,
i
),
null
));
}
if
(
export
)
{
// Assign current job from active query and open wizard
resultsContainer
.
lastGoodQuery
=
null
;
curJob
=
job
;
ActiveWizardDialog
dialog
=
new
ActiveWizardDialog
(
getSite
().
getWorkbenchWindow
(),
new
DataTransferWizard
(
new
IDataTransferProducer
[]
{
new
DatabaseTransferProducer
(
resultsContainer
,
null
)},
producers
.
toArray
(
new
IDataTransferProducer
[
0
]),
null
),
new
StructuredSelection
(
this
));
dialog
.
open
();
}
else
if
(
isSingleQuery
)
{
}
else
{
final
SQLQueryJob
job
=
new
SQLQueryJob
(
getSite
(),
isSingleQuery
?
SQLEditorMessages
.
editors_sql_job_execute_query
:
SQLEditorMessages
.
editors_sql_job_execute_script
,
executionContext
,
resultsContainer
,
queries
,
new
SQLScriptContext
(
globalScriptContext
,
SQLEditor
.
this
,
localFile
,
new
OutputLogWriter
()),
this
,
listener
);
if
(
isSingleQuery
)
{
resultsContainer
.
query
=
queries
.
get
(
0
);
closeJob
();
curJob
=
job
;
ResultSetViewer
rsv
=
resultsContainer
.
getResultSetController
();
...
...
@@ -2383,6 +2412,7 @@ public class SQLEditor extends SQLEditorBase implements
}
}
}
}
public
boolean
isDirty
()
{
for
(
QueryResultsContainer
resultsProvider
:
resultContainers
)
{
...
...
plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLQueryDataContainer.java
0 → 100644
浏览文件 @
8a9ed486
package
org.jkiss.dbeaver.ui.editors.sql
;
import
org.jkiss.code.NotNull
;
import
org.jkiss.code.Nullable
;
import
org.jkiss.dbeaver.model.DBPContextProvider
;
import
org.jkiss.dbeaver.model.DBPDataSource
;
import
org.jkiss.dbeaver.model.DBPDataSourceContainer
;
import
org.jkiss.dbeaver.model.IDataSourceContainerProvider
;
import
org.jkiss.dbeaver.model.data.DBDDataFilter
;
import
org.jkiss.dbeaver.model.data.DBDDataReceiver
;
import
org.jkiss.dbeaver.model.exec.*
;
import
org.jkiss.dbeaver.model.sql.SQLQuery
;
import
org.jkiss.dbeaver.model.sql.SQLQueryContainer
;
import
org.jkiss.dbeaver.model.sql.SQLScriptElement
;
import
org.jkiss.dbeaver.model.struct.DBSDataContainer
;
import
org.jkiss.dbeaver.model.struct.DBSObject
;
import
org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob
;
import
org.jkiss.dbeaver.ui.editors.sql.internal.SQLEditorMessages
;
class
SQLQueryDataContainer
implements
DBSDataContainer
,
IDataSourceContainerProvider
,
SQLQueryContainer
,
DBPContextProvider
{
private
SQLQueryJob
queryJob
;
private
SQLQueryResultsConsumer
resultsConsumer
;
private
SQLQuery
query
=
null
;
private
int
resultSetNumber
;
private
DBDDataReceiver
dataReceiver
;
SQLQueryDataContainer
(
SQLQueryJob
queryJob
,
SQLQueryResultsConsumer
resultsConsumer
,
SQLQuery
query
,
int
resultSetNumber
)
{
this
.
queryJob
=
queryJob
;
this
.
resultsConsumer
=
resultsConsumer
;
this
.
query
=
query
;
this
.
resultSetNumber
=
resultSetNumber
;
}
@Override
public
DBCExecutionContext
getExecutionContext
()
{
return
queryJob
.
getExecutionContext
();
}
@Override
public
int
getSupportedFeatures
()
{
return
DATA_SELECT
;
}
@NotNull
@Override
public
DBCStatistics
readData
(
@NotNull
DBCExecutionSource
source
,
@NotNull
DBCSession
session
,
@NotNull
DBDDataReceiver
dataReceiver
,
DBDDataFilter
dataFilter
,
long
firstRow
,
long
maxRows
,
long
flags
)
throws
DBCException
{
SQLQuery
query
=
(
SQLQuery
)
this
.
query
;
if
(
query
.
getResultsMaxRows
()
>=
0
)
{
firstRow
=
query
.
getResultsOffset
();
maxRows
=
query
.
getResultsMaxRows
();
}
resultsConsumer
.
setDataReceiver
(
dataReceiver
);
// Count number of results for this query. If > 1 then we will refresh them all at once
if
(
resultSetNumber
>
0
)
{
queryJob
.
setFetchResultSetNumber
(
resultSetNumber
);
}
else
{
queryJob
.
setFetchResultSetNumber
(-
1
);
}
queryJob
.
setResultSetLimit
(
firstRow
,
maxRows
);
queryJob
.
setReadFlags
(
flags
);
queryJob
.
setDataFilter
(
dataFilter
);
queryJob
.
extractData
(
session
,
this
.
query
,
resultSetNumber
);
return
queryJob
.
getStatistics
();
}
@Override
public
long
countData
(
@NotNull
DBCExecutionSource
source
,
@NotNull
DBCSession
session
,
DBDDataFilter
dataFilter
,
long
flags
)
throws
DBCException
{
return
-
1
;
}
@Nullable
@Override
public
String
getDescription
()
{
return
SQLEditorMessages
.
editors_sql_description
;
}
@Nullable
@Override
public
DBSObject
getParentObject
()
{
return
getDataSource
();
}
@Nullable
@Override
public
DBPDataSource
getDataSource
()
{
return
queryJob
.
getDataSourceContainer
().
getDataSource
();
}
@Override
public
boolean
isPersisted
()
{
return
false
;
}
@NotNull
@Override
public
String
getName
()
{
String
name
=
query
.
getOriginalText
();
if
(
name
==
null
)
{
name
=
"SQL"
;
}
return
name
;
}
@Nullable
@Override
public
DBPDataSourceContainer
getDataSourceContainer
()
{
return
queryJob
.
getDataSourceContainer
();
}
@Override
public
String
toString
()
{
return
query
.
getOriginalText
();
}
@Override
public
SQLScriptElement
getQuery
()
{
return
query
;
}
}
plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLQueryResultsConsumer.java
0 → 100644
浏览文件 @
8a9ed486
package
org.jkiss.dbeaver.ui.editors.sql
;
import
org.jkiss.dbeaver.model.data.DBDDataReceiver
;
import
org.jkiss.dbeaver.model.sql.SQLQuery
;
import
org.jkiss.dbeaver.runtime.sql.SQLResultsConsumer
;
class
SQLQueryResultsConsumer
implements
SQLResultsConsumer
{
private
DBDDataReceiver
dataReceiver
;
public
void
setDataReceiver
(
DBDDataReceiver
dataReceiver
)
{
this
.
dataReceiver
=
dataReceiver
;
}
@Override
public
DBDDataReceiver
getDataReceiver
(
SQLQuery
statement
,
int
resultSetNumber
)
{
return
dataReceiver
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录