Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
suliangchun
dbeaver
提交
ff019900
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,发现更多精彩内容 >>
未验证
提交
ff019900
编写于
11月 10, 2020
作者:
N
Nikita Akilov
提交者:
GitHub
11月 10, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'devel' into folding#2156
上级
98b47bce
f97bbaf7
变更
26
隐藏空白更改
内联
并排
Showing
26 changed file
with
595 addition
and
170 deletion
+595
-170
plugins/org.jkiss.dbeaver.data.transfer.ui/src/org/jkiss/dbeaver/tools/transfer/ui/pages/database/DatabaseConsumerPageMapping.java
...ansfer/ui/pages/database/DatabaseConsumerPageMapping.java
+4
-5
plugins/org.jkiss.dbeaver.data.transfer.ui/src/org/jkiss/dbeaver/tools/transfer/ui/wizard/DataTransferTaskConfigurator.java
...ools/transfer/ui/wizard/DataTransferTaskConfigurator.java
+20
-4
plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/database/DatabaseMappingAttribute.java
...ver/tools/transfer/database/DatabaseMappingAttribute.java
+12
-2
plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/database/DatabaseTransferProducer.java
...ver/tools/transfer/database/DatabaseTransferProducer.java
+22
-0
plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/internal/DTMessages.java
...org/jkiss/dbeaver/tools/transfer/internal/DTMessages.java
+4
-0
plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/internal/DTMessages.properties
...iss/dbeaver/tools/transfer/internal/DTMessages.properties
+4
-0
plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/internal/DTMessages_ru.properties
.../dbeaver/tools/transfer/internal/DTMessages_ru.properties
+7
-3
plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/stream/StreamDataImporterColumnInfo.java
...r/tools/transfer/stream/StreamDataImporterColumnInfo.java
+12
-0
plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/stream/StreamTransferUtils.java
...ss/dbeaver/tools/transfer/stream/StreamTransferUtils.java
+6
-6
plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/stream/importer/DataImporterCSV.java
...eaver/tools/transfer/stream/importer/DataImporterCSV.java
+101
-17
plugins/org.jkiss.dbeaver.ext.postgresql/plugin.xml
plugins/org.jkiss.dbeaver.ext.postgresql/plugin.xml
+1
-1
plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreTable.java
.../org/jkiss/dbeaver/ext/postgresql/model/PostgreTable.java
+6
-6
plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/data/PostgreArrayValueHandler.java
...r/ext/postgresql/model/data/PostgreArrayValueHandler.java
+10
-6
plugins/org.jkiss.dbeaver.net.ssh.jsch/src/org/jkiss/dbeaver/model/net/ssh/SSHImplementationJsch.java
...rg/jkiss/dbeaver/model/net/ssh/SSHImplementationJsch.java
+4
-3
plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetFilterContentAdapter.java
.../ui/controls/resultset/ResultSetFilterContentAdapter.java
+1
-1
plugins/org.jkiss.dbeaver.ui.editors.sql/OSGI-INF/l10n/bundle.properties
...ss.dbeaver.ui.editors.sql/OSGI-INF/l10n/bundle.properties
+8
-6
plugins/org.jkiss.dbeaver.ui.editors.sql/OSGI-INF/l10n/bundle_ru.properties
...dbeaver.ui.editors.sql/OSGI-INF/l10n/bundle_ru.properties
+8
-6
plugins/org.jkiss.dbeaver.ui.editors.sql/plugin.xml
plugins/org.jkiss.dbeaver.ui.editors.sql/plugin.xml
+7
-0
plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorBase.java
...l/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorBase.java
+18
-9
plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/preferences/PrefPageSQLCodeEditing.java
...er/ui/editors/sql/preferences/PrefPageSQLCodeEditing.java
+166
-0
plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/preferences/PrefPageSQLCompletion.java
...ver/ui/editors/sql/preferences/PrefPageSQLCompletion.java
+2
-57
plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/preferences/PrefPageSQLEditor.java
...dbeaver/ui/editors/sql/preferences/PrefPageSQLEditor.java
+0
-28
test/org.jkiss.dbeaver.ext.postgresql.test/src/org/jkiss/dbeaver/ext/postgresql/PostgreValueParserTest.java
.../jkiss/dbeaver/ext/postgresql/PostgreValueParserTest.java
+24
-10
test/org.jkiss.dbeaver.test.platform/META-INF/MANIFEST.MF
test/org.jkiss.dbeaver.test.platform/META-INF/MANIFEST.MF
+1
-0
test/org.jkiss.dbeaver.test.platform/src/org/jkiss/dbeaver/data/transfer/StreamTransferUtilsTest.java
.../jkiss/dbeaver/data/transfer/StreamTransferUtilsTest.java
+37
-0
test/org.jkiss.dbeaver.test.platform/src/org/jkiss/dbeaver/tools/transfer/CSVImporterTest.java
...src/org/jkiss/dbeaver/tools/transfer/CSVImporterTest.java
+110
-0
未找到文件。
plugins/org.jkiss.dbeaver.data.transfer.ui/src/org/jkiss/dbeaver/tools/transfer/ui/pages/database/DatabaseConsumerPageMapping.java
浏览文件 @
ff019900
...
...
@@ -34,7 +34,6 @@ import org.jkiss.dbeaver.Log;
import
org.jkiss.dbeaver.model.*
;
import
org.jkiss.dbeaver.model.app.DBPProject
;
import
org.jkiss.dbeaver.model.edit.DBEPersistAction
;
import
org.jkiss.dbeaver.model.exec.DBCException
;
import
org.jkiss.dbeaver.model.exec.DBCExecutionContext
;
import
org.jkiss.dbeaver.model.exec.DBCSession
;
import
org.jkiss.dbeaver.model.impl.DBObjectNameCaseTransformer
;
...
...
@@ -164,7 +163,7 @@ public class DatabaseConsumerPageMapping extends ActiveWizardPage<DataTransferWi
autoAssignButton
=
UIUtils
.
createDialogButton
(
buttonsPanel
,
DTMessages
.
data_transfer_db_consumer_auto_assign
,
UIIcon
.
ASTERISK
,
"Auto-assign table and column mappings"
,
DTMessages
.
data_transfer_db_consumer_auto_assign_description
,
new
SelectionAdapter
()
{
@Override
public
void
widgetSelected
(
SelectionEvent
e
)
...
...
@@ -178,7 +177,7 @@ public class DatabaseConsumerPageMapping extends ActiveWizardPage<DataTransferWi
final
Button
mapTableButton
=
UIUtils
.
createDialogButton
(
buttonsPanel
,
DTMessages
.
data_transfer_db_consumer_existing_table
,
DBIcon
.
TREE_TABLE
,
"Select target table"
,
DTMessages
.
data_transfer_db_consumer_existing_table_description
,
new
SelectionAdapter
()
{
@Override
public
void
widgetSelected
(
SelectionEvent
e
)
...
...
@@ -191,7 +190,7 @@ public class DatabaseConsumerPageMapping extends ActiveWizardPage<DataTransferWi
final
Button
createNewButton
=
UIUtils
.
createDialogButton
(
buttonsPanel
,
DTMessages
.
data_transfer_db_consumer_new_table
,
DBIcon
.
TREE_VIEW
,
"Set target table name"
,
DTMessages
.
data_transfer_db_consumer_new_table_description
,
new
SelectionAdapter
()
{
@Override
public
void
widgetSelected
(
SelectionEvent
e
)
...
...
@@ -204,7 +203,7 @@ public class DatabaseConsumerPageMapping extends ActiveWizardPage<DataTransferWi
final
Button
columnsButton
=
UIUtils
.
createDialogButton
(
buttonsPanel
,
DTMessages
.
data_transfer_db_consumer_column_mappings
,
DBIcon
.
TREE_COLUMNS
,
"Configure column mappings (advanced)"
,
DTMessages
.
data_transfer_db_consumer_column_mappings_description
,
new
SelectionAdapter
()
{
@Override
public
void
widgetSelected
(
SelectionEvent
e
)
...
...
plugins/org.jkiss.dbeaver.data.transfer.ui/src/org/jkiss/dbeaver/tools/transfer/ui/wizard/DataTransferTaskConfigurator.java
浏览文件 @
ff019900
...
...
@@ -32,14 +32,17 @@ 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.DBExecUtils
;
import
org.jkiss.dbeaver.model.impl.DataSourceContextProvider
;
import
org.jkiss.dbeaver.model.navigator.*
;
import
org.jkiss.dbeaver.model.runtime.DBRRunnableContext
;
import
org.jkiss.dbeaver.model.runtime.VoidProgressMonitor
;
import
org.jkiss.dbeaver.model.sql.SQLQuery
;
import
org.jkiss.dbeaver.model.sql.SQLScriptContext
;
import
org.jkiss.dbeaver.model.sql.data.SQLQueryDataContainer
;
import
org.jkiss.dbeaver.model.struct.*
;
import
org.jkiss.dbeaver.model.struct.rdb.DBSCatalog
;
import
org.jkiss.dbeaver.model.struct.rdb.DBSSchema
;
import
org.jkiss.dbeaver.model.task.DBTTask
;
import
org.jkiss.dbeaver.model.task.DBTTaskType
;
import
org.jkiss.dbeaver.model.task.DBTaskUtils
;
...
...
@@ -172,9 +175,9 @@ public class DataTransferTaskConfigurator implements DBTTaskConfigurator {
DTUIMessages
.
data_transfer_task_configurator_tables_title_choose_source
,
rootNode
,
rootNode
,
new
Class
[]{
DB
PDataSource
.
class
,
DBSObjectContainer
.
class
,
DBSCatalog
.
class
},
n
ull
,
new
Class
[]{
DB
PDataSource
.
class
,
DBSObjectContainer
.
class
,
DBSCatalog
.
class
});
new
Class
[]{
DB
SObjectContainer
.
class
,
DBSDataContainer
.
class
},
n
ew
Class
[]{
DBSDataContainer
.
class
,
DBSSchema
.
class
}
,
new
Class
[]{
DB
SSchema
.
class
});
if
(
node
!=
null
)
{
if
(
node
instanceof
DBNDataSource
)
{
...
...
@@ -209,9 +212,22 @@ public class DataTransferTaskConfigurator implements DBTTaskConfigurator {
return
;
}
}
DataSourceContextProvider
contextProvider
=
new
DataSourceContextProvider
(
dataSourceObject
);
try
{
DBExecUtils
.
setExecutionContextDefaults
(
new
VoidProgressMonitor
(),
dataSource
,
contextProvider
.
getExecutionContext
(),
dataSourceObject
instanceof
DBSSchema
?
DBUtils
.
getObjectOwnerInstance
(
dataSourceObject
).
getName
()
:
null
,
null
,
dataSourceObject
.
getName
()
);
}
catch
(
DBException
ex
)
{
log
.
error
(
"Error setting context defaults"
,
ex
);
return
;
}
UIServiceSQL
serviceSQL
=
DBWorkbench
.
getService
(
UIServiceSQL
.
class
);
if
(
serviceSQL
!=
null
)
{
DataSourceContextProvider
contextProvider
=
new
DataSourceContextProvider
(
dataSourceObject
);
String
query
=
serviceSQL
.
openSQLEditor
(
contextProvider
,
DTUIMessages
.
data_transfer_task_configurator_sql_query_title
,
UIIcon
.
SQL_SCRIPT
,
""
);
if
(
query
!=
null
)
{
SQLScriptContext
scriptContext
=
new
SQLScriptContext
(
null
,
contextProvider
,
null
,
new
PrintWriter
(
System
.
err
,
true
),
null
);
...
...
plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/database/DatabaseMappingAttribute.java
浏览文件 @
ff019900
...
...
@@ -24,8 +24,10 @@ import org.jkiss.dbeaver.model.impl.DBObjectNameCaseTransformer;
import
org.jkiss.dbeaver.model.runtime.DBRProgressMonitor
;
import
org.jkiss.dbeaver.model.runtime.VoidProgressMonitor
;
import
org.jkiss.dbeaver.model.struct.*
;
import
org.jkiss.dbeaver.tools.transfer.stream.StreamDataImporterColumnInfo
;
import
org.jkiss.utils.CommonUtils
;
import
java.util.List
;
import
java.util.Map
;
/**
...
...
@@ -123,8 +125,16 @@ public class DatabaseMappingAttribute implements DatabaseMappingObject {
targetName
=
source
.
getName
();
}
DBSEntity
targetEntity
=
(
DBSEntity
)
parent
.
getTarget
();
this
.
target
=
DBUtils
.
findObject
(
targetEntity
.
getAttributes
(
monitor
),
DBUtils
.
getUnQuotedIdentifier
(
targetEntity
.
getDataSource
(),
targetName
),
true
);
List
<?
extends
DBSEntityAttribute
>
targetAttributes
=
targetEntity
.
getAttributes
(
monitor
);
if
(
source
instanceof
StreamDataImporterColumnInfo
&&
targetAttributes
!=
null
&&
source
.
getOrdinalPosition
()
<
targetAttributes
.
size
())
{
StreamDataImporterColumnInfo
source
=
(
StreamDataImporterColumnInfo
)
this
.
source
;
DBSEntityAttribute
targetAttribute
=
targetAttributes
.
get
(
source
.
getOrdinalPosition
());
source
.
setDataKind
(
targetAttribute
.
getDataKind
());
if
(!
source
.
isMappingMetadataPresent
())
{
targetName
=
targetAttribute
.
getName
();
}
}
this
.
target
=
DBUtils
.
findObject
(
targetAttributes
,
DBUtils
.
getUnQuotedIdentifier
(
targetEntity
.
getDataSource
(),
targetName
),
true
);
if
(
this
.
target
!=
null
)
{
mappingType
=
DatabaseMappingType
.
existing
;
}
else
{
...
...
plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/database/DatabaseTransferProducer.java
浏览文件 @
ff019900
...
...
@@ -37,6 +37,8 @@ import org.jkiss.dbeaver.model.sql.SQLScriptElement;
import
org.jkiss.dbeaver.model.sql.data.SQLQueryDataContainer
;
import
org.jkiss.dbeaver.model.struct.DBSDataContainer
;
import
org.jkiss.dbeaver.model.struct.DBSEntity
;
import
org.jkiss.dbeaver.model.struct.rdb.DBSCatalog
;
import
org.jkiss.dbeaver.model.struct.rdb.DBSSchema
;
import
org.jkiss.dbeaver.model.task.DBTTask
;
import
org.jkiss.dbeaver.model.task.DBTaskUtils
;
import
org.jkiss.dbeaver.runtime.DBWorkbench
;
...
...
@@ -289,9 +291,21 @@ 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
());
}
}
}
SQLScriptElement
query
=
queryContainer
.
getQuery
();
state
.
put
(
"query"
,
query
.
getOriginalText
());
...
...
@@ -340,6 +354,14 @@ 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
)
);
SQLScriptContext
scriptContext
=
new
SQLScriptContext
(
null
,
taskContextProvider
,
null
,
new
PrintWriter
(
System
.
err
,
true
),
null
);
scriptContext
.
setVariables
(
DBTaskUtils
.
getVariables
(
objectContext
));
...
...
plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/internal/DTMessages.java
浏览文件 @
ff019900
...
...
@@ -97,9 +97,13 @@ public class DTMessages extends NLS {
public
static
String
data_transfer_db_consumer_target_container
;
public
static
String
data_transfer_db_consumer_choose_container
;
public
static
String
data_transfer_db_consumer_auto_assign
;
public
static
String
data_transfer_db_consumer_auto_assign_description
;
public
static
String
data_transfer_db_consumer_existing_table
;
public
static
String
data_transfer_db_consumer_existing_table_description
;
public
static
String
data_transfer_db_consumer_new_table
;
public
static
String
data_transfer_db_consumer_new_table_description
;
public
static
String
data_transfer_db_consumer_column_mappings
;
public
static
String
data_transfer_db_consumer_column_mappings_description
;
public
static
String
data_transfer_db_consumer_ddl
;
public
static
String
sql_script_task_title
;
...
...
plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/internal/DTMessages.properties
浏览文件 @
ff019900
...
...
@@ -74,9 +74,13 @@ data_transfer_wizard_settings_column_mapping_type = Mapping type
data_transfer_db_consumer_target_container
=
Target container
data_transfer_db_consumer_choose_container
=
Choose container
data_transfer_db_consumer_auto_assign
=
Auto assign
data_transfer_db_consumer_auto_assign_description
=
Auto-assign table and column mappings
data_transfer_db_consumer_existing_table
=
Browse ...
data_transfer_db_consumer_existing_table_description
=
Select target table
data_transfer_db_consumer_new_table
=
New ...
data_transfer_db_consumer_new_table_description
=
Set target table name
data_transfer_db_consumer_column_mappings
=
Columns ...
data_transfer_db_consumer_column_mappings_description
=
Configure column mappings (advanced)
data_transfer_db_consumer_ddl
=
Schema ...
sql_script_task_title
=
SQL Script execute
...
...
plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/internal/DTMessages_ru.properties
浏览文件 @
ff019900
...
...
@@ -81,10 +81,14 @@ sql_script_task_page_settings_description = \u0412\u044B\u0431\u0435\u0440\u0438
sql_script_task_page_settings_title
=
\u
041D
\u0430\u0441\u0442\u0440\u
043E
\u0439\u
043A
\u0438
\u0432\u
044B
\u
043F
\u
043E
\u
043B
\u
043D
\u0435\u
043D
\u0438\u
044F SQL
\u0441\u
043A
\u0440\u0438\u
043F
\u0442\u0430
sql_script_task_title
=
\u0412\u
044B
\u
043F
\u
043E
\u
043B
\u
043D
\u0435\u
043D
\u0438\u0435
SQL
\u0441\u
043A
\u0440\u0438\u
043F
\u0442\u0430
data_transfer_db_consumer_ddl
=
\u0421\u0445\u0435\u
043C
\u0430
...
data_transfer_db_consumer_
column_mappings
=
\u0421\u0442\u
043E
\u
043B
\u0431\u0446\u
044B ...
data_transfer_db_consumer_
new_table
=
\u
041D
\u
043E
\u0432\u
043E
\u0435
...
data_transfer_db_consumer_
auto_assign
=
\u0410\u0432\u0442\u
043E
\u
043F
\u0440\u0438\u0441\u0432\u
043E
\u0435\u
043D
\u0438\u0435
data_transfer_db_consumer_
auto_assign_description
=
\u0410\u0432\u0442\u
043E
\u
043F
\u0440\u0438\u0441\u0432\u
043E
\u0435\u
043D
\u0438\u0435
\u0441\u
043E
\u
043E
\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0439
\u0442\u0430\u0431\u
043B
\u0438\u0446
\u0438
\u0441\u0442\u
043E
\u
043B
\u0431\u0446\u
043E
\u0432
data_transfer_db_consumer_existing_table
=
\u
041E
\u0431\u0437\u
043E
\u0440
...
data_transfer_db_consumer_auto_assign
=
\u0410\u0432\u0442\u
043E-
\u
043F
\u0440\u0438\u0441\u0432\u
043E
\u0435\u
043D
\u0438\u0435
data_transfer_db_consumer_existing_table_description
=
\u0412\u
044B
\u0431\u0440\u0430\u0442\u
044C
\u0446\u0435\u
043B
\u0435\u0432\u0443\u
044E
\u0442\u0430\u0431\u
043B
\u0438\u0446\u0443
data_transfer_db_consumer_new_table
=
\u0421\u
043E
\u0437\u0434\u0430\u0442\u
044C ...
data_transfer_db_consumer_new_table_description
=
\u0421\u
043E
\u0437\u0434\u0430\u0442\u
044C
\u
043D
\u
043E
\u0432\u0443\u
044E
\u0446\u0435\u
043B
\u0435\u0432\u0443\u
044E
\u0442\u0430\u0431\u
043B
\u0438\u0446\u0443
data_transfer_db_consumer_column_mappings
=
\u0421\u0442\u
043E
\u
043B
\u0431\u0446\u
044B ...
data_transfer_db_consumer_column_mappings_description
=
\u
041D
\u0430\u0441\u0442\u0440\u
043E
\u0439\u
043A
\u0430
\u0441\u
043E
\u
043E
\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0439
\u0441\u0442\u
043E
\u
043B
\u0431\u0446\u
043E
\u0432
data_transfer_db_consumer_choose_container
=
\u0412\u
044B
\u0431\u
043E
\u0440
\u
043A
\u
043E
\u
043D
\u0442\u0435\u0439\u
043D
\u0435\u0440\u0430
database_consumer_settings_option_use_transactions
=
\u0418\u0441\u
043F
\u
043E
\u
043B
\u
044C
\u0437\u
043E
\u0432\u0430\u0442\u
044C
\u0442\u0440\u0430\u
043D
\u0437\u0430\u
043A
\u0446\u0438\u0438
database_consumer_settings_option_commit_after
=
\u0412\u
044B
\u
043F
\u
043E
\u
043B
\u
043D
\u
044F
\u0442\u
044C Commit
\u
043F
\u
043E
\u0441\u
043B
\u0435
\u0432\u0441\u0442\u0430\u0432\u
043A
\u0438
\u0441\u0442\u0440\u
043E
\u
043A
...
...
plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/stream/StreamDataImporterColumnInfo.java
浏览文件 @
ff019900
...
...
@@ -29,6 +29,10 @@ public class StreamDataImporterColumnInfo extends AbstractAttribute implements D
private
StreamEntityMapping
entityMapping
;
private
DBPDataKind
dataKind
;
// Determines whether the mapping metadata,
// such as the column name, is present or not.
private
boolean
mappingMetadataPresent
;
public
StreamDataImporterColumnInfo
(
StreamEntityMapping
entity
,
int
columnIndex
,
String
columnName
,
String
typeName
,
int
maxLength
,
DBPDataKind
dataKind
)
{
super
(
columnName
,
typeName
,
-
1
,
columnIndex
,
maxLength
,
null
,
null
,
false
,
false
);
this
.
entityMapping
=
entity
;
...
...
@@ -61,4 +65,12 @@ public class StreamDataImporterColumnInfo extends AbstractAttribute implements D
public
void
setDataKind
(
DBPDataKind
dataKind
)
{
this
.
dataKind
=
dataKind
;
}
public
boolean
isMappingMetadataPresent
()
{
return
mappingMetadataPresent
;
}
public
void
setMappingMetadataPresent
(
boolean
mappingMetadataPresent
)
{
this
.
mappingMetadataPresent
=
mappingMetadataPresent
;
}
}
plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/stream/StreamTransferUtils.java
浏览文件 @
ff019900
...
...
@@ -18,6 +18,7 @@
package
org.jkiss.dbeaver.tools.transfer.stream
;
import
org.jkiss.dbeaver.Log
;
import
org.jkiss.utils.CommonUtils
;
import
java.util.Map
;
...
...
@@ -28,18 +29,17 @@ public class StreamTransferUtils {
private
static
final
Log
log
=
Log
.
getLog
(
StreamTransferUtils
.
class
);
private
static
final
char
DEF_DELIMITER
=
','
;
private
static
final
String
DEF_DELIMITER
=
","
;
public
static
String
getDelimiterString
(
Map
<
String
,
Object
>
properties
,
String
propName
)
{
String
delimString
=
String
.
valueOf
(
properties
.
get
(
propName
)
);
if
(
delimString
==
null
||
delimString
.
isEmpty
(
))
{
delimString
=
String
.
valueOf
(
DEF_DELIMITER
)
;
String
delimString
=
CommonUtils
.
toString
(
properties
.
get
(
propName
),
null
);
if
(
CommonUtils
.
isEmpty
(
delimString
))
{
return
DEF_DELIMITER
;
}
else
{
delimString
=
delimString
return
delimString
.
replace
(
"\\t"
,
"\t"
)
.
replace
(
"\\n"
,
"\n"
)
.
replace
(
"\\r"
,
"\r"
);
}
return
delimString
;
}
}
plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/stream/importer/DataImporterCSV.java
浏览文件 @
ff019900
...
...
@@ -19,6 +19,7 @@ package org.jkiss.dbeaver.tools.transfer.stream.importer;
import
au.com.bytecode.opencsv.CSVReader
;
import
org.jkiss.code.NotNull
;
import
org.jkiss.dbeaver.DBException
;
import
org.jkiss.dbeaver.Log
;
import
org.jkiss.dbeaver.model.DBPDataKind
;
import
org.jkiss.dbeaver.model.DBPDataSource
;
import
org.jkiss.dbeaver.model.DBUtils
;
...
...
@@ -31,6 +32,7 @@ import org.jkiss.dbeaver.tools.transfer.IDataTransferConsumer;
import
org.jkiss.dbeaver.tools.transfer.stream.*
;
import
org.jkiss.dbeaver.utils.GeneralUtils
;
import
org.jkiss.utils.CommonUtils
;
import
org.jkiss.utils.Pair
;
import
java.io.*
;
import
java.util.ArrayList
;
...
...
@@ -41,6 +43,7 @@ import java.util.Map;
* CSV importer
*/
public
class
DataImporterCSV
extends
StreamImporterAbstract
{
private
static
final
Log
log
=
Log
.
getLog
(
DataImporterCSV
.
class
);
private
static
final
String
PROP_ENCODING
=
"encoding"
;
private
static
final
String
PROP_HEADER
=
"header"
;
...
...
@@ -49,8 +52,16 @@ public class DataImporterCSV extends StreamImporterAbstract {
private
static
final
String
PROP_NULL_STRING
=
"nullString"
;
private
static
final
String
PROP_EMPTY_STRING_NULL
=
"emptyStringNull"
;
private
static
final
String
PROP_ESCAPE_CHAR
=
"escapeChar"
;
private
static
final
int
MAX_COLUMN_LENGTH
=
1024
;
enum
HeaderPosition
{
private
static
final
int
MAX_DATA_TYPE_SAMPLES
=
1000
;
private
static
final
Pair
<
DBPDataKind
,
String
>
DATA_TYPE_UNKNOWN
=
new
Pair
<>(
DBPDataKind
.
UNKNOWN
,
null
);
private
static
final
Pair
<
DBPDataKind
,
String
>
DATA_TYPE_INTEGER
=
new
Pair
<>(
DBPDataKind
.
NUMERIC
,
"INTEGER"
);
private
static
final
Pair
<
DBPDataKind
,
String
>
DATA_TYPE_REAL
=
new
Pair
<>(
DBPDataKind
.
NUMERIC
,
"REAL"
);
private
static
final
Pair
<
DBPDataKind
,
String
>
DATA_TYPE_BOOLEAN
=
new
Pair
<>(
DBPDataKind
.
BOOLEAN
,
"BOOLEAN"
);
private
static
final
Pair
<
DBPDataKind
,
String
>
DATA_TYPE_STRING
=
new
Pair
<>(
DBPDataKind
.
STRING
,
"VARCHAR"
);
public
enum
HeaderPosition
{
none
,
top
,
}
...
...
@@ -67,26 +78,62 @@ public class DataImporterCSV extends StreamImporterAbstract {
try
(
Reader
reader
=
openStreamReader
(
inputStream
,
processorProperties
))
{
try
(
CSVReader
csvReader
=
openCSVReader
(
reader
,
processorProperties
))
{
for
(;;)
{
String
[]
line
=
csvReader
.
readNext
();
if
(
line
==
null
)
{
break
;
String
[]
header
=
getNextLine
(
csvReader
);
if
(
header
==
null
)
{
return
columnsInfo
;
}
for
(
int
i
=
0
;
i
<
header
.
length
;
i
++)
{
String
column
=
header
[
i
];
if
(
headerPosition
==
HeaderPosition
.
none
)
{
column
=
"Column"
+
(
i
+
1
);
}
else
{
column
=
DBUtils
.
getUnQuotedIdentifier
(
entityMapping
.
getDataSource
(),
column
);
}
if
(
line
.
length
==
0
)
{
continue
;
StreamDataImporterColumnInfo
columnInfo
=
new
StreamDataImporterColumnInfo
(
entityMapping
,
i
,
column
,
null
,
MAX_COLUMN_LENGTH
,
DBPDataKind
.
UNKNOWN
);
columnInfo
.
setMappingMetadataPresent
(
headerPosition
!=
HeaderPosition
.
none
);
columnsInfo
.
add
(
columnInfo
);
}
for
(
int
sample
=
0
;
sample
<
MAX_DATA_TYPE_SAMPLES
;
sample
++)
{
String
[]
line
;
if
(
sample
==
0
&&
headerPosition
==
HeaderPosition
.
none
)
{
// Include first line (header that does not exist) for sampling
line
=
header
;
}
else
{
line
=
getNextLine
(
csvReader
);
if
(
line
==
null
)
{
break
;
}
}
for
(
int
i
=
0
;
i
<
line
.
length
;
i
++)
{
String
column
=
line
[
i
];
if
(
headerPosition
==
HeaderPosition
.
none
)
{
column
=
"Column"
+
(
i
+
1
);
}
else
{
column
=
DBUtils
.
getUnQuotedIdentifier
(
entityMapping
.
getDataSource
(),
column
);
for
(
int
i
=
0
;
i
<
Math
.
min
(
line
.
length
,
header
.
length
);
i
++)
{
Pair
<
DBPDataKind
,
String
>
dataType
=
getDataType
(
line
[
i
]);
StreamDataImporterColumnInfo
columnInfo
=
columnsInfo
.
get
(
i
);
switch
(
dataType
.
getFirst
())
{
case
STRING:
columnInfo
.
setDataKind
(
dataType
.
getFirst
());
columnInfo
.
setTypeName
(
dataType
.
getSecond
());
break
;
case
NUMERIC:
case
BOOLEAN:
if
(
columnInfo
.
getDataKind
()
==
DBPDataKind
.
UNKNOWN
)
{
columnInfo
.
setDataKind
(
dataType
.
getFirst
());
columnInfo
.
setTypeName
(
dataType
.
getSecond
());
}
break
;
}
columnsInfo
.
add
(
new
StreamDataImporterColumnInfo
(
entityMapping
,
i
,
column
,
"VARCHAR"
,
1024
,
DBPDataKind
.
STRING
));
}
break
;
}
for
(
StreamDataImporterColumnInfo
columnInfo
:
columnsInfo
)
{
if
(
columnInfo
.
getDataKind
()
==
DBPDataKind
.
UNKNOWN
)
{
log
.
warn
(
"Cannot guess data type for column '"
+
columnInfo
.
getName
()
+
"', defaulting to VARCHAR"
);
columnInfo
.
setDataKind
(
DBPDataKind
.
STRING
);
columnInfo
.
setTypeName
(
"VARCHAR"
);
}
}
}
}
catch
(
IOException
e
)
{
...
...
@@ -118,6 +165,43 @@ public class DataImporterCSV extends StreamImporterAbstract {
return
new
InputStreamReader
(
inputStream
,
encoding
);
}
private
String
[]
getNextLine
(
CSVReader
csvReader
)
throws
IOException
{
while
(
true
)
{
String
[]
line
=
csvReader
.
readNext
();
if
(
line
==
null
)
{
return
null
;
}
if
(
line
.
length
==
0
)
{
continue
;
}
return
line
;
}
}
private
Pair
<
DBPDataKind
,
String
>
getDataType
(
String
value
)
{
if
(
CommonUtils
.
isEmpty
(
value
))
{
return
DATA_TYPE_UNKNOWN
;
}
try
{
Integer
.
parseInt
(
value
);
return
DATA_TYPE_INTEGER
;
}
catch
(
NumberFormatException
ignored
)
{
}
try
{
Double
.
parseDouble
(
value
);
return
DATA_TYPE_REAL
;
}
catch
(
NumberFormatException
ignored
)
{
}
if
(
value
.
equalsIgnoreCase
(
"true"
)
||
value
.
equalsIgnoreCase
(
"false"
))
{
return
DATA_TYPE_BOOLEAN
;
}
return
DATA_TYPE_STRING
;
}
@Override
public
void
runImport
(
@NotNull
DBRProgressMonitor
monitor
,
@NotNull
DBPDataSource
streamDataSource
,
@NotNull
InputStream
inputStream
,
@NotNull
IDataTransferConsumer
consumer
)
throws
DBException
{
IStreamDataImporterSite
site
=
getSite
();
...
...
plugins/org.jkiss.dbeaver.ext.postgresql/plugin.xml
浏览文件 @
ff019900
...
...
@@ -126,7 +126,7 @@
</items>
</folder>
<folder
type=
"org.jkiss.dbeaver.ext.postgresql.model.PostgreTablePartition"
label=
"%tree.partitions.node.name"
icon=
"#folder_table"
description=
"%tree.partitions.node.tip"
visibleIf=
"object.dataSource.serverType.supportsPartitions()"
>
<items
label=
"%tree.partition
s
.node.name"
path=
"partition"
property=
"partitions"
icon=
"#partition"
recursive=
"../.."
>
<items
label=
"%tree.partition.node.name"
path=
"partition"
property=
"partitions"
icon=
"#partition"
recursive=
"../.."
>
</items>
</folder>
<folder
type=
"org.jkiss.dbeaver.ext.postgresql.model.PostgreTableReal"
label=
"%tree.tablechildren.node.name"
icon=
"#folder_table"
description=
"Table children"
virtual=
"true"
visibleIf=
"object.hasSubClasses() && !object.isPartition()"
>
...
...
plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreTable.java
浏览文件 @
ff019900
...
...
@@ -417,16 +417,16 @@ public abstract class PostgreTable extends PostgreTableReal implements PostgreTa
@Nullable
@Association
public
Collection
<
PostgreTableBase
>
getPartitions
(
DBRProgressMonitor
monitor
)
throws
DBException
{
public
List
<
PostgreTablePartition
>
getPartitions
(
DBRProgressMonitor
monitor
)
throws
DBException
{
final
List
<
PostgreTableInheritance
>
si
=
getSubInheritance
(
monitor
);
if
(
CommonUtils
.
isEmpty
(
si
))
{
return
null
;
}
List
<
PostgreTable
Base
>
result
=
new
ArrayList
<>(
si
.
size
());
for
(
int
i1
=
0
;
i1
<
si
.
size
();
i1
++
)
{
PostgreTableBase
table
=
si
.
get
(
i1
)
.
getParentObject
();
if
(
table
.
isPartition
()
)
{
result
.
add
(
table
);
List
<
PostgreTable
Partition
>
result
=
new
ArrayList
<>(
si
.
size
());
for
(
PostgreTableInheritance
postgreTableInheritance
:
si
)
{
PostgreTableBase
table
=
postgreTableInheritance
.
getParentObject
();
if
(
table
instanceof
PostgreTablePartition
)
{
result
.
add
(
(
PostgreTablePartition
)
table
);
}
}
return
result
;
...
...
plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/data/PostgreArrayValueHandler.java
浏览文件 @
ff019900
...
...
@@ -133,6 +133,10 @@ public class PostgreArrayValueHandler extends JDBCArrayValueHandler {
@NotNull
@Override
public
String
getValueDisplayString
(
@NotNull
DBSTypedObject
column
,
Object
value
,
@NotNull
DBDDisplayFormat
format
)
{
return
convertArrayToString
(
column
,
value
,
format
,
false
);
}
private
String
convertArrayToString
(
@NotNull
DBSTypedObject
column
,
Object
value
,
@NotNull
DBDDisplayFormat
format
,
boolean
nested
)
{
if
(!
DBUtils
.
isNullValue
(
value
)
&&
value
instanceof
DBDCollection
)
{
DBDCollection
collection
=
(
DBDCollection
)
value
;
boolean
isNativeFormat
=
format
==
DBDDisplayFormat
.
NATIVE
;
...
...
@@ -140,7 +144,7 @@ public class PostgreArrayValueHandler extends JDBCArrayValueHandler {
DBDValueHandler
valueHandler
=
collection
.
getComponentValueHandler
();
StringBuilder
str
=
new
StringBuilder
();
if
(
isNativeFormat
)
{
if
(
isNativeFormat
&&
!
nested
)
{
str
.
append
(
"'"
);
}
str
.
append
(
"{"
);
...
...
@@ -152,21 +156,21 @@ public class PostgreArrayValueHandler extends JDBCArrayValueHandler {
String
itemString
;
if
(
item
instanceof
JDBCCollection
)
{
// Multi-dimensional arrays case
itemString
=
getValueDisplayString
(
column
,
item
,
format
);
itemString
=
convertArrayToString
(
column
,
item
,
format
,
true
);
}
else
{
itemString
=
valueHandler
.
getValueDisplayString
(
collection
.
getComponentType
(),
item
,
format
);
}
if
(
isNativeFormat
&&
isStringArray
)
str
.
append
(
'"'
);
if
(
format
==
DBDDisplayFormat
.
NATIVE
)
{
if
(
isNativeFormat
)
{
if
(
item
instanceof
String
)
str
.
append
(
'"'
);
str
.
append
(
SQLUtils
.
escapeString
(
collection
.
getComponentType
().
getDataSource
(),
itemString
));
if
(
item
instanceof
String
)
str
.
append
(
'"'
);
}
else
{
str
.
append
(
itemString
);
}
if
(
isNativeFormat
&&
isStringArray
)
str
.
append
(
'"'
);
}
str
.
append
(
"}"
);
if
(
format
==
DBDDisplayFormat
.
NATIVE
)
{
if
(
isNativeFormat
&&
!
nested
)
{
str
.
append
(
"'"
);
}
...
...
plugins/org.jkiss.dbeaver.net.ssh.jsch/src/org/jkiss/dbeaver/model/net/ssh/SSHImplementationJsch.java
浏览文件 @
ff019900
...
...
@@ -164,7 +164,7 @@ public class SSHImplementationJsch extends SSHImplementationAbstract {
* algorithm will fail if the 'ssh-keygen' cannot be found (#5845)
*/
if
(
header
.
equals
(
"-----BEGIN OPENSSH PRIVATE KEY-----"
))
{
log
.
debug
(
"Attempting to convert
unsupported key
"
);
log
.
debug
(
"Attempting to convert
an unsupported key into suitable format
"
);
String
id
=
dataSource
!=
null
?
dataSource
.
getId
()
:
"profile"
;
File
dir
=
DBWorkbench
.
getPlatform
().
getTempFolder
(
monitor
,
"openssh-pkey"
);
...
...
@@ -176,10 +176,11 @@ public class SSHImplementationJsch extends SSHImplementationAbstract {
.
command
(
"ssh-keygen"
,
"-p"
,
"-P"
,
'"'
+
(
CommonUtils
.
isEmpty
(
password
)
?
""
:
password
)
+
'"'
,
"-N"
,
'"'
+
(
CommonUtils
.
isEmpty
(
password
)
?
""
:
password
)
+
'"'
,
"-m"
,
"PEM"
,
"-f"
,
tmp
.
getAbsolutePath
(),
"-q"
,
"-N"
,
'"'
+
(
CommonUtils
.
isEmpty
(
password
)
?
""
:
password
)
+
'"'
)
"-q"
)
.
start
();
try
{
...
...
plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetFilterContentAdapter.java
浏览文件 @
ff019900
...
...
@@ -47,7 +47,7 @@ public class ResultSetFilterContentAdapter extends StyledTextContentAdapter {
for
(
int
i
=
selection
.
x
-
1
;
i
>=
0
;
i
--)
{
String
prefix
=
curValue
.
substring
(
i
,
selection
.
x
);
if
(
contentsUC
.
startsWith
(
prefix
))
{
if
(
i
==
0
||
curValue
.
substring
(
i
-
1
,
selection
.
x
).
startsWith
(
" "
))
{
if
(
i
==
0
||
!
Character
.
isJavaIdentifierPart
(
curValue
.
charAt
(
i
-
1
)
))
{
text
.
setSelection
(
i
,
selection
.
x
);
break
;
}
...
...
plugins/org.jkiss.dbeaver.ui.editors.sql/OSGI-INF/l10n/bundle.properties
浏览文件 @
ff019900
...
...
@@ -155,17 +155,19 @@ colorDefinition.org.jkiss.dbeaver.sql.editor.color.disabled.background.label = S
colorDefinition.org.jkiss.dbeaver.sql.editor.color.disabled.background.description
=
SQL text background
page.org.jkiss.dbeaver.preferences.main.sqleditor.name
=
SQL Editor
page.org.jkiss.dbeaver.preferences.main.sql.completion.name
=
SQL Completion / Folding
page.org.jkiss.dbeaver.preferences.main.sql.format.name
=
SQL Formatting
page.org.jkiss.dbeaver.preferences.main.sql.dialects.name
=
SQL Dialect Settings
page.org.jkiss.dbeaver.preferences.main.sql.completion.name
=
Code Completion
page.org.jkiss.dbeaver.preferences.main.sql.codeeditor.name
=
Code Editor
page.org.jkiss.dbeaver.preferences.main.sql.format.name
=
Formatting
page.org.jkiss.dbeaver.preferences.main.sql.dialects.name
=
Dialect Settings
page.org.jkiss.dbeaver.preferences.main.sql.resources.name
=
Scripts
page.org.jkiss.dbeaver.preferences.main.sqlexecute.name
=
SQL Processing
page.org.jkiss.dbeaver.preferences.main.sql.templates.name
=
Templates
pref.page.name.sql.completion
=
SQL Completion
pref.page.name.sql.editor
=
SQL Editor
pref.page.name.sql.dialects
=
SQL Dialects
pref.page.name.sql.completion
=
Code Completion
pref.page.name.sql.codeeditor
=
Code Editor
pref.page.name.sql.dialects
=
Dialects
pref.page.name.sql.execute
=
SQL Processing
pref.page.name.sql.format
=
SQL
Formatting
pref.page.name.sql.format
=
Formatting
pref.page.name.sql.resources
=
Scripts
pref.page.name.sql.templates
=
Templates
plugins/org.jkiss.dbeaver.ui.editors.sql/OSGI-INF/l10n/bundle_ru.properties
浏览文件 @
ff019900
...
...
@@ -103,13 +103,15 @@ sql.plan.view.simple.name=\u041F\u0440\u043E\u0441\u0442\u043E\u0439
sql.plan.view.simple.tip
=
\u
041F
\u0440\u
043E
\u0441\u0442\u
043E
\u0435
\u
043F
\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u
043B
\u0435\u
043D
\u0438\u0435
\u
043F
\u
043B
\u0430\u
043D
\u0430
\u0432\u
044B
\u
043F
\u
043E
\u
043B
\u
043D
\u0435\u
043D
\u0438\u
044F
page.org.jkiss.dbeaver.preferences.main.sqleditor.name
=
\u0420\u0435\u0434\u0430\u
043A
\u0442\u
043E
\u0440
SQL
page.org.jkiss.dbeaver.preferences.main.sql.completion.name
=
\u0414\u
043E
\u
043F
\u
043E
\u
043B
\u
043D
\u0435\u
043D
\u0438\u0435
SQL
page.org.jkiss.dbeaver.preferences.main.sql.format.name
=
\u0424\u
043E
\u0440\u
043C
\u0430\u0442\u0438\u0440\u
043E
\u0432\u0430\u
043D
\u0438\u0435
SQL
page.org.jkiss.dbeaver.preferences.main.sql.completion.name
=
\u0410\u0432\u0442\u
043E-
\u0434\u
043E
\u
043F
\u
043E
\u
043B
\u
043D
\u0435\u
043D
\u0438\u0435
page.org.jkiss.dbeaver.preferences.main.sql.codeeditor.name
=
\u0420\u0435\u0434\u0430\u
043A
\u0442\u
043E
\u0440
\u
043A
\u
043E
\u0434\u0430
page.org.jkiss.dbeaver.preferences.main.sql.format.name
=
\u0424\u
043E
\u0440\u
043C
\u0430\u0442\u0438\u0440\u
043E
\u0432\u0430\u
043D
\u0438\u0435
page.org.jkiss.dbeaver.preferences.main.sqlexecute.name
=
\u0412\u
044B
\u
043F
\u
043E
\u
043B
\u
043D
\u0435\u
043D
\u0438\u0435
SQL
page.org.jkiss.dbeaver.preferences.main.sql.templates.name
=
\u0428\u0430\u0431\u
043B
\u
043E
\u
043D
\u
044B
pref.page.name.sql.editor
=
\u0420\u0435\u0434\u0430\u
043A
\u0442\u
043E
\u0440
SQL
pref.page.name.sql.execute
=
\u0412\u
044B
\u
043F
\u
043E
\u
043B
\u
043D
\u0435\u
043D
\u0438\u0435
\u0437\u0430\u
043F
\u0440\u
043E
\u0441\u
043E
\u0432
pref.page.name.sql.format
=
\u0424\u
043E
\u0440\u
043C
\u0430\u0442\u0438\u0440\u
043E
\u0432\u0430\u
043D
\u0438\u0435
SQL
pref.page.name.sql.completion
=
\u0410\u0432\u0442\u
043E-
\u0434\u
043E
\u
043F
\u
043E
\u
043B
\u
043D
\u0435\u
043D
\u0438\u0435
SQL
pref.page.name.sql.resources
=
\u0421\u
043A
\u0440\u0438\u
043F
\u0442\u
044B SQL
pref.page.name.sql.codeeditor
=
\u0420\u0435\u0434\u0430\u
043A
\u0442\u
043E
\u0440
\u
043A
\u
043E
\u0434\u0430
pref.page.name.sql.execute
=
\u0412\u
044B
\u
043F
\u
043E
\u
043B
\u
043D
\u0435\u
043D
\u0438\u0435
SQL
pref.page.name.sql.format
=
\u0424\u
043E
\u0440\u
043C
\u0430\u0442\u0438\u0440\u
043E
\u0432\u0430\u
043D
\u0438\u0435
pref.page.name.sql.completion
=
\u0410\u0432\u0442\u
043E-
\u0434\u
043E
\u
043F
\u
043E
\u
043B
\u
043D
\u0435\u
043D
\u0438\u0435
pref.page.name.sql.resources
=
\u0421\u
043A
\u0440\u0438\u
043F
\u0442\u
044B
plugins/org.jkiss.dbeaver.ui.editors.sql/plugin.xml
浏览文件 @
ff019900
...
...
@@ -878,6 +878,9 @@
<page
category=
"org.jkiss.dbeaver.preferences.editors"
class=
"org.jkiss.dbeaver.ui.editors.sql.preferences.PrefPageSQLEditor"
id=
"org.jkiss.dbeaver.preferences.main.sqleditor"
name=
"%page.org.jkiss.dbeaver.preferences.main.sqleditor.name"
>
<enabledWhen><reference
definitionId=
"org.jkiss.dbeaver.core.preferences.datasource"
/></enabledWhen>
</page>
<page
category=
"org.jkiss.dbeaver.preferences.main.sqleditor"
id=
"org.jkiss.dbeaver.preferences.main.sql.codeeditor"
class=
"org.jkiss.dbeaver.ui.editors.sql.preferences.PrefPageSQLCodeEditing"
name=
"%page.org.jkiss.dbeaver.preferences.main.sql.codeeditor.name"
>
<enabledWhen><reference
definitionId=
"org.jkiss.dbeaver.core.preferences.datasource"
/></enabledWhen>
</page>
<page
category=
"org.jkiss.dbeaver.preferences.main.sqleditor"
id=
"org.jkiss.dbeaver.preferences.main.sql.completion"
class=
"org.jkiss.dbeaver.ui.editors.sql.preferences.PrefPageSQLCompletion"
name=
"%page.org.jkiss.dbeaver.preferences.main.sql.completion.name"
>
<enabledWhen><reference
definitionId=
"org.jkiss.dbeaver.core.preferences.datasource"
/></enabledWhen>
</page>
...
...
@@ -915,6 +918,10 @@
<keywordReference id="org.jkiss.dbeaver.core.keyword.dbeaver"/>
</page>
-->
<page
category=
"org.jkiss.dbeaver.preferences.main.sqleditor"
id=
"org.jkiss.dbeaver.preferences.main.sql.codeeditor"
class=
"org.jkiss.dbeaver.ui.editors.sql.preferences.PrefPageSQLCodeEditing"
name=
"%pref.page.name.sql.codeeditor"
>
<keywordReference
id=
"org.jkiss.dbeaver.core.keyword.pref.editor.sql"
/>
<keywordReference
id=
"org.jkiss.dbeaver.core.keyword.dbeaver"
/>
</page>
<page
category=
"org.jkiss.dbeaver.preferences.main.sqleditor"
id=
"org.jkiss.dbeaver.preferences.main.sql.completion"
class=
"org.jkiss.dbeaver.ui.editors.sql.preferences.PrefPageSQLCompletion"
name=
"%pref.page.name.sql.completion"
>
<keywordReference
id=
"org.jkiss.dbeaver.core.keyword.pref.editor.sql"
/>
<keywordReference
id=
"org.jkiss.dbeaver.core.keyword.dbeaver"
/>
...
...
plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorBase.java
浏览文件 @
ff019900
...
...
@@ -70,6 +70,7 @@ import org.jkiss.dbeaver.ui.editors.sql.syntax.SQLRuleScanner;
import
org.jkiss.dbeaver.ui.editors.sql.templates.SQLTemplatesPage
;
import
org.jkiss.dbeaver.ui.editors.sql.util.SQLSymbolInserter
;
import
org.jkiss.dbeaver.ui.editors.text.BaseTextEditor
;
import
org.jkiss.utils.ArrayUtils
;
import
org.jkiss.utils.CommonUtils
;
import
org.jkiss.utils.Pair
;
...
...
@@ -159,6 +160,8 @@ public abstract class SQLEditorBase extends BaseTextEditor implements DBPContext
setKeyBindingScopes
(
getKeyBindingContexts
());
//$NON-NLS-1$
completionContext
=
new
SQLEditorCompletionContext
(
this
);
DBWorkbench
.
getPlatform
().
getPreferenceStore
().
addPropertyChangeListener
(
this
);
}
@Override
...
...
@@ -474,6 +477,7 @@ public abstract class SQLEditorBase extends BaseTextEditor implements DBPContext
@Override
public
void
dispose
()
{
DBWorkbench
.
getPlatform
().
getPreferenceStore
().
removePropertyChangeListener
(
this
);
this
.
occurrencesHighlighter
.
dispose
();
/*
if (this.activationListener != null) {
...
...
@@ -737,15 +741,15 @@ public abstract class SQLEditorBase extends BaseTextEditor implements DBPContext
protected
String
[]
collectContextMenuPreferencePages
()
{
String
[]
ids
=
super
.
collectContextMenuPreferencePages
();
String
[]
more
=
new
String
[
ids
.
length
+
6
];
more
[
ids
.
length
]
=
PrefPageSQLEditor
.
PAGE_ID
;
more
[
ids
.
length
+
1
]
=
PrefPageSQLExecute
.
PAGE_ID
;
more
[
ids
.
length
+
2
]
=
PrefPageSQLCompletion
.
PAGE_ID
;
more
[
ids
.
length
+
3
]
=
PrefPageSQLFormat
.
PAGE_ID
;
more
[
ids
.
length
+
4
]
=
PrefPageSQLResources
.
PAGE_ID
;
more
[
ids
.
length
+
5
]
=
PrefPageSQLTemplates
.
PAGE_ID
;
System
.
arraycopy
(
ids
,
0
,
more
,
0
,
ids
.
length
);
return
more
;
return
ArrayUtils
.
concatArrays
(
ids
,
new
String
[]
{
PrefPageSQLEditor
.
PAGE_ID
,
PrefPageSQLExecute
.
PAGE_ID
,
PrefPageSQLCodeEditing
.
PAGE_ID
,
PrefPageSQLCompletion
.
PAGE_ID
,
PrefPageSQLFormat
.
PAGE_ID
,
PrefPageSQLResources
.
PAGE_ID
,
PrefPageSQLTemplates
.
PAGE_ID
})
;
}
@Override
...
...
@@ -868,6 +872,11 @@ public abstract class SQLEditorBase extends BaseTextEditor implements DBPContext
sourceViewer
.
unconfigure
();
annotationModel
.
removeAllAnnotations
();
sourceViewer
.
configure
(
configuration
);
return
;
case
SQLPreferenceConstants
.
MARK_OCCURRENCES_UNDER_CURSOR
:
case
SQLPreferenceConstants
.
MARK_OCCURRENCES_FOR_SELECTION
:
occurrencesHighlighter
.
updateInput
(
getEditorInput
());
return
;
}
}
...
...
plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/preferences/PrefPageSQLCodeEditing.java
0 → 100644
浏览文件 @
ff019900
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2020 DBeaver Corp and others
* Copyright (C) 2011-2012 Eugene Fradkin (eugene.fradkin@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jkiss.dbeaver.ui.editors.sql.preferences
;
import
org.eclipse.core.runtime.IAdaptable
;
import
org.eclipse.swt.layout.GridData
;
import
org.eclipse.swt.widgets.Button
;
import
org.eclipse.swt.widgets.Composite
;
import
org.eclipse.swt.widgets.Control
;
import
org.eclipse.ui.IWorkbench
;
import
org.eclipse.ui.IWorkbenchPreferencePage
;
import
org.eclipse.ui.IWorkbenchPropertyPage
;
import
org.jkiss.dbeaver.Log
;
import
org.jkiss.dbeaver.model.preferences.DBPPreferenceStore
;
import
org.jkiss.dbeaver.runtime.DBWorkbench
;
import
org.jkiss.dbeaver.ui.UIUtils
;
import
org.jkiss.dbeaver.ui.editors.sql.SQLPreferenceConstants
;
import
org.jkiss.dbeaver.ui.editors.sql.internal.SQLEditorMessages
;
import
org.jkiss.dbeaver.ui.preferences.AbstractPrefPage
;
import
org.jkiss.dbeaver.utils.PrefUtils
;
/**
* PrefPageSQLCodeEditing
*/
public
class
PrefPageSQLCodeEditing
extends
AbstractPrefPage
implements
IWorkbenchPreferencePage
,
IWorkbenchPropertyPage
{
private
static
final
Log
log
=
Log
.
getLog
(
PrefPageSQLCodeEditing
.
class
);
public
static
final
String
PAGE_ID
=
"org.jkiss.dbeaver.preferences.main.sql.codeeditor"
;
//$NON-NLS-1$
// Folding
private
Button
csFoldingEnabled
;
// Highlighting
private
Button
csMarkOccurrencesUnderCursor
;
private
Button
csMarkOccurrencesForSelection
;
// Auto-close
private
Button
acSingleQuotesCheck
;
private
Button
acDoubleQuotesCheck
;
private
Button
acBracketsCheck
;
// Auto-Format
private
Button
afKeywordCase
;
private
Button
afExtractFromSource
;
public
PrefPageSQLCodeEditing
()
{
super
();
}
@Override
protected
Control
createContents
(
Composite
parent
)
{
Composite
composite
=
UIUtils
.
createComposite
(
parent
,
1
);
// Folding
{
Composite
foldingGroup
=
UIUtils
.
createControlGroup
(
composite
,
SQLEditorMessages
.
pref_page_sql_completion_group_misc
,
2
,
GridData
.
VERTICAL_ALIGN_BEGINNING
|
GridData
.
HORIZONTAL_ALIGN_BEGINNING
,
0
);
csMarkOccurrencesUnderCursor
=
UIUtils
.
createCheckbox
(
foldingGroup
,
SQLEditorMessages
.
pref_page_sql_completion_label_mark_occurrences
,
SQLEditorMessages
.
pref_page_sql_completion_label_mark_occurrences_tip
,
false
,
2
);
csMarkOccurrencesForSelection
=
UIUtils
.
createCheckbox
(
foldingGroup
,
SQLEditorMessages
.
pref_page_sql_completion_label_mark_occurrences_for_selections
,
SQLEditorMessages
.
pref_page_sql_completion_label_mark_occurrences_for_selections_tip
,
false
,
2
);
csFoldingEnabled
=
UIUtils
.
createCheckbox
(
foldingGroup
,
SQLEditorMessages
.
pref_page_sql_completion_label_folding_enabled
,
SQLEditorMessages
.
pref_page_sql_completion_label_folding_enabled_tip
,
false
,
2
);
}
// Autoclose
{
Composite
acGroup
=
UIUtils
.
createControlGroup
(
composite
,
SQLEditorMessages
.
pref_page_sql_format_group_auto_close
,
1
,
GridData
.
HORIZONTAL_ALIGN_BEGINNING
|
GridData
.
VERTICAL_ALIGN_BEGINNING
,
0
);
acSingleQuotesCheck
=
UIUtils
.
createCheckbox
(
acGroup
,
SQLEditorMessages
.
pref_page_sql_format_label_single_quotes
,
false
);
acDoubleQuotesCheck
=
UIUtils
.
createCheckbox
(
acGroup
,
SQLEditorMessages
.
pref_page_sql_format_label_double_quotes
,
false
);
acBracketsCheck
=
UIUtils
.
createCheckbox
(
acGroup
,
SQLEditorMessages
.
pref_page_sql_format_label_brackets
,
false
);
}
{
// Formatting
Composite
afGroup
=
UIUtils
.
createControlGroup
(
composite
,
SQLEditorMessages
.
pref_page_sql_format_group_auto_format
,
1
,
GridData
.
HORIZONTAL_ALIGN_BEGINNING
|
GridData
.
VERTICAL_ALIGN_BEGINNING
,
0
);
afKeywordCase
=
UIUtils
.
createCheckbox
(
afGroup
,
SQLEditorMessages
.
pref_page_sql_format_label_convert_keyword_case
,
SQLEditorMessages
.
pref_page_sql_format_label_convert_keyword_case_tip
,
false
,
1
);
afExtractFromSource
=
UIUtils
.
createCheckbox
(
afGroup
,
SQLEditorMessages
.
pref_page_sql_format_label_extract_sql_from_source_code
,
SQLEditorMessages
.
pref_page_sql_format_label_extract_sql_from_source_code_tip
,
false
,
1
);
}
performDefaults
();
return
composite
;
}
@Override
protected
void
performDefaults
()
{
DBPPreferenceStore
store
=
DBWorkbench
.
getPlatform
().
getPreferenceStore
();
try
{
csFoldingEnabled
.
setSelection
(
store
.
getBoolean
(
SQLPreferenceConstants
.
FOLDING_ENABLED
));
csMarkOccurrencesUnderCursor
.
setSelection
(
store
.
getBoolean
(
SQLPreferenceConstants
.
MARK_OCCURRENCES_UNDER_CURSOR
));
csMarkOccurrencesForSelection
.
setSelection
(
store
.
getBoolean
(
SQLPreferenceConstants
.
MARK_OCCURRENCES_FOR_SELECTION
));
acSingleQuotesCheck
.
setSelection
(
store
.
getBoolean
(
SQLPreferenceConstants
.
SQLEDITOR_CLOSE_SINGLE_QUOTES
));
acDoubleQuotesCheck
.
setSelection
(
store
.
getBoolean
(
SQLPreferenceConstants
.
SQLEDITOR_CLOSE_DOUBLE_QUOTES
));
acBracketsCheck
.
setSelection
(
store
.
getBoolean
(
SQLPreferenceConstants
.
SQLEDITOR_CLOSE_BRACKETS
));
afKeywordCase
.
setSelection
(
store
.
getBoolean
(
SQLPreferenceConstants
.
SQL_FORMAT_KEYWORD_CASE_AUTO
));
afExtractFromSource
.
setSelection
(
store
.
getBoolean
(
SQLPreferenceConstants
.
SQL_FORMAT_EXTRACT_FROM_SOURCE
));
}
catch
(
Exception
e
)
{
log
.
warn
(
e
);
}
}
@Override
public
boolean
performOk
()
{
DBPPreferenceStore
store
=
DBWorkbench
.
getPlatform
().
getPreferenceStore
();
try
{
store
.
setValue
(
SQLPreferenceConstants
.
FOLDING_ENABLED
,
csFoldingEnabled
.
getSelection
());
store
.
setValue
(
SQLPreferenceConstants
.
MARK_OCCURRENCES_UNDER_CURSOR
,
csMarkOccurrencesUnderCursor
.
getSelection
());
store
.
setValue
(
SQLPreferenceConstants
.
MARK_OCCURRENCES_FOR_SELECTION
,
csMarkOccurrencesForSelection
.
getSelection
());
store
.
setValue
(
SQLPreferenceConstants
.
SQLEDITOR_CLOSE_SINGLE_QUOTES
,
acSingleQuotesCheck
.
getSelection
());
store
.
setValue
(
SQLPreferenceConstants
.
SQLEDITOR_CLOSE_DOUBLE_QUOTES
,
acDoubleQuotesCheck
.
getSelection
());
store
.
setValue
(
SQLPreferenceConstants
.
SQLEDITOR_CLOSE_BRACKETS
,
acBracketsCheck
.
getSelection
());
store
.
setValue
(
SQLPreferenceConstants
.
SQL_FORMAT_KEYWORD_CASE_AUTO
,
afKeywordCase
.
getSelection
());
store
.
setValue
(
SQLPreferenceConstants
.
SQL_FORMAT_EXTRACT_FROM_SOURCE
,
afExtractFromSource
.
getSelection
());
}
catch
(
Exception
e
)
{
log
.
warn
(
e
);
}
PrefUtils
.
savePreferenceStore
(
store
);
PrefUtils
.
savePreferenceStore
(
store
);
return
super
.
performOk
();
}
@Override
public
void
init
(
IWorkbench
workbench
)
{
}
@Override
public
IAdaptable
getElement
()
{
return
null
;
}
@Override
public
void
setElement
(
IAdaptable
element
)
{
}
}
\ No newline at end of file
plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/preferences/PrefPageSQLCompletion.java
浏览文件 @
ff019900
...
...
@@ -33,7 +33,7 @@ import org.jkiss.dbeaver.ui.preferences.TargetPrefPage;
import
org.jkiss.dbeaver.utils.PrefUtils
;
/**
* PrefPageSQL
Editor
* PrefPageSQL
Completion
*/
public
class
PrefPageSQLCompletion
extends
TargetPrefPage
{
...
...
@@ -59,14 +59,6 @@ public class PrefPageSQLCompletion extends TargetPrefPage
private
Button
csUseGlobalSearch
;
private
Button
csShowColumnProcedures
;
// Auto-close
private
Button
acSingleQuotesCheck
;
private
Button
acDoubleQuotesCheck
;
private
Button
acBracketsCheck
;
// Auto-Format
private
Button
afKeywordCase
;
private
Button
afExtractFromSource
;
public
PrefPageSQLCompletion
()
{
super
();
...
...
@@ -93,13 +85,7 @@ public class PrefPageSQLCompletion extends TargetPrefPage
store
.
contains
(
SQLPreferenceConstants
.
PROPOSALS_MATCH_CONTAINS
)
||
store
.
contains
(
SQLPreferenceConstants
.
USE_GLOBAL_ASSISTANT
)
||
store
.
contains
(
SQLPreferenceConstants
.
SHOW_COLUMN_PROCEDURES
)
||
store
.
contains
(
SQLPreferenceConstants
.
SHOW_SERVER_HELP_TOPICS
)
||
store
.
contains
(
SQLPreferenceConstants
.
SQLEDITOR_CLOSE_SINGLE_QUOTES
)
||
store
.
contains
(
SQLPreferenceConstants
.
SQLEDITOR_CLOSE_DOUBLE_QUOTES
)
||
store
.
contains
(
SQLPreferenceConstants
.
SQLEDITOR_CLOSE_BRACKETS
)
||
store
.
contains
(
SQLPreferenceConstants
.
SQL_FORMAT_KEYWORD_CASE_AUTO
)
||
store
.
contains
(
SQLPreferenceConstants
.
SQL_FORMAT_EXTRACT_FROM_SOURCE
)
store
.
contains
(
SQLPreferenceConstants
.
SHOW_SERVER_HELP_TOPICS
)
;
}
...
...
@@ -167,28 +153,6 @@ public class PrefPageSQLCompletion extends TargetPrefPage
csUseGlobalSearch
=
UIUtils
.
createCheckbox
(
assistGroup
,
SQLEditorMessages
.
pref_page_sql_completion_label_use_global_search
,
SQLEditorMessages
.
pref_page_sql_completion_label_use_global_search_tip
,
false
,
2
);
csShowColumnProcedures
=
UIUtils
.
createCheckbox
(
assistGroup
,
SQLEditorMessages
.
pref_page_sql_completion_label_show_column_procedures
,
SQLEditorMessages
.
pref_page_sql_completion_label_show_column_procedures_tip
,
false
,
2
);
}
// Autoclose
{
Composite
acGroup
=
UIUtils
.
createControlGroup
(
rightPanel
,
SQLEditorMessages
.
pref_page_sql_format_group_auto_close
,
1
,
GridData
.
FILL_HORIZONTAL
|
GridData
.
VERTICAL_ALIGN_BEGINNING
,
0
);
acSingleQuotesCheck
=
UIUtils
.
createCheckbox
(
acGroup
,
SQLEditorMessages
.
pref_page_sql_format_label_single_quotes
,
false
);
acDoubleQuotesCheck
=
UIUtils
.
createCheckbox
(
acGroup
,
SQLEditorMessages
.
pref_page_sql_format_label_double_quotes
,
false
);
acBracketsCheck
=
UIUtils
.
createCheckbox
(
acGroup
,
SQLEditorMessages
.
pref_page_sql_format_label_brackets
,
false
);
}
{
// Formatting
Composite
afGroup
=
UIUtils
.
createControlGroup
(
rightPanel
,
SQLEditorMessages
.
pref_page_sql_format_group_auto_format
,
1
,
GridData
.
FILL_HORIZONTAL
|
GridData
.
VERTICAL_ALIGN_BEGINNING
,
0
);
afKeywordCase
=
UIUtils
.
createCheckbox
(
afGroup
,
SQLEditorMessages
.
pref_page_sql_format_label_convert_keyword_case
,
SQLEditorMessages
.
pref_page_sql_format_label_convert_keyword_case_tip
,
false
,
1
);
afExtractFromSource
=
UIUtils
.
createCheckbox
(
afGroup
,
SQLEditorMessages
.
pref_page_sql_format_label_extract_sql_from_source_code
,
SQLEditorMessages
.
pref_page_sql_format_label_extract_sql_from_source_code_tip
,
false
,
1
);
}
return
composite
;
}
...
...
@@ -216,12 +180,6 @@ public class PrefPageSQLCompletion extends TargetPrefPage
csUseGlobalSearch
.
setSelection
(
store
.
getBoolean
(
SQLPreferenceConstants
.
USE_GLOBAL_ASSISTANT
));
csShowColumnProcedures
.
setSelection
(
store
.
getBoolean
(
SQLPreferenceConstants
.
SHOW_COLUMN_PROCEDURES
));
acSingleQuotesCheck
.
setSelection
(
store
.
getBoolean
(
SQLPreferenceConstants
.
SQLEDITOR_CLOSE_SINGLE_QUOTES
));
acDoubleQuotesCheck
.
setSelection
(
store
.
getBoolean
(
SQLPreferenceConstants
.
SQLEDITOR_CLOSE_DOUBLE_QUOTES
));
acBracketsCheck
.
setSelection
(
store
.
getBoolean
(
SQLPreferenceConstants
.
SQLEDITOR_CLOSE_BRACKETS
));
afKeywordCase
.
setSelection
(
store
.
getBoolean
(
SQLPreferenceConstants
.
SQL_FORMAT_KEYWORD_CASE_AUTO
));
afExtractFromSource
.
setSelection
(
store
.
getBoolean
(
SQLPreferenceConstants
.
SQL_FORMAT_EXTRACT_FROM_SOURCE
));
}
catch
(
Exception
e
)
{
log
.
warn
(
e
);
}
...
...
@@ -248,13 +206,6 @@ public class PrefPageSQLCompletion extends TargetPrefPage
store
.
setValue
(
SQLPreferenceConstants
.
PROPOSALS_MATCH_CONTAINS
,
csMatchContains
.
getSelection
());
store
.
setValue
(
SQLPreferenceConstants
.
USE_GLOBAL_ASSISTANT
,
csUseGlobalSearch
.
getSelection
());
store
.
setValue
(
SQLPreferenceConstants
.
SHOW_COLUMN_PROCEDURES
,
csShowColumnProcedures
.
getSelection
());
store
.
setValue
(
SQLPreferenceConstants
.
SQLEDITOR_CLOSE_SINGLE_QUOTES
,
acSingleQuotesCheck
.
getSelection
());
store
.
setValue
(
SQLPreferenceConstants
.
SQLEDITOR_CLOSE_DOUBLE_QUOTES
,
acDoubleQuotesCheck
.
getSelection
());
store
.
setValue
(
SQLPreferenceConstants
.
SQLEDITOR_CLOSE_BRACKETS
,
acBracketsCheck
.
getSelection
());
store
.
setValue
(
SQLPreferenceConstants
.
SQL_FORMAT_KEYWORD_CASE_AUTO
,
afKeywordCase
.
getSelection
());
store
.
setValue
(
SQLPreferenceConstants
.
SQL_FORMAT_EXTRACT_FROM_SOURCE
,
afExtractFromSource
.
getSelection
());
}
catch
(
Exception
e
)
{
log
.
warn
(
e
);
}
...
...
@@ -282,12 +233,6 @@ public class PrefPageSQLCompletion extends TargetPrefPage
store
.
setToDefault
(
SQLPreferenceConstants
.
PROPOSALS_MATCH_CONTAINS
);
store
.
setToDefault
(
SQLPreferenceConstants
.
USE_GLOBAL_ASSISTANT
);
store
.
setToDefault
(
SQLPreferenceConstants
.
SHOW_COLUMN_PROCEDURES
);
store
.
setToDefault
(
SQLPreferenceConstants
.
SQLEDITOR_CLOSE_SINGLE_QUOTES
);
store
.
setToDefault
(
SQLPreferenceConstants
.
SQLEDITOR_CLOSE_DOUBLE_QUOTES
);
store
.
setToDefault
(
SQLPreferenceConstants
.
SQLEDITOR_CLOSE_BRACKETS
);
store
.
setToDefault
(
SQLPreferenceConstants
.
SQL_FORMAT_KEYWORD_CASE_AUTO
);
store
.
setToDefault
(
SQLPreferenceConstants
.
SQL_FORMAT_EXTRACT_FROM_SOURCE
);
}
@Override
...
...
plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/preferences/PrefPageSQLEditor.java
浏览文件 @
ff019900
...
...
@@ -53,10 +53,6 @@ public class PrefPageSQLEditor extends TargetPrefPage
private
Button
autoSaveOnClose
;
private
Button
autoSaveActiveSchema
;
private
Button
csFoldingEnabled
;
private
Button
csMarkOccurrencesUnderCursor
;
private
Button
csMarkOccurrencesForSelection
;
private
Button
closeTabOnErrorCheck
;
private
Combo
resultsOrientationCombo
;
...
...
@@ -78,9 +74,6 @@ public class PrefPageSQLEditor extends TargetPrefPage
store
.
contains
(
SQLPreferenceConstants
.
AUTO_SAVE_ON_EXECUTE
)
||
store
.
contains
(
SQLPreferenceConstants
.
AUTO_SAVE_ACTIVE_SCHEMA
)
||
store
.
contains
(
SQLPreferenceConstants
.
FOLDING_ENABLED
)
||
store
.
contains
(
SQLPreferenceConstants
.
MARK_OCCURRENCES_UNDER_CURSOR
)
||
store
.
contains
(
SQLPreferenceConstants
.
RESULT_SET_CLOSE_ON_ERROR
)
;
}
...
...
@@ -113,15 +106,6 @@ public class PrefPageSQLEditor extends TargetPrefPage
autoSaveActiveSchema
=
UIUtils
.
createCheckbox
(
autoSaveGroup
,
SQLEditorMessages
.
pref_page_sql_editor_label_save_active_schema
,
false
);
}
// Folding
{
Composite
foldingGroup
=
UIUtils
.
createControlGroup
(
composite
,
SQLEditorMessages
.
pref_page_sql_completion_group_misc
,
2
,
GridData
.
VERTICAL_ALIGN_BEGINNING
|
GridData
.
FILL_HORIZONTAL
,
0
);
csMarkOccurrencesUnderCursor
=
UIUtils
.
createCheckbox
(
foldingGroup
,
SQLEditorMessages
.
pref_page_sql_completion_label_mark_occurrences
,
SQLEditorMessages
.
pref_page_sql_completion_label_mark_occurrences_tip
,
false
,
2
);
csMarkOccurrencesForSelection
=
UIUtils
.
createCheckbox
(
foldingGroup
,
SQLEditorMessages
.
pref_page_sql_completion_label_mark_occurrences_for_selections
,
SQLEditorMessages
.
pref_page_sql_completion_label_mark_occurrences_for_selections_tip
,
false
,
2
);
csFoldingEnabled
=
UIUtils
.
createCheckbox
(
foldingGroup
,
SQLEditorMessages
.
pref_page_sql_completion_label_folding_enabled
,
SQLEditorMessages
.
pref_page_sql_completion_label_folding_enabled_tip
,
false
,
2
);
}
{
Composite
layoutGroup
=
UIUtils
.
createControlGroup
(
composite
,
SQLEditorMessages
.
pref_page_sql_editor_group_result_view
,
2
,
GridData
.
FILL_HORIZONTAL
,
0
);
((
GridData
)
layoutGroup
.
getLayoutData
()).
horizontalSpan
=
2
;
...
...
@@ -160,10 +144,6 @@ public class PrefPageSQLEditor extends TargetPrefPage
saveOnQueryExecution
.
setSelection
(
store
.
getBoolean
(
SQLPreferenceConstants
.
AUTO_SAVE_ON_EXECUTE
));
autoSaveActiveSchema
.
setSelection
(
store
.
getBoolean
(
SQLPreferenceConstants
.
AUTO_SAVE_ACTIVE_SCHEMA
));
csFoldingEnabled
.
setSelection
(
store
.
getBoolean
(
SQLPreferenceConstants
.
FOLDING_ENABLED
));
csMarkOccurrencesUnderCursor
.
setSelection
(
store
.
getBoolean
(
SQLPreferenceConstants
.
MARK_OCCURRENCES_UNDER_CURSOR
));
csMarkOccurrencesForSelection
.
setSelection
(
store
.
getBoolean
(
SQLPreferenceConstants
.
MARK_OCCURRENCES_FOR_SELECTION
));
closeTabOnErrorCheck
.
setSelection
(
store
.
getBoolean
(
SQLPreferenceConstants
.
RESULT_SET_CLOSE_ON_ERROR
));
SQLEditor
.
ResultSetOrientation
orientation
=
SQLEditor
.
ResultSetOrientation
.
valueOf
(
DBWorkbench
.
getPlatform
().
getPreferenceStore
().
getString
(
SQLPreferenceConstants
.
RESULT_SET_ORIENTATION
));
...
...
@@ -185,10 +165,6 @@ public class PrefPageSQLEditor extends TargetPrefPage
store
.
setValue
(
SQLPreferenceConstants
.
AUTO_SAVE_ON_CLOSE
,
autoSaveOnClose
.
getSelection
());
store
.
setValue
(
SQLPreferenceConstants
.
AUTO_SAVE_ON_EXECUTE
,
saveOnQueryExecution
.
getSelection
());
store
.
setValue
(
SQLPreferenceConstants
.
FOLDING_ENABLED
,
csFoldingEnabled
.
getSelection
());
store
.
setValue
(
SQLPreferenceConstants
.
MARK_OCCURRENCES_UNDER_CURSOR
,
csMarkOccurrencesUnderCursor
.
getSelection
());
store
.
setValue
(
SQLPreferenceConstants
.
MARK_OCCURRENCES_FOR_SELECTION
,
csMarkOccurrencesForSelection
.
getSelection
());
store
.
setValue
(
SQLPreferenceConstants
.
RESULT_SET_CLOSE_ON_ERROR
,
closeTabOnErrorCheck
.
getSelection
());
String
orientationLabel
=
resultsOrientationCombo
.
getText
();
for
(
SQLEditor
.
ResultSetOrientation
orientation
:
SQLEditor
.
ResultSetOrientation
.
values
())
{
...
...
@@ -214,10 +190,6 @@ public class PrefPageSQLEditor extends TargetPrefPage
store
.
setToDefault
(
SQLPreferenceConstants
.
AUTO_SAVE_ON_CLOSE
);
store
.
setToDefault
(
SQLPreferenceConstants
.
AUTO_SAVE_ON_EXECUTE
);
store
.
setToDefault
(
SQLPreferenceConstants
.
FOLDING_ENABLED
);
store
.
setToDefault
(
SQLPreferenceConstants
.
MARK_OCCURRENCES_UNDER_CURSOR
);
store
.
setToDefault
(
SQLPreferenceConstants
.
MARK_OCCURRENCES_FOR_SELECTION
);
store
.
setToDefault
(
SQLPreferenceConstants
.
RESULT_SET_CLOSE_ON_ERROR
);
DBWorkbench
.
getPlatform
().
getPreferenceStore
().
setToDefault
(
SQLPreferenceConstants
.
RESULT_SET_ORIENTATION
);
}
...
...
test/org.jkiss.dbeaver.ext.postgresql.test/src/org/jkiss/dbeaver/ext/postgresql/PostgreValueParserTest.java
浏览文件 @
ff019900
...
...
@@ -16,9 +16,13 @@
*/
package
org.jkiss.dbeaver.ext.postgresql
;
import
org.jkiss.dbeaver.ext.postgresql.model.PostgreDataSource
;
import
org.jkiss.dbeaver.ext.postgresql.model.PostgreDataType
;
import
org.jkiss.dbeaver.ext.postgresql.model.PostgreDialect
;
import
org.jkiss.dbeaver.ext.postgresql.model.data.PostgreArrayValueHandler
;
import
org.jkiss.dbeaver.model.DBPDataKind
;
import
org.jkiss.dbeaver.model.data.DBDDataFormatter
;
import
org.jkiss.dbeaver.model.data.DBDDisplayFormat
;
import
org.jkiss.dbeaver.model.data.DBDFormatSettings
;
import
org.jkiss.dbeaver.model.exec.DBCException
;
import
org.jkiss.dbeaver.model.exec.DBCSession
;
...
...
@@ -44,41 +48,35 @@ import java.util.Locale;
@RunWith
(
MockitoJUnitRunner
.
class
)
public
class
PostgreValueParserTest
{
private
final
PostgreDialect
sqlDialect
=
new
PostgreDialect
();
@Mock
private
PostgreDataSource
dataSource
;
@Mock
private
DBCSession
session
;
@Mock
private
PostgreDataType
arrayDoubleItemType
;
@Mock
private
PostgreDataType
arrayIntItemType
;
@Mock
private
PostgreDataType
arrayStringItemType
;
@Mock
private
PostgreDataType
arrayBooleanItemType
;
@Mock
private
PostgreDataType
arrayStructItemType
;
@Mock
private
PostgreDataType
stringItemType
;
@Mock
private
PostgreDataType
intItemType
;
@Mock
private
PostgreDataType
booleanItemType
;
@Mock
private
PostgreDataType
doubleItemType
;
@Mock
private
PostgreDataType
structItemType
;
private
NumberDataFormatter
numberDataFormatter
=
new
NumberDataFormatter
();
@Mock
private
DataFormatterProfile
dataFormatterProfile
=
new
DataFormatterProfile
(
"test_profile"
,
new
TestPreferenceStore
());
...
...
@@ -168,6 +166,20 @@ public class PostgreValueParserTest {
PostgreValueParser
.
generateObjectString
(
new
Object
[]{
new
Double
[][]{{
1.1
,
2.22
,
3.333
},{
1.1
,
2.22
,
3.333
}},
"qwerty"
}));
}
@Test
public
void
convertArrayToString
()
{
PostgreArrayValueHandler
arrayVH
=
new
PostgreArrayValueHandler
();
String
[]
stringItems
=
new
String
[]
{
"one"
,
"two"
,
" four with spaces "
,
"f{i,v}e"
};
JDBCCollection
array
=
new
JDBCCollection
(
stringItemType
,
arrayVH
,
stringItems
);
JDBCCollection
array3D
=
new
JDBCCollection
(
stringItemType
,
arrayVH
,
new
Object
[]
{
array
,
array
}
);
String
arrayString
=
arrayVH
.
getValueDisplayString
(
arrayStringItemType
,
array
,
DBDDisplayFormat
.
NATIVE
);
Assert
.
assertEquals
(
"'{\"one\",\"two\",\" four with spaces \",\"f{i,v}e\"}'"
,
arrayString
);
String
arrayString3D
=
arrayVH
.
getValueDisplayString
(
arrayStringItemType
,
array3D
,
DBDDisplayFormat
.
NATIVE
);
Assert
.
assertEquals
(
"'{{\"one\",\"two\",\" four with spaces \",\"f{i,v}e\"},{\"one\",\"two\",\" four with spaces \",\"f{i,v}e\"}}'"
,
arrayString3D
);
}
@Test
public
void
parseArrayString
()
{
List
<
String
>
stringList
=
new
ArrayList
<>();
...
...
@@ -212,6 +224,7 @@ public class PostgreValueParserTest {
}
private
void
setupGeneralWhenMocks
()
throws
Exception
{
Mockito
.
when
(
dataSource
.
getSQLDialect
()).
thenReturn
(
sqlDialect
);
Mockito
.
when
(
session
.
getProgressMonitor
()).
thenReturn
(
new
VoidProgressMonitor
());
Mockito
.
when
(
intItemType
.
getFullTypeName
()).
thenReturn
(
"test_intItemType"
);
...
...
@@ -233,6 +246,7 @@ public class PostgreValueParserTest {
Mockito
.
when
(
stringItemType
.
getFullTypeName
()).
thenReturn
(
"test_stringItemType"
);
Mockito
.
when
(
stringItemType
.
getDataKind
()).
thenReturn
(
DBPDataKind
.
STRING
);
Mockito
.
when
(
stringItemType
.
getTypeID
()).
thenReturn
(
Types
.
VARCHAR
);
Mockito
.
when
(
stringItemType
.
getDataSource
()).
thenReturn
(
dataSource
);
Mockito
.
when
(
arrayStringItemType
.
getFullTypeName
()).
thenReturn
(
"test_arrayStringItemType"
);
Mockito
.
when
(
arrayStringItemType
.
getDataKind
()).
thenReturn
(
DBPDataKind
.
ARRAY
);
...
...
test/org.jkiss.dbeaver.test.platform/META-INF/MANIFEST.MF
浏览文件 @
ff019900
...
...
@@ -10,6 +10,7 @@ Require-Bundle: org.eclipse.core.runtime,
org.mockito.mockito-all,
org.jkiss.dbeaver.model,
org.jkiss.dbeaver.model.sql,
org.jkiss.dbeaver.data.transfer,
org.jkiss.dbeaver.registry,
org.jkiss.dbeaver.headless,
org.jkiss.dbeaver.ext.postgresql,
...
...
test/org.jkiss.dbeaver.test.platform/src/org/jkiss/dbeaver/data/transfer/StreamTransferUtilsTest.java
0 → 100644
浏览文件 @
ff019900
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2020 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jkiss.dbeaver.data.transfer
;
import
org.jkiss.dbeaver.tools.transfer.stream.StreamTransferUtils
;
import
org.junit.Assert
;
import
org.junit.Test
;
import
java.util.HashMap
;
import
java.util.Map
;
public
class
StreamTransferUtilsTest
{
@Test
public
void
testDelimiterString
()
{
Map
<
String
,
Object
>
props
=
new
HashMap
<>();
props
.
put
(
"delimiter"
,
" \\t\\n\\r"
);
Assert
.
assertEquals
(
" \t\n\r"
,
StreamTransferUtils
.
getDelimiterString
(
props
,
"delimiter"
));
props
.
put
(
"delimiter"
,
""
);
Assert
.
assertEquals
(
","
,
StreamTransferUtils
.
getDelimiterString
(
props
,
"delimiter"
));
props
.
put
(
"delimiter"
,
null
);
Assert
.
assertEquals
(
","
,
StreamTransferUtils
.
getDelimiterString
(
props
,
"delimiter"
));
}
}
test/org.jkiss.dbeaver.test.platform/src/org/jkiss/dbeaver/tools/transfer/CSVImporterTest.java
0 → 100644
浏览文件 @
ff019900
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2020 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jkiss.dbeaver.tools.transfer
;
import
org.jkiss.dbeaver.DBException
;
import
org.jkiss.dbeaver.model.DBPDataKind
;
import
org.jkiss.dbeaver.tools.transfer.stream.IStreamDataImporterSite
;
import
org.jkiss.dbeaver.tools.transfer.stream.StreamDataImporterColumnInfo
;
import
org.jkiss.dbeaver.tools.transfer.stream.StreamEntityMapping
;
import
org.jkiss.dbeaver.tools.transfer.stream.importer.DataImporterCSV
;
import
org.junit.Assert
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.mockito.Mock
;
import
org.mockito.Mockito
;
import
org.mockito.runners.MockitoJUnitRunner
;
import
java.io.ByteArrayInputStream
;
import
java.io.File
;
import
java.io.IOException
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
@RunWith
(
MockitoJUnitRunner
.
class
)
public
class
CSVImporterTest
{
private
static
final
File
DUMMY_FILE
=
new
File
(
"dummy"
);
private
final
DataImporterCSV
importer
=
new
DataImporterCSV
();
private
final
StreamEntityMapping
mapping
=
new
StreamEntityMapping
(
DUMMY_FILE
);
private
final
Map
<
String
,
Object
>
properties
=
new
HashMap
<>();
@Mock
private
IStreamDataImporterSite
site
;
@Before
public
void
init
()
throws
DBException
{
importer
.
init
(
site
);
Mockito
.
when
(
site
.
getProcessorProperties
()).
thenReturn
(
properties
);
}
@Test
public
void
generateColumnNames
()
throws
DBException
,
IOException
{
List
<
StreamDataImporterColumnInfo
>
columnsInfo
=
readColumnsInfo
(
"a,b,c,d"
,
false
);
Assert
.
assertEquals
(
4
,
columnsInfo
.
size
());
Assert
.
assertEquals
(
"Column1"
,
columnsInfo
.
get
(
0
).
getName
());
Assert
.
assertEquals
(
"Column2"
,
columnsInfo
.
get
(
1
).
getName
());
Assert
.
assertEquals
(
"Column3"
,
columnsInfo
.
get
(
2
).
getName
());
Assert
.
assertEquals
(
"Column4"
,
columnsInfo
.
get
(
3
).
getName
());
}
@Test
public
void
readColumnNames
()
throws
DBException
,
IOException
{
List
<
StreamDataImporterColumnInfo
>
columnsInfo
=
readColumnsInfo
(
"a,b,c,d"
,
true
);
Assert
.
assertEquals
(
4
,
columnsInfo
.
size
());
Assert
.
assertEquals
(
"a"
,
columnsInfo
.
get
(
0
).
getName
());
Assert
.
assertEquals
(
"b"
,
columnsInfo
.
get
(
1
).
getName
());
Assert
.
assertEquals
(
"c"
,
columnsInfo
.
get
(
2
).
getName
());
Assert
.
assertEquals
(
"d"
,
columnsInfo
.
get
(
3
).
getName
());
}
@Test
public
void
guessColumnTypes
()
throws
DBException
,
IOException
{
List
<
StreamDataImporterColumnInfo
>
columnsInfo
=
readColumnsInfo
(
"1,2.0,abc,false"
,
false
);
Assert
.
assertEquals
(
4
,
columnsInfo
.
size
());
Assert
.
assertEquals
(
DBPDataKind
.
NUMERIC
,
columnsInfo
.
get
(
0
).
getDataKind
());
Assert
.
assertEquals
(
"INTEGER"
,
columnsInfo
.
get
(
0
).
getTypeName
());
Assert
.
assertEquals
(
DBPDataKind
.
NUMERIC
,
columnsInfo
.
get
(
1
).
getDataKind
());
Assert
.
assertEquals
(
"REAL"
,
columnsInfo
.
get
(
1
).
getTypeName
());
Assert
.
assertEquals
(
DBPDataKind
.
STRING
,
columnsInfo
.
get
(
2
).
getDataKind
());
Assert
.
assertEquals
(
DBPDataKind
.
BOOLEAN
,
columnsInfo
.
get
(
3
).
getDataKind
());
}
@Test
public
void
guessColumnTypesOverSamples
()
throws
DBException
,
IOException
{
List
<
StreamDataImporterColumnInfo
>
columnsInfo
=
readColumnsInfo
(
"1\n\n2\n3\ntest"
,
false
);
Assert
.
assertEquals
(
1
,
columnsInfo
.
size
());
Assert
.
assertEquals
(
DBPDataKind
.
STRING
,
columnsInfo
.
get
(
0
).
getDataKind
());
}
@Test
public
void
guessColumnTypesDefault
()
throws
DBException
,
IOException
{
List
<
StreamDataImporterColumnInfo
>
columnsInfo
=
readColumnsInfo
(
","
,
false
);
Assert
.
assertEquals
(
2
,
columnsInfo
.
size
());
Assert
.
assertEquals
(
DBPDataKind
.
STRING
,
columnsInfo
.
get
(
0
).
getDataKind
());
Assert
.
assertEquals
(
DBPDataKind
.
STRING
,
columnsInfo
.
get
(
1
).
getDataKind
());
}
private
List
<
StreamDataImporterColumnInfo
>
readColumnsInfo
(
String
data
,
boolean
isHeaderPresent
)
throws
DBException
,
IOException
{
properties
.
put
(
"header"
,
isHeaderPresent
?
DataImporterCSV
.
HeaderPosition
.
top
:
DataImporterCSV
.
HeaderPosition
.
none
);
try
(
ByteArrayInputStream
is
=
new
ByteArrayInputStream
(
data
.
getBytes
()))
{
return
importer
.
readColumnsInfo
(
mapping
,
is
);
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录