Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
suliangchun
dbeaver
提交
f5841dd9
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,发现更多精彩内容 >>
提交
f5841dd9
编写于
1月 17, 2018
作者:
A
Alexander Fedorov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
#2556 configure procedure call
上级
18fa0bc7
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
227 addition
and
147 deletion
+227
-147
plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/DBGBaseController.java
...g.core/src/org/jkiss/dbeaver/debug/DBGBaseController.java
+37
-0
plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/DBGController.java
...debug.core/src/org/jkiss/dbeaver/debug/DBGController.java
+3
-0
plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/core/DatabaseLaunchDelegate.java
.../org/jkiss/dbeaver/debug/core/DatabaseLaunchDelegate.java
+5
-6
plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/core/DebugCore.java
...ebug.core/src/org/jkiss/dbeaver/debug/core/DebugCore.java
+71
-11
plugins/org.jkiss.dbeaver.debug.ui/src/org/jkiss/dbeaver/debug/internal/ui/DebugUIMessages.java
.../org/jkiss/dbeaver/debug/internal/ui/DebugUIMessages.java
+8
-2
plugins/org.jkiss.dbeaver.debug.ui/src/org/jkiss/dbeaver/debug/internal/ui/DebugUIMessages.properties
...kiss/dbeaver/debug/internal/ui/DebugUIMessages.properties
+8
-2
plugins/org.jkiss.dbeaver.debug.ui/src/org/jkiss/dbeaver/debug/ui/DatabaseTab.java
....debug.ui/src/org/jkiss/dbeaver/debug/ui/DatabaseTab.java
+75
-23
plugins/org.jkiss.dbeaver.ext.postgresql.debug.core/src/org/jkiss/dbeaver/ext/postgresql/debug/core/PostgreSqlDebugCore.java
...beaver/ext/postgresql/debug/core/PostgreSqlDebugCore.java
+10
-6
plugins/org.jkiss.dbeaver.ext.postgresql.debug.core/src/org/jkiss/dbeaver/ext/postgresql/debug/internal/impl/PostgreDebugController.java
...ostgresql/debug/internal/impl/PostgreDebugController.java
+2
-95
plugins/org.jkiss.dbeaver.ext.postgresql.debug.ui/src/org/jkiss/dbeaver/ext/postgresql/debug/ui/internal/PgSqlLaunchShortcut.java
...ext/postgresql/debug/ui/internal/PgSqlLaunchShortcut.java
+8
-2
未找到文件。
plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/DBGBaseController.java
浏览文件 @
f5841dd9
...
...
@@ -23,15 +23,26 @@ import java.util.HashMap;
import
java.util.List
;
import
java.util.Map
;
import
org.eclipse.core.runtime.IProgressMonitor
;
import
org.eclipse.core.runtime.IStatus
;
import
org.eclipse.core.runtime.ListenerList
;
import
org.eclipse.core.runtime.Status
;
import
org.eclipse.core.runtime.jobs.Job
;
import
org.eclipse.osgi.util.NLS
;
import
org.jkiss.dbeaver.DBException
;
import
org.jkiss.dbeaver.Log
;
import
org.jkiss.dbeaver.debug.core.DebugCore
;
import
org.jkiss.dbeaver.debug.internal.DebugMessages
;
import
org.jkiss.dbeaver.model.DBPDataSource
;
import
org.jkiss.dbeaver.model.DBPDataSourceContainer
;
import
org.jkiss.dbeaver.model.DBUtils
;
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.exec.DBCStatement
;
import
org.jkiss.dbeaver.model.exec.DBCStatementType
;
import
org.jkiss.dbeaver.model.runtime.DBRProgressMonitor
;
import
org.jkiss.dbeaver.model.runtime.VoidProgressMonitor
;
public
abstract
class
DBGBaseController
implements
DBGController
{
...
...
@@ -203,4 +214,30 @@ public abstract class DBGBaseController implements DBGController {
}
}
protected
void
executeProcedure
(
DBPDataSource
dataSource
,
Map
<
String
,
Object
>
configuration
,
DBRProgressMonitor
monitor
)
throws
DBException
{
String
procedureName
=
String
.
valueOf
(
configuration
.
get
(
PROCEDURE_NAME
));
String
call
=
String
.
valueOf
(
configuration
.
get
(
PROCEDURE_CALL
));
String
taskName
=
NLS
.
bind
(
"Execute procedure {0}"
,
procedureName
);
Job
job
=
new
Job
(
taskName
)
{
@Override
protected
IStatus
run
(
IProgressMonitor
monitor
)
{
try
{
try
(
final
DBCSession
execSession
=
DBUtils
.
openUtilSession
(
new
VoidProgressMonitor
(),
dataSource
,
taskName
))
{
try
(
final
DBCStatement
dbStat
=
execSession
.
prepareStatement
(
DBCStatementType
.
EXEC
,
call
,
true
,
false
,
false
))
{
dbStat
.
executeStatement
();
}
}
}
catch
(
DBCException
e
)
{
log
.
error
(
taskName
,
e
);
return
DebugCore
.
newErrorStatus
(
taskName
,
e
);
}
return
Status
.
OK_STATUS
;
}
};
job
.
schedule
();
}
}
plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/DBGController.java
浏览文件 @
f5841dd9
...
...
@@ -29,8 +29,11 @@ import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
public
interface
DBGController
{
public
static
final
String
DATABASE_NAME
=
"databaseName"
;
//$NON-NLS-1$
public
static
final
String
SCHEMA_NAME
=
"schemaName"
;
//$NON-NLS-1$
public
static
final
String
PROCEDURE_OID
=
"procedureOID"
;
//$NON-NLS-1$
public
static
final
String
PROCESS_ID
=
"processID"
;
//$NON-NLS-1$
public
static
final
String
PROCEDURE_NAME
=
"procedureName"
;
//$NON-NLS-1$
public
static
final
String
PROCEDURE_CALL
=
"procedureCall"
;
//$NON-NLS-1$
/*
* General lifecycle
...
...
plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/core/DatabaseLaunchDelegate.java
浏览文件 @
f5841dd9
...
...
@@ -59,17 +59,16 @@ public abstract class DatabaseLaunchDelegate extends LaunchConfigurationDelegate
protected
Map
<
String
,
Object
>
extractAttributes
(
ILaunchConfiguration
configuration
)
throws
CoreException
{
Map
<
String
,
Object
>
attributes
=
new
HashMap
<>();
String
databaseName
=
DebugCore
.
extractDatabaseName
(
configuration
);
attributes
.
put
(
DBGController
.
DATABASE_NAME
,
databaseName
);
String
oid
=
DebugCore
.
extractStringAttribute
(
configuration
,
DebugCore
.
ATTR_OID
,
DebugCore
.
ATTR_OID_DEFAULT
);
attributes
.
put
(
DBGController
.
PROCEDURE_OID
,
oid
);
attributes
.
put
(
DBGController
.
DATABASE_NAME
,
DebugCore
.
extractDatabaseName
(
configuration
));
attributes
.
put
(
DBGController
.
SCHEMA_NAME
,
DebugCore
.
extractSchemaName
(
configuration
));
attributes
.
put
(
DBGController
.
PROCEDURE_OID
,
DebugCore
.
extractProcedureOid
(
configuration
));
attributes
.
put
(
DBGController
.
PROCEDURE_NAME
,
DebugCore
.
extractProcedureName
(
configuration
));
attributes
.
put
(
DBGController
.
PROCEDURE_CALL
,
DebugCore
.
extractProcedureCall
(
configuration
));
//FIXME:AF:extract from launch configuration
//FIXME -1 - target PID (-1 for ANY PID)
attributes
.
put
(
DBGController
.
PROCESS_ID
,
-
1
);
//Well, put it all for now
attributes
.
putAll
(
configuration
.
getAttributes
());
//FIXME:AF:and little hack until we implemented the parameter storage during launch config creation
attributes
.
put
(
"tabname"
,
"pg_class"
);
return
attributes
;
}
...
...
plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/core/DebugCore.java
浏览文件 @
f5841dd9
...
...
@@ -18,6 +18,7 @@
package
org.jkiss.dbeaver.debug.core
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.List
;
import
org.eclipse.core.resources.IContainer
;
...
...
@@ -31,12 +32,17 @@ import org.eclipse.debug.core.ILaunchConfigurationType;
import
org.eclipse.debug.core.ILaunchConfigurationWorkingCopy
;
import
org.eclipse.debug.core.ILaunchManager
;
import
org.eclipse.osgi.util.NLS
;
import
org.jkiss.dbeaver.DBException
;
import
org.jkiss.dbeaver.Log
;
import
org.jkiss.dbeaver.debug.DBGController
;
import
org.jkiss.dbeaver.debug.DBGException
;
import
org.jkiss.dbeaver.debug.internal.core.DebugCoreMessages
;
import
org.jkiss.dbeaver.model.DBPDataSourceContainer
;
import
org.jkiss.dbeaver.model.runtime.DBRProgressMonitor
;
import
org.jkiss.dbeaver.model.runtime.VoidProgressMonitor
;
import
org.jkiss.dbeaver.model.struct.DBSObject
;
import
org.jkiss.dbeaver.model.struct.rdb.DBSProcedure
;
import
org.jkiss.dbeaver.model.struct.rdb.DBSProcedureParameter
;
public
class
DebugCore
{
...
...
@@ -49,17 +55,26 @@ public class DebugCore {
public
static
final
String
BREAKPOINT_DATABASE
=
BUNDLE_SYMBOLIC_NAME
+
'.'
+
"databaseBreakpointMarker"
;
//$NON-NLS-1$
public
static
final
String
BREAKPOINT_DATABASE_LINE
=
BUNDLE_SYMBOLIC_NAME
+
'.'
+
"databaseLineBreakpointMarker"
;
//$NON-NLS-1$
public
static
final
String
ATTR_DRIVER
=
BUNDLE_SYMBOLIC_NAME
+
'.'
+
"ATTR_DRIVER
"
;
//$NON-NLS-1$
public
static
final
String
ATTR_DRIVER_DEFAULT
=
""
;
//$NON-NLS-1$
public
static
final
String
ATTR_DRIVER
_ID
=
BUNDLE_SYMBOLIC_NAME
+
'.'
+
"ATTR_DRIVER_ID
"
;
//$NON-NLS-1$
public
static
final
String
ATTR_DRIVER_
ID_
DEFAULT
=
""
;
//$NON-NLS-1$
public
static
final
String
ATTR_DATASOURCE
=
BUNDLE_SYMBOLIC_NAME
+
'.'
+
"ATTR_DATASOURCE
"
;
//$NON-NLS-1$
public
static
final
String
ATTR_DATASOURCE_DEFAULT
=
""
;
//$NON-NLS-1$
public
static
final
String
ATTR_DATASOURCE
_ID
=
BUNDLE_SYMBOLIC_NAME
+
'.'
+
"ATTR_DATASOURCE_ID
"
;
//$NON-NLS-1$
public
static
final
String
ATTR_DATASOURCE_
ID_
DEFAULT
=
""
;
//$NON-NLS-1$
public
static
final
String
ATTR_DATABASE
=
BUNDLE_SYMBOLIC_NAME
+
'.'
+
"ATTR_DATABAS
E"
;
//$NON-NLS-1$
public
static
final
String
ATTR_DATABASE_DEFAULT
=
""
;
//$NON-NLS-1$
public
static
final
String
ATTR_DATABASE
_NAME
=
BUNDLE_SYMBOLIC_NAME
+
'.'
+
"ATTR_DATABASE_NAM
E"
;
//$NON-NLS-1$
public
static
final
String
ATTR_DATABASE_
NAME_
DEFAULT
=
""
;
//$NON-NLS-1$
public
static
final
String
ATTR_OID
=
BUNDLE_SYMBOLIC_NAME
+
'.'
+
"ATTR_OID"
;
//$NON-NLS-1$
public
static
final
String
ATTR_OID_DEFAULT
=
""
;
//$NON-NLS-1$
public
static
final
String
ATTR_SCHEMA_NAME
=
BUNDLE_SYMBOLIC_NAME
+
'.'
+
"ATTR_SCHEMA_NAME"
;
//$NON-NLS-1$
public
static
final
String
ATTR_SCHEMA_NAME_DEFAULT
=
""
;
//$NON-NLS-1$
public
static
final
String
ATTR_PROCEDURE_OID
=
BUNDLE_SYMBOLIC_NAME
+
'.'
+
"ATTR_PROCEDURE_OID"
;
//$NON-NLS-1$
public
static
final
String
ATTR_PROCEDURE_OID_DEFAULT
=
""
;
//$NON-NLS-1$
public
static
final
String
ATTR_PROCEDURE_NAME
=
BUNDLE_SYMBOLIC_NAME
+
'.'
+
"ATTR_PROCEDURE_NAME"
;
//$NON-NLS-1$
public
static
final
String
ATTR_PROCEDURE_NAME_DEFAULT
=
""
;
//$NON-NLS-1$
public
static
final
String
ATTR_PROCEDURE_CALL
=
BUNDLE_SYMBOLIC_NAME
+
'.'
+
"ATTR_PROCEDURE_CALL"
;
//$NON-NLS-1$
public
static
final
String
ATTR_PROCEDURE_CALL_DEFAULT
=
""
;
//$NON-NLS-1$
private
static
Log
log
=
Log
.
getLog
(
DebugCore
.
class
);
...
...
@@ -75,6 +90,35 @@ public class DebugCore {
return
abort
(
message
,
null
);
}
public
static
String
composeProcedureCall
(
DBSProcedure
procedure
,
DBRProgressMonitor
monitor
)
throws
DBException
{
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
"select"
).
append
(
' '
).
append
(
procedure
.
getName
());
sb
.
append
(
'('
);
Collection
<?
extends
DBSProcedureParameter
>
parameters
=
procedure
.
getParameters
(
monitor
);
int
size
=
parameters
.
size
();
if
(
size
>
0
)
{
for
(
int
i
=
0
;
i
<
size
;
i
++)
{
Object
value
=
'?'
;
sb
.
append
(
value
);
sb
.
append
(
','
);
}
sb
.
deleteCharAt
(
sb
.
length
()-
1
);
}
sb
.
append
(
')'
);
String
call
=
sb
.
toString
();
return
call
;
}
public
static
String
composeProcedureCall
(
DBSProcedure
procedure
)
{
try
{
return
composeProcedureCall
(
procedure
,
new
VoidProgressMonitor
());
}
catch
(
DBException
e
)
{
String
message
=
NLS
.
bind
(
"Failed to compose call for {0}"
,
procedure
);
log
.
error
(
message
,
e
);
return
ATTR_PROCEDURE_CALL_DEFAULT
;
}
}
public
static
ILaunchConfigurationWorkingCopy
createConfiguration
(
IContainer
container
,
String
typeName
,
String
name
)
throws
CoreException
{
ILaunchManager
manager
=
DebugPlugin
.
getDefault
().
getLaunchManager
();
...
...
@@ -112,15 +156,31 @@ public class DebugCore {
}
public
static
String
extractDriverId
(
ILaunchConfiguration
configuration
)
{
return
extractStringAttribute
(
configuration
,
ATTR_DRIVER
,
ATTR_DRIVER
_DEFAULT
);
return
extractStringAttribute
(
configuration
,
ATTR_DRIVER
_ID
,
ATTR_DRIVER_ID
_DEFAULT
);
}
public
static
String
extractDatasourceId
(
ILaunchConfiguration
configuration
)
{
return
extractStringAttribute
(
configuration
,
ATTR_DATASOURCE
,
ATTR_DATASOURCE
_DEFAULT
);
return
extractStringAttribute
(
configuration
,
ATTR_DATASOURCE
_ID
,
ATTR_DATASOURCE_ID
_DEFAULT
);
}
public
static
String
extractDatabaseName
(
ILaunchConfiguration
configuration
)
{
return
extractStringAttribute
(
configuration
,
ATTR_DATABASE
,
ATTR_DATABASE_DEFAULT
);
return
extractStringAttribute
(
configuration
,
ATTR_DATABASE_NAME
,
ATTR_DATABASE_NAME_DEFAULT
);
}
public
static
String
extractSchemaName
(
ILaunchConfiguration
configuration
)
{
return
extractStringAttribute
(
configuration
,
ATTR_SCHEMA_NAME
,
ATTR_SCHEMA_NAME_DEFAULT
);
}
public
static
String
extractProcedureOid
(
ILaunchConfiguration
configuration
)
{
return
extractStringAttribute
(
configuration
,
ATTR_PROCEDURE_OID
,
ATTR_PROCEDURE_OID_DEFAULT
);
}
public
static
String
extractProcedureName
(
ILaunchConfiguration
configuration
)
{
return
extractStringAttribute
(
configuration
,
ATTR_PROCEDURE_NAME
,
ATTR_PROCEDURE_NAME_DEFAULT
);
}
public
static
String
extractProcedureCall
(
ILaunchConfiguration
configuration
)
{
return
extractStringAttribute
(
configuration
,
ATTR_PROCEDURE_CALL
,
ATTR_PROCEDURE_CALL_DEFAULT
);
}
public
static
String
extractStringAttribute
(
ILaunchConfiguration
configuration
,
String
attributeName
,
...
...
plugins/org.jkiss.dbeaver.debug.ui/src/org/jkiss/dbeaver/debug/internal/ui/DebugUIMessages.java
浏览文件 @
f5841dd9
...
...
@@ -28,12 +28,18 @@ public class DebugUIMessages extends NLS {
public
static
String
DatabaseTab_driver_group_text
;
public
static
String
DatabaseTab_driver_label_text
;
public
static
String
DatabaseTab_database_group_text
;
public
static
String
DatabaseTab_database_label_text
;
public
static
String
DatabaseTab_datasource_group_text
;
public
static
String
DatabaseTab_datasource_label_text
;
public
static
String
DatabaseTab_database_group_text
;
public
static
String
DatabaseTab_database_label_text
;
public
static
String
DatabaseTab_schema_group_text
;
public
static
String
DatabaseTab_schema_label_text
;
public
static
String
DatabaseTab_oid_group_text
;
public
static
String
DatabaseTab_oid_label_text
;
public
static
String
DatabaseTab_name_group_text
;
public
static
String
DatabaseTab_name_label_text
;
public
static
String
DatabaseTab_call_group_text
;
public
static
String
DatabaseTab_call_label_text
;
public
static
String
DatabaseTab_name
;
...
...
plugins/org.jkiss.dbeaver.debug.ui/src/org/jkiss/dbeaver/debug/internal/ui/DebugUIMessages.properties
浏览文件 @
f5841dd9
...
...
@@ -19,12 +19,18 @@ DatabaseStandardBreakpointPane_description=Breakpoint settings
DatabaseTab_driver_group_text
=
Driver
DatabaseTab_driver_label_text
=
Driver
DatabaseTab_database_group_text
=
Database
DatabaseTab_database_label_text
=
Database
DatabaseTab_datasource_group_text
=
Connection
DatabaseTab_datasource_label_text
=
Connection
DatabaseTab_database_group_text
=
Database
DatabaseTab_database_label_text
=
Database
DatabaseTab_schema_group_text
=
Schema
DatabaseTab_schema_label_text
=
Schema
DatabaseTab_oid_group_text
=
OID
DatabaseTab_oid_label_text
=
OID
DatabaseTab_name_group_text
=
Name
DatabaseTab_name_label_text
=
Name
DatabaseTab_call_group_text
=
Call
DatabaseTab_call_label_text
=
Call
DatabaseTab_name
=
&Main
...
...
plugins/org.jkiss.dbeaver.debug.ui/src/org/jkiss/dbeaver/debug/ui/DatabaseTab.java
浏览文件 @
f5841dd9
...
...
@@ -17,7 +17,6 @@
*/
package
org.jkiss.dbeaver.debug.ui
;
import
org.eclipse.core.runtime.CoreException
;
import
org.eclipse.debug.core.ILaunchConfiguration
;
import
org.eclipse.debug.core.ILaunchConfigurationWorkingCopy
;
import
org.eclipse.debug.ui.AbstractLaunchConfigurationTab
;
...
...
@@ -45,7 +44,10 @@ public class DatabaseTab extends AbstractLaunchConfigurationTab {
private
Text
driverText
;
private
Text
datasourceText
;
private
Text
databaseText
;
private
Text
schemaText
;
private
Text
oidText
;
private
Text
nameText
;
private
Text
callText
;
/**
* Modify listener that simply updates the owning launch configuration
...
...
@@ -76,7 +78,10 @@ public class DatabaseTab extends AbstractLaunchConfigurationTab {
createDriverComponent
(
comp
);
createDatasourceComponent
(
comp
);
createDatabaseComponent
(
comp
);
createSchemaComponent
(
comp
);
createOidComponent
(
comp
);
createNameComponent
(
comp
);
createCallComponent
(
comp
);
}
protected
void
createDriverComponent
(
Composite
comp
)
...
...
@@ -84,7 +89,7 @@ public class DatabaseTab extends AbstractLaunchConfigurationTab {
Group
driverGroup
=
UIUtils
.
createControlGroup
(
comp
,
DebugUIMessages
.
DatabaseTab_driver_group_text
,
2
,
GridData
.
FILL_HORIZONTAL
,
SWT
.
DEFAULT
);
driverText
=
UIUtils
.
createLabelText
(
driverGroup
,
DebugUIMessages
.
DatabaseTab_driver_label_text
,
DebugCore
.
ATTR_DRIVER_DEFAULT
);
driverText
=
UIUtils
.
createLabelText
(
driverGroup
,
DebugUIMessages
.
DatabaseTab_driver_label_text
,
DebugCore
.
ATTR_DRIVER_
ID_
DEFAULT
);
driverText
.
setLayoutData
(
new
GridData
(
GridData
.
FILL_HORIZONTAL
));
driverText
.
addModifyListener
(
modifyListener
);
driverText
.
setEditable
(
false
);
...
...
@@ -95,7 +100,7 @@ public class DatabaseTab extends AbstractLaunchConfigurationTab {
Group
datasourceGroup
=
UIUtils
.
createControlGroup
(
comp
,
DebugUIMessages
.
DatabaseTab_datasource_group_text
,
2
,
GridData
.
FILL_HORIZONTAL
,
SWT
.
DEFAULT
);
datasourceText
=
UIUtils
.
createLabelText
(
datasourceGroup
,
DebugUIMessages
.
DatabaseTab_datasource_label_text
,
DebugCore
.
ATTR_DATASOURCE_DEFAULT
);
datasourceText
=
UIUtils
.
createLabelText
(
datasourceGroup
,
DebugUIMessages
.
DatabaseTab_datasource_label_text
,
DebugCore
.
ATTR_DATASOURCE_
ID_
DEFAULT
);
datasourceText
.
setLayoutData
(
new
GridData
(
GridData
.
FILL_HORIZONTAL
));
datasourceText
.
addModifyListener
(
modifyListener
);
datasourceText
.
setEditable
(
false
);
...
...
@@ -105,27 +110,57 @@ public class DatabaseTab extends AbstractLaunchConfigurationTab {
{
Group
databaseGroup
=
UIUtils
.
createControlGroup
(
comp
,
DebugUIMessages
.
DatabaseTab_database_group_text
,
2
,
GridData
.
FILL_HORIZONTAL
,
SWT
.
DEFAULT
);
databaseText
=
UIUtils
.
createLabelText
(
databaseGroup
,
DebugUIMessages
.
DatabaseTab_database_label_text
,
DebugCore
.
ATTR_DATABASE_DEFAULT
);
databaseText
=
UIUtils
.
createLabelText
(
databaseGroup
,
DebugUIMessages
.
DatabaseTab_database_label_text
,
DebugCore
.
ATTR_DATABASE_
NAME_
DEFAULT
);
databaseText
.
setLayoutData
(
new
GridData
(
GridData
.
FILL_HORIZONTAL
));
databaseText
.
addModifyListener
(
modifyListener
);
}
protected
void
createSchemaComponent
(
Composite
comp
)
{
Group
databaseGroup
=
UIUtils
.
createControlGroup
(
comp
,
DebugUIMessages
.
DatabaseTab_schema_group_text
,
2
,
GridData
.
FILL_HORIZONTAL
,
SWT
.
DEFAULT
);
schemaText
=
UIUtils
.
createLabelText
(
databaseGroup
,
DebugUIMessages
.
DatabaseTab_schema_label_text
,
DebugCore
.
ATTR_SCHEMA_NAME_DEFAULT
);
schemaText
.
setLayoutData
(
new
GridData
(
GridData
.
FILL_HORIZONTAL
));
schemaText
.
addModifyListener
(
modifyListener
);
}
protected
void
createOidComponent
(
Composite
comp
)
{
Group
datasource
Group
=
UIUtils
.
createControlGroup
(
comp
,
DebugUIMessages
.
DatabaseTab_oid_group_text
,
2
,
GridData
.
FILL_HORIZONTAL
,
SWT
.
DEFAULT
);
Group
oid
Group
=
UIUtils
.
createControlGroup
(
comp
,
DebugUIMessages
.
DatabaseTab_oid_group_text
,
2
,
GridData
.
FILL_HORIZONTAL
,
SWT
.
DEFAULT
);
oidText
=
UIUtils
.
createLabelText
(
datasourceGroup
,
DebugUIMessages
.
DatabaseTab_oid_label_text
,
DebugCore
.
ATTR
_OID_DEFAULT
);
oidText
=
UIUtils
.
createLabelText
(
oidGroup
,
DebugUIMessages
.
DatabaseTab_oid_label_text
,
DebugCore
.
ATTR_PROCEDURE
_OID_DEFAULT
);
oidText
.
setLayoutData
(
new
GridData
(
GridData
.
FILL_HORIZONTAL
));
oidText
.
addModifyListener
(
modifyListener
);
}
protected
void
createNameComponent
(
Composite
comp
)
{
Group
oidGroup
=
UIUtils
.
createControlGroup
(
comp
,
DebugUIMessages
.
DatabaseTab_name_group_text
,
2
,
GridData
.
FILL_HORIZONTAL
,
SWT
.
DEFAULT
);
nameText
=
UIUtils
.
createLabelText
(
oidGroup
,
DebugUIMessages
.
DatabaseTab_name_label_text
,
DebugCore
.
ATTR_PROCEDURE_NAME_DEFAULT
);
nameText
.
setLayoutData
(
new
GridData
(
GridData
.
FILL_HORIZONTAL
));
nameText
.
addModifyListener
(
modifyListener
);
}
protected
void
createCallComponent
(
Composite
comp
)
{
Group
callGroup
=
UIUtils
.
createControlGroup
(
comp
,
DebugUIMessages
.
DatabaseTab_call_group_text
,
2
,
GridData
.
FILL_HORIZONTAL
,
SWT
.
DEFAULT
);
callText
=
UIUtils
.
createLabelText
(
callGroup
,
DebugUIMessages
.
DatabaseTab_call_label_text
,
DebugCore
.
ATTR_PROCEDURE_CALL_DEFAULT
);
callText
.
setLayoutData
(
new
GridData
(
GridData
.
FILL_HORIZONTAL
));
callText
.
addModifyListener
(
modifyListener
);
}
@Override
public
void
setDefaults
(
ILaunchConfigurationWorkingCopy
configuration
)
{
configuration
.
setAttribute
(
DebugCore
.
ATTR_DRIVER
,
DebugCore
.
ATTR_DRIVER
);
configuration
.
setAttribute
(
DebugCore
.
ATTR_DATASOURCE
,
DebugCore
.
ATTR_DATASOURCE_DEFAULT
);
configuration
.
setAttribute
(
DebugCore
.
ATTR_DATABASE
,
DebugCore
.
ATTR_DATABASE_DEFAULT
);
configuration
.
setAttribute
(
DebugCore
.
ATTR_OID
,
DebugCore
.
ATTR_OID_DEFAULT
);
configuration
.
setAttribute
(
DebugCore
.
ATTR_DRIVER_ID
,
DebugCore
.
ATTR_DRIVER_ID
);
configuration
.
setAttribute
(
DebugCore
.
ATTR_DATASOURCE_ID
,
DebugCore
.
ATTR_DATASOURCE_ID_DEFAULT
);
configuration
.
setAttribute
(
DebugCore
.
ATTR_DATABASE_NAME
,
DebugCore
.
ATTR_DATABASE_NAME_DEFAULT
);
configuration
.
setAttribute
(
DebugCore
.
ATTR_SCHEMA_NAME
,
DebugCore
.
ATTR_SCHEMA_NAME_DEFAULT
);
configuration
.
setAttribute
(
DebugCore
.
ATTR_PROCEDURE_OID
,
DebugCore
.
ATTR_PROCEDURE_OID_DEFAULT
);
configuration
.
setAttribute
(
DebugCore
.
ATTR_PROCEDURE_NAME
,
DebugCore
.
ATTR_PROCEDURE_NAME_DEFAULT
);
configuration
.
setAttribute
(
DebugCore
.
ATTR_PROCEDURE_CALL
,
DebugCore
.
ATTR_PROCEDURE_CALL_DEFAULT
);
}
@Override
...
...
@@ -134,7 +169,10 @@ public class DatabaseTab extends AbstractLaunchConfigurationTab {
initializeDriver
(
configuration
);
initializeDatasource
(
configuration
);
initializeDatabase
(
configuration
);
initializeSchema
(
configuration
);
initializeOid
(
configuration
);
initializeName
(
configuration
);
initializeCall
(
configuration
);
}
protected
void
initializeDriver
(
ILaunchConfiguration
configuration
)
...
...
@@ -155,17 +193,28 @@ public class DatabaseTab extends AbstractLaunchConfigurationTab {
databaseText
.
setText
(
extracted
);
}
protected
void
initializeSchema
(
ILaunchConfiguration
configuration
)
{
String
extracted
=
DebugCore
.
extractSchemaName
(
configuration
);
schemaText
.
setText
(
extracted
);
}
protected
void
initializeOid
(
ILaunchConfiguration
configuration
)
{
String
oid
=
null
;
try
{
oid
=
configuration
.
getAttribute
(
DebugCore
.
ATTR_OID
,
(
String
)
null
);
}
catch
(
CoreException
e
)
{
}
if
(
oid
==
null
)
{
oid
=
DebugCore
.
ATTR_OID_DEFAULT
;
}
oidText
.
setText
(
oid
);
String
extracted
=
DebugCore
.
extractProcedureOid
(
configuration
);
oidText
.
setText
(
extracted
);
}
protected
void
initializeName
(
ILaunchConfiguration
configuration
)
{
String
extracted
=
DebugCore
.
extractProcedureName
(
configuration
);
nameText
.
setText
(
extracted
);
}
protected
void
initializeCall
(
ILaunchConfiguration
configuration
)
{
String
extracted
=
DebugCore
.
extractProcedureCall
(
configuration
);
callText
.
setText
(
extracted
);
}
@Override
...
...
@@ -192,10 +241,13 @@ public class DatabaseTab extends AbstractLaunchConfigurationTab {
@Override
public
void
performApply
(
ILaunchConfigurationWorkingCopy
configuration
)
{
configuration
.
setAttribute
(
DebugCore
.
ATTR_DRIVER
,
driverText
.
getText
());
configuration
.
setAttribute
(
DebugCore
.
ATTR_DATASOURCE
,
datasourceText
.
getText
());
configuration
.
setAttribute
(
DebugCore
.
ATTR_DATABASE
,
databaseText
.
getText
());
configuration
.
setAttribute
(
DebugCore
.
ATTR_OID
,
oidText
.
getText
());
configuration
.
setAttribute
(
DebugCore
.
ATTR_DRIVER_ID
,
driverText
.
getText
());
configuration
.
setAttribute
(
DebugCore
.
ATTR_DATASOURCE_ID
,
datasourceText
.
getText
());
configuration
.
setAttribute
(
DebugCore
.
ATTR_DATABASE_NAME
,
databaseText
.
getText
());
configuration
.
setAttribute
(
DebugCore
.
ATTR_SCHEMA_NAME
,
schemaText
.
getText
());
configuration
.
setAttribute
(
DebugCore
.
ATTR_PROCEDURE_OID
,
oidText
.
getText
());
configuration
.
setAttribute
(
DebugCore
.
ATTR_PROCEDURE_NAME
,
nameText
.
getText
());
configuration
.
setAttribute
(
DebugCore
.
ATTR_PROCEDURE_CALL
,
callText
.
getText
());
}
@Override
...
...
plugins/org.jkiss.dbeaver.ext.postgresql.debug.core/src/org/jkiss/dbeaver/ext/postgresql/debug/core/PostgreSqlDebugCore.java
浏览文件 @
f5841dd9
...
...
@@ -49,16 +49,20 @@ public class PostgreSqlDebugCore {
PostgreSchema
schema
=
procedure
.
getContainer
();
String
databaseName
=
database
.
getName
();
Object
[]
bindings
=
new
Object
[]
{
dataSourceContainer
.
getName
(),
databaseName
,
procedure
.
getName
(),
schema
.
getName
()};
String
schemaName
=
schema
.
getName
();
String
procedureName
=
procedure
.
getName
();
Object
[]
bindings
=
new
Object
[]
{
dataSourceContainer
.
getName
(),
databaseName
,
procedureName
,
schemaName
};
String
name
=
NLS
.
bind
(
PostgreDebugCoreMessages
.
PostgreSqlDebugCore_launch_configuration_name
,
bindings
);
//Let's use metadata area for storage
IContainer
container
=
null
;
ILaunchConfigurationWorkingCopy
workingCopy
=
DebugCore
.
createConfiguration
(
container
,
CONFIGURATION_TYPE
,
name
);
workingCopy
.
setAttribute
(
DebugCore
.
ATTR_DRIVER
,
dataSourceContainer
.
getDriver
().
getId
());
workingCopy
.
setAttribute
(
DebugCore
.
ATTR_DATASOURCE
,
dataSourceContainer
.
getId
());
workingCopy
.
setAttribute
(
DebugCore
.
ATTR_DATABASE
,
databaseName
);
workingCopy
.
setAttribute
(
DebugCore
.
ATTR_OID
,
String
.
valueOf
(
procedure
.
getObjectId
()));
workingCopy
.
setAttribute
(
DebugCore
.
ATTR_DRIVER_ID
,
dataSourceContainer
.
getDriver
().
getId
());
workingCopy
.
setAttribute
(
DebugCore
.
ATTR_DATASOURCE_ID
,
dataSourceContainer
.
getId
());
workingCopy
.
setAttribute
(
DebugCore
.
ATTR_DATABASE_NAME
,
databaseName
);
workingCopy
.
setAttribute
(
DebugCore
.
ATTR_SCHEMA_NAME
,
schemaName
);
workingCopy
.
setAttribute
(
DebugCore
.
ATTR_PROCEDURE_OID
,
String
.
valueOf
(
procedure
.
getObjectId
()));
workingCopy
.
setAttribute
(
DebugCore
.
ATTR_PROCEDURE_NAME
,
procedureName
);
workingCopy
.
setAttribute
(
DebugCore
.
ATTR_PROCEDURE_CALL
,
DebugCore
.
composeProcedureCall
(
procedure
));
return
workingCopy
;
}
}
plugins/org.jkiss.dbeaver.ext.postgresql.debug.core/src/org/jkiss/dbeaver/ext/postgresql/debug/internal/impl/PostgreDebugController.java
浏览文件 @
f5841dd9
...
...
@@ -22,46 +22,23 @@ import java.sql.ResultSet;
import
java.sql.SQLException
;
import
java.sql.Statement
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.List
;
import
java.util.Map
;
import
org.eclipse.core.runtime.IProgressMonitor
;
import
org.eclipse.core.runtime.IStatus
;
import
org.eclipse.core.runtime.Status
;
import
org.eclipse.core.runtime.jobs.Job
;
import
org.eclipse.osgi.util.NLS
;
import
org.jkiss.dbeaver.DBException
;
import
org.jkiss.dbeaver.Log
;
import
org.jkiss.dbeaver.debug.DBGBaseController
;
import
org.jkiss.dbeaver.debug.DBGException
;
import
org.jkiss.dbeaver.debug.DBGSession
;
import
org.jkiss.dbeaver.debug.DBGSessionInfo
;
import
org.jkiss.dbeaver.debug.core.DebugCore
;
import
org.jkiss.dbeaver.ext.postgresql.model.PostgreDataSource
;
import
org.jkiss.dbeaver.ext.postgresql.model.PostgreDatabase
;
import
org.jkiss.dbeaver.ext.postgresql.model.PostgreProcedure
;
import
org.jkiss.dbeaver.ext.postgresql.model.PostgreSchema
;
import
org.jkiss.dbeaver.model.DBPDataKind
;
import
org.jkiss.dbeaver.model.DBPDataSource
;
import
org.jkiss.dbeaver.model.DBPDataSourceContainer
;
import
org.jkiss.dbeaver.model.DBUtils
;
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.exec.DBCStatement
;
import
org.jkiss.dbeaver.model.exec.DBCStatementType
;
import
org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext
;
import
org.jkiss.dbeaver.model.runtime.DBRProgressMonitor
;
import
org.jkiss.dbeaver.model.runtime.VoidProgressMonitor
;
import
org.jkiss.dbeaver.model.struct.DBSTypedObject
;
import
org.jkiss.dbeaver.model.struct.rdb.DBSProcedure
;
import
org.jkiss.dbeaver.model.struct.rdb.DBSProcedureParameter
;
public
class
PostgreDebugController
extends
DBGBaseController
{
private
static
Log
log
=
Log
.
getLog
(
PostgreDebugController
.
class
);
private
static
final
String
SQL_SESSION
=
"select pid,usename,application_name,state,query from pg_stat_activity"
;
//$NON-NLS-1$
private
static
final
String
SQL_OBJECT
=
"select p.oid,p.proname,u.usename as owner,n.nspname, l.lanname as lang "
//$NON-NLS-1$
...
...
@@ -94,7 +71,7 @@ public class PostgreDebugController extends DBGBaseController {
throw
new
DBGException
(
"Error getting session"
);
}
catch
(
SQLException
e
)
{
throw
new
DBGException
(
"SQ
L
error"
,
e
);
throw
new
DBGException
(
"SQ
L
error"
,
e
);
}
}
...
...
@@ -169,79 +146,9 @@ public class PostgreDebugController extends DBGBaseController {
//FIXME -1 - target PID (-1 for ANY PID)
int
oid
=
Integer
.
parseInt
(
String
.
valueOf
(
configuration
.
get
(
PROCEDURE_OID
)));
int
pid
=
Integer
.
parseInt
(
String
.
valueOf
(
configuration
.
get
(
PROCESS_ID
)));
String
databaseName
=
String
.
valueOf
(
configuration
.
get
(
DATABASE_NAME
));
pgSession
.
attach
(
sessionJdbc
,
oid
,
pid
);
DBPDataSource
dataSource
=
sessionContext
.
getDataSource
();
executeProcedure
(
configuration
,
monitor
,
oid
,
databaseName
,
dataSource
);
}
private
void
executeProcedure
(
Map
<
String
,
Object
>
configuration
,
DBRProgressMonitor
monitor
,
int
oid
,
String
databaseName
,
DBPDataSource
dataSource
)
throws
DBException
{
if
(
dataSource
instanceof
PostgreDataSource
)
{
PostgreDataSource
pgDS
=
(
PostgreDataSource
)
dataSource
;
PostgreDatabase
database
=
pgDS
.
getDatabase
(
databaseName
);
PostgreSchema
schema
=
database
.
getSchema
(
monitor
,
"public"
);
PostgreProcedure
procedure
=
schema
.
getProcedure
(
monitor
,
oid
);
String
call
=
composeProcedureCall
(
procedure
,
configuration
,
monitor
);
String
taskName
=
NLS
.
bind
(
"Execute procedure {0}"
,
procedure
.
getName
());
Job
job
=
new
Job
(
taskName
)
{
@Override
protected
IStatus
run
(
IProgressMonitor
monitor
)
{
try
{
try
(
final
DBCSession
execSession
=
DBUtils
.
openUtilSession
(
new
VoidProgressMonitor
(),
dataSource
,
taskName
))
{
try
(
final
DBCStatement
dbStat
=
execSession
.
prepareStatement
(
DBCStatementType
.
EXEC
,
call
,
true
,
false
,
false
))
{
dbStat
.
executeStatement
();
}
}
}
catch
(
DBCException
e
)
{
log
.
error
(
taskName
,
e
);
return
DebugCore
.
newErrorStatus
(
taskName
,
e
);
}
return
Status
.
OK_STATUS
;
}
};
job
.
schedule
();
}
}
private
String
composeProcedureCall
(
DBSProcedure
procedure
,
Map
<
String
,
Object
>
configuration
,
DBRProgressMonitor
monitor
)
throws
DBException
{
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
"select"
).
append
(
' '
).
append
(
procedure
.
getName
());
sb
.
append
(
'('
);
Collection
<?
extends
DBSProcedureParameter
>
parameters
=
procedure
.
getParameters
(
monitor
);
if
(
parameters
.
size
()
>
0
)
{
for
(
DBSProcedureParameter
parameter
:
parameters
)
{
String
name
=
parameter
.
getName
();
Object
value
=
configuration
.
get
(
name
);
if
(
value
==
null
)
{
value
=
'?'
;
sb
.
append
(
value
);
}
else
{
DBSTypedObject
parameterType
=
parameter
.
getParameterType
();
DBPDataKind
dataKind
=
parameterType
.
getDataKind
();
switch
(
dataKind
)
{
case
STRING:
sb
.
append
(
'\''
);
sb
.
append
(
value
);
sb
.
append
(
'\''
);
break
;
default
:
sb
.
append
(
value
);
break
;
}
}
sb
.
append
(
','
);
}
sb
.
deleteCharAt
(
sb
.
length
()-
1
);
}
sb
.
append
(
')'
);
String
call
=
sb
.
toString
();
return
call
;
executeProcedure
(
dataSource
,
configuration
,
monitor
);
}
}
plugins/org.jkiss.dbeaver.ext.postgresql.debug.ui/src/org/jkiss/dbeaver/ext/postgresql/debug/ui/internal/PgSqlLaunchShortcut.java
浏览文件 @
f5841dd9
...
...
@@ -77,13 +77,19 @@ public class PgSqlLaunchShortcut extends LaunchShortcut {
}
String
database
=
DebugCore
.
extractDatabaseName
(
config
);
String
databaseName
=
launchable
.
getDataSourc
e
().
getName
();
String
databaseName
=
procedure
.
getDatabas
e
().
getName
();
if
(!
database
.
equals
(
databaseName
))
{
return
false
;
}
String
schema
=
DebugCore
.
extractSchemaName
(
config
);
String
schemaName
=
procedure
.
getContainer
().
getName
();
if
(!
schema
.
equals
(
schemaName
))
{
return
false
;
}
try
{
String
oid
=
config
.
getAttribute
(
DebugCore
.
ATTR_OID
,
String
.
valueOf
(
0
));
String
oid
=
config
.
getAttribute
(
DebugCore
.
ATTR_
PROCEDURE_
OID
,
String
.
valueOf
(
0
));
long
objectId
=
procedure
.
getObjectId
();
if
(!(
Long
.
parseLong
(
oid
)==
objectId
))
{
return
false
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录