Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
suliangchun
dbeaver
提交
0e533f62
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,发现更多精彩内容 >>
提交
0e533f62
编写于
8月 13, 2019
作者:
S
Serge Rider
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
#6286 Generic driver: procedure type detect fix
上级
c1f58878
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
74 addition
and
63 deletion
+74
-63
plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/model/meta/GenericMetaModel.java
...kiss/dbeaver/ext/generic/model/meta/GenericMetaModel.java
+74
-63
未找到文件。
plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/model/meta/GenericMetaModel.java
浏览文件 @
0e533f62
...
...
@@ -226,6 +226,65 @@ public class GenericMetaModel {
GenericDataSource
dataSource
=
container
.
getDataSource
();
GenericMetaObject
procObject
=
dataSource
.
getMetaObject
(
GenericConstants
.
OBJECT_PROCEDURE
);
try
(
JDBCSession
session
=
DBUtils
.
openMetaSession
(
monitor
,
container
,
"Load procedures"
))
{
boolean
supportsFunctions
=
false
;
try
{
// Try to read functions (note: this function appeared only in Java 1.6 so it maybe not implemented by many drivers)
// Read procedures
JDBCResultSet
dbResult
=
session
.
getMetaData
().
getFunctions
(
container
.
getCatalog
()
==
null
?
null
:
container
.
getCatalog
().
getName
(),
container
.
getSchema
()
==
null
?
null
:
JDBCUtils
.
escapeWildCards
(
session
,
container
.
getSchema
().
getName
()),
dataSource
.
getAllObjectsPattern
());
try
{
supportsFunctions
=
true
;
while
(
dbResult
.
next
())
{
if
(
monitor
.
isCanceled
())
{
break
;
}
String
functionName
=
GenericUtils
.
safeGetStringTrimmed
(
procObject
,
dbResult
,
JDBCConstants
.
FUNCTION_NAME
);
if
(
functionName
==
null
)
{
//functionName = GenericUtils.safeGetStringTrimmed(procObject, dbResult, JDBCConstants.PROCEDURE_NAME);
// Apparently some drivers return the same results for getProcedures and getFunctions -
// so let's skip yet another procedure list
continue
;
}
String
specificName
=
GenericUtils
.
safeGetStringTrimmed
(
procObject
,
dbResult
,
JDBCConstants
.
SPECIFIC_NAME
);
if
(
specificName
==
null
&&
functionName
.
indexOf
(
';'
)
!=
-
1
)
{
// [JDBC: SQL Server native driver]
specificName
=
functionName
;
functionName
=
functionName
.
substring
(
0
,
functionName
.
lastIndexOf
(
';'
));
}
if
(
container
.
hasProcedure
(
functionName
))
{
// Seems to be a duplicate
continue
;
}
int
funcTypeNum
=
GenericUtils
.
safeGetInt
(
procObject
,
dbResult
,
JDBCConstants
.
FUNCTION_TYPE
);
String
remarks
=
GenericUtils
.
safeGetString
(
procObject
,
dbResult
,
JDBCConstants
.
REMARKS
);
GenericFunctionResultType
functionResultType
;
switch
(
funcTypeNum
)
{
//case DatabaseMetaData.functionResultUnknown: functionResultType = GenericFunctionResultType.UNKNOWN; break;
case
DatabaseMetaData
.
functionNoTable
:
functionResultType
=
GenericFunctionResultType
.
NO_TABLE
;
break
;
case
DatabaseMetaData
.
functionReturnsTable
:
functionResultType
=
GenericFunctionResultType
.
TABLE
;
break
;
default
:
functionResultType
=
GenericFunctionResultType
.
UNKNOWN
;
break
;
}
final
GenericProcedure
procedure
=
createProcedureImpl
(
container
,
functionName
,
specificName
,
remarks
,
DBSProcedureType
.
FUNCTION
,
functionResultType
);
container
.
addProcedure
(
procedure
);
}
}
finally
{
dbResult
.
close
();
}
}
catch
(
Throwable
e
)
{
log
.
debug
(
"Can't read generic functions"
,
e
);
}
{
// Read procedures
JDBCResultSet
dbResult
=
session
.
getMetaData
().
getProcedures
(
container
.
getCatalog
()
==
null
?
null
:
container
.
getCatalog
().
getName
(),
...
...
@@ -243,10 +302,18 @@ public class GenericMetaModel {
String
remarks
=
GenericUtils
.
safeGetString
(
procObject
,
dbResult
,
JDBCConstants
.
REMARKS
);
DBSProcedureType
procedureType
;
switch
(
procTypeNum
)
{
case
DatabaseMetaData
.
procedureNoResult
:
procedureType
=
DBSProcedureType
.
PROCEDURE
;
break
;
case
DatabaseMetaData
.
procedureReturnsResult
:
procedureType
=
DBSProcedureType
.
FUNCTION
;
break
;
case
DatabaseMetaData
.
procedureResultUnknown
:
procedureType
=
DBSProcedureType
.
PROCEDURE
;
break
;
default
:
procedureType
=
DBSProcedureType
.
UNKNOWN
;
break
;
case
DatabaseMetaData
.
procedureNoResult
:
procedureType
=
DBSProcedureType
.
PROCEDURE
;
break
;
case
DatabaseMetaData
.
procedureReturnsResult
:
procedureType
=
supportsFunctions
?
DBSProcedureType
.
PROCEDURE
:
DBSProcedureType
.
FUNCTION
;
break
;
case
DatabaseMetaData
.
procedureResultUnknown
:
procedureType
=
DBSProcedureType
.
PROCEDURE
;
break
;
default
:
procedureType
=
DBSProcedureType
.
UNKNOWN
;
break
;
}
if
(
CommonUtils
.
isEmpty
(
specificName
))
{
specificName
=
procedureName
;
...
...
@@ -283,65 +350,9 @@ public class GenericMetaModel {
container
.
addProcedure
(
procedure
);
}
}
}
finally
{
dbResult
.
close
();
}
try
{
// Try to read functions (note: this function appeared only in Java 1.6 so it maybe not implemented by many drivers)
// Read procedures
dbResult
=
session
.
getMetaData
().
getFunctions
(
container
.
getCatalog
()
==
null
?
null
:
container
.
getCatalog
().
getName
(),
container
.
getSchema
()
==
null
?
null
:
JDBCUtils
.
escapeWildCards
(
session
,
container
.
getSchema
().
getName
()),
dataSource
.
getAllObjectsPattern
());
try
{
while
(
dbResult
.
next
())
{
if
(
monitor
.
isCanceled
())
{
break
;
}
String
functionName
=
GenericUtils
.
safeGetStringTrimmed
(
procObject
,
dbResult
,
JDBCConstants
.
FUNCTION_NAME
);
if
(
functionName
==
null
)
{
//functionName = GenericUtils.safeGetStringTrimmed(procObject, dbResult, JDBCConstants.PROCEDURE_NAME);
// Apparently some drivers return the same results for getProcedures and getFunctions -
// so let's skip yet another procedure list
continue
;
}
String
specificName
=
GenericUtils
.
safeGetStringTrimmed
(
procObject
,
dbResult
,
JDBCConstants
.
SPECIFIC_NAME
);
if
(
specificName
==
null
&&
functionName
.
indexOf
(
';'
)
!=
-
1
)
{
// [JDBC: SQL Server native driver]
specificName
=
functionName
;
functionName
=
functionName
.
substring
(
0
,
functionName
.
lastIndexOf
(
';'
));
}
if
(
container
.
hasProcedure
(
functionName
))
{
// Seems to be a duplicate
continue
;
}
int
funcTypeNum
=
GenericUtils
.
safeGetInt
(
procObject
,
dbResult
,
JDBCConstants
.
FUNCTION_TYPE
);
String
remarks
=
GenericUtils
.
safeGetString
(
procObject
,
dbResult
,
JDBCConstants
.
REMARKS
);
GenericFunctionResultType
functionResultType
;
switch
(
funcTypeNum
)
{
//case DatabaseMetaData.functionResultUnknown: functionResultType = GenericFunctionResultType.UNKNOWN; break;
case
DatabaseMetaData
.
functionNoTable
:
functionResultType
=
GenericFunctionResultType
.
NO_TABLE
;
break
;
case
DatabaseMetaData
.
functionReturnsTable
:
functionResultType
=
GenericFunctionResultType
.
TABLE
;
break
;
default
:
functionResultType
=
GenericFunctionResultType
.
UNKNOWN
;
break
;
}
final
GenericProcedure
procedure
=
createProcedureImpl
(
container
,
functionName
,
specificName
,
remarks
,
DBSProcedureType
.
FUNCTION
,
functionResultType
);
container
.
addProcedure
(
procedure
);
}
}
finally
{
}
finally
{
dbResult
.
close
();
}
}
catch
(
Throwable
e
)
{
log
.
debug
(
"Can't read generic functions"
,
e
);
}
}
catch
(
SQLException
e
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录