Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
suliangchun
dbeaver
提交
209c6e79
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,发现更多精彩内容 >>
未验证
提交
209c6e79
编写于
6月 28, 2021
作者:
S
ShadelessFox
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
#12182 Temporary tables search feature
上级
f6010079
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
68 addition
and
2 deletion
+68
-2
plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/SQLServerConstants.java
...l/src/org/jkiss/dbeaver/ext/mssql/SQLServerConstants.java
+1
-0
plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerStructureAssistant.java
.../dbeaver/ext/mssql/model/SQLServerStructureAssistant.java
+67
-2
未找到文件。
plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/SQLServerConstants.java
浏览文件 @
209c6e79
...
...
@@ -28,6 +28,7 @@ public class SQLServerConstants {
public
static
final
String
DEFAULT_HOST_AZURE
=
".database.windows.net"
;
public
static
final
String
DEFAULT_DATABASE
=
"master"
;
public
static
final
String
DEFAULT_DATABASE_AZURE
=
"master"
;
public
static
final
String
TEMPDB_DATABASE
=
"tempdb"
;
public
static
final
String
PROVIDER_SQL_SERVER
=
"sqlserver"
;
public
static
final
String
PROVIDER_GENERIC
=
"mssql"
;
...
...
plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerStructureAssistant.java
浏览文件 @
209c6e79
...
...
@@ -18,8 +18,10 @@ package org.jkiss.dbeaver.ext.mssql.model;
import
org.jkiss.code.NotNull
;
import
org.jkiss.dbeaver.DBException
;
import
org.jkiss.dbeaver.ext.mssql.SQLServerConstants
;
import
org.jkiss.dbeaver.ext.mssql.SQLServerUtils
;
import
org.jkiss.dbeaver.model.DBConstants
;
import
org.jkiss.dbeaver.model.DBPEvaluationContext
;
import
org.jkiss.dbeaver.model.exec.DBCExecutionPurpose
;
import
org.jkiss.dbeaver.model.exec.jdbc.JDBCPreparedStatement
;
import
org.jkiss.dbeaver.model.exec.jdbc.JDBCResultSet
;
...
...
@@ -124,8 +126,13 @@ public class SQLServerStructureAssistant implements DBSStructureAssistant<SQLSer
try
(
JDBCSession
session
=
executionContext
.
openSession
(
monitor
,
DBCExecutionPurpose
.
META
,
"Find objects by name"
))
{
List
<
DBSObjectReference
>
objects
=
new
ArrayList
<>();
if
(
params
.
getMask
().
startsWith
(
"%#"
))
{
// Search temp tables
searchTempTables
(
session
,
params
,
objects
);
}
else
{
// Search all objects
searchAllObjects
(
session
,
database
,
schema
,
params
,
objects
);
}
return
objects
;
}
...
...
@@ -224,4 +231,62 @@ public class SQLServerStructureAssistant implements DBSStructureAssistant<SQLSer
throw
new
DBException
(
"Error while searching in system catalog"
,
e
,
dataSource
);
}
}
private
void
searchTempTables
(
@NotNull
JDBCSession
session
,
@NotNull
ObjectsSearchParams
params
,
@NotNull
List
<
DBSObjectReference
>
objects
)
throws
DBException
{
final
SQLServerDatabase
database
=
dataSource
.
getDatabase
(
session
.
getProgressMonitor
(),
SQLServerConstants
.
TEMPDB_DATABASE
);
final
SQLServerSchema
schema
=
database
.
getSchema
(
session
.
getProgressMonitor
(),
SQLServerConstants
.
DEFAULT_SCHEMA_NAME
);
// Otherwise reference resolution will fail if tables are not cached. Is there any better solution for that?
schema
.
getTableCache
().
setFullCache
(
false
);
final
StringBuilder
sql
=
new
StringBuilder
()
.
append
(
"SELECT TOP "
).
append
(
params
.
getMaxResults
()
-
objects
.
size
()).
append
(
" * "
)
.
append
(
"\nFROM "
).
append
(
SQLServerUtils
.
getSystemTableName
(
database
,
"all_objects"
))
.
append
(
"\nWHERE type = '"
).
append
(
SQLServerObjectType
.
U
.
name
())
.
append
(
"' AND name LIKE '#%' AND name LIKE ? AND OBJECT_ID(CONCAT('"
).
append
(
SQLServerConstants
.
TEMPDB_DATABASE
).
append
(
"..', QUOTENAME(name))) <> 0"
);
try
(
JDBCPreparedStatement
dbStat
=
session
.
prepareStatement
(
sql
.
toString
()))
{
dbStat
.
setString
(
1
,
params
.
getMask
());
dbStat
.
setFetchSize
(
DBConstants
.
METADATA_FETCH_SIZE
);
try
(
JDBCResultSet
dbResult
=
dbStat
.
executeQuery
())
{
while
(
dbResult
.
next
()
&&
!
session
.
getProgressMonitor
().
isCanceled
())
{
final
String
objectName
=
JDBCUtils
.
safeGetString
(
dbResult
,
"name"
);
final
String
objectNameTrimmed
=
extractTempTableName
(
objectName
);
final
String
objectTypeName
=
JDBCUtils
.
safeGetStringTrimmed
(
dbResult
,
"type"
);
final
SQLServerObjectType
objectType
=
SQLServerObjectType
.
valueOf
(
objectTypeName
);
objects
.
add
(
new
AbstractObjectReference
(
objectName
,
database
,
null
,
objectType
.
getTypeClass
(),
objectType
)
{
@Override
public
DBSObject
resolveObject
(
DBRProgressMonitor
monitor
)
throws
DBException
{
final
DBSObject
object
=
objectType
.
findObject
(
session
.
getProgressMonitor
(),
database
,
schema
,
objectName
);
if
(
object
==
null
)
{
throw
new
DBException
(
objectTypeName
+
" '"
+
objectName
+
"' not found"
);
}
return
object
;
}
@NotNull
@Override
public
String
getFullyQualifiedName
(
DBPEvaluationContext
context
)
{
return
objectNameTrimmed
;
}
});
}
}
}
catch
(
Throwable
e
)
{
throw
new
DBException
(
"Error while searching in system catalog"
,
e
,
dataSource
);
}
}
@NotNull
private
static
String
extractTempTableName
(
@NotNull
String
originalName
)
{
final
String
name
=
originalName
.
substring
(
0
,
116
);
for
(
int
i
=
name
.
length
()
-
1
;
i
>=
0
;
i
--)
{
if
(
name
.
charAt
(
i
)
!=
'_'
)
{
return
name
.
substring
(
0
,
i
+
1
);
}
}
return
name
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录