Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
suliangchun
dbeaver
提交
e73e639a
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,发现更多精彩内容 >>
提交
e73e639a
编写于
6月 22, 2018
作者:
S
Serge Rider
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
SQL metadata searcher
Former-commit-id:
c1286e49
上级
71c90ebe
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
121 addition
and
81 deletion
+121
-81
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/syntax/SQLCompletionAnalyzer.java
.../dbeaver/ui/editors/sql/syntax/SQLCompletionAnalyzer.java
+2
-76
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/syntax/SQLIdentifierDetector.java
.../dbeaver/ui/editors/sql/syntax/SQLIdentifierDetector.java
+0
-5
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/syntax/SQLSearchUtils.java
...g/jkiss/dbeaver/ui/editors/sql/syntax/SQLSearchUtils.java
+115
-0
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/sql/SQLQuery.java
...eaver.model/src/org/jkiss/dbeaver/model/sql/SQLQuery.java
+4
-0
未找到文件。
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/syntax/SQLCompletionAnalyzer.java
浏览文件 @
e73e639a
...
@@ -181,7 +181,7 @@ class SQLCompletionAnalyzer
...
@@ -181,7 +181,7 @@ class SQLCompletionAnalyzer
sqlDialect
.
getCatalogSeparator
(),
sqlDialect
.
getCatalogSeparator
(),
sqlDialect
.
getIdentifierQuoteStrings
(),
sqlDialect
.
getIdentifierQuoteStrings
(),
false
);
false
);
DBSObject
rightTable
=
findObjectByFQN
(
sc
,
dataSource
,
Arrays
.
asList
(
allNames
)
);
DBSObject
rightTable
=
SQLSearchUtils
.
findObjectByFQN
(
monitor
,
sc
,
dataSource
,
Arrays
.
asList
(
allNames
),
!
request
.
simpleMode
,
request
.
wordDetector
);
if
(
rightTable
instanceof
DBSEntity
)
{
if
(
rightTable
instanceof
DBSEntity
)
{
try
{
try
{
String
joinCriteria
=
SQLUtils
.
generateTableJoin
(
monitor
,
leftTable
,
leftTable
.
getName
(),
(
DBSEntity
)
rightTable
,
rightTable
.
getName
());
String
joinCriteria
=
SQLUtils
.
generateTableJoin
(
monitor
,
leftTable
,
leftTable
.
getName
(),
(
DBSEntity
)
rightTable
,
rightTable
.
getName
());
...
@@ -433,81 +433,7 @@ class SQLCompletionAnalyzer
...
@@ -433,81 +433,7 @@ class SQLCompletionAnalyzer
}
}
}
}
return
findObjectByFQN
(
sc
,
dataSource
,
nameList
);
return
SQLSearchUtils
.
findObjectByFQN
(
monitor
,
sc
,
dataSource
,
nameList
,
!
request
.
simpleMode
,
request
.
wordDetector
);
}
@Nullable
private
DBSObject
findObjectByFQN
(
DBSObjectContainer
sc
,
DBPDataSource
dataSource
,
List
<
String
>
nameList
)
{
if
(
nameList
.
isEmpty
())
{
return
null
;
}
{
List
<
String
>
unquotedNames
=
new
ArrayList
<>(
nameList
.
size
());
for
(
String
name
:
nameList
)
{
unquotedNames
.
add
(
DBUtils
.
getUnQuotedIdentifier
(
dataSource
,
name
));
}
DBSObject
result
=
findObjectByPath
(
sc
,
unquotedNames
);
if
(
result
!=
null
)
{
return
result
;
}
}
{
// Fix names (convert case or remove quotes)
for
(
int
i
=
0
;
i
<
nameList
.
size
();
i
++)
{
String
name
=
nameList
.
get
(
i
);
String
unquotedName
=
DBUtils
.
getUnQuotedIdentifier
(
dataSource
,
name
);
if
(!
unquotedName
.
equals
(
name
))
{
name
=
unquotedName
;
}
else
{
name
=
DBObjectNameCaseTransformer
.
transformName
(
sc
.
getDataSource
(),
name
);
}
nameList
.
set
(
i
,
name
);
}
return
findObjectByPath
(
sc
,
nameList
);
}
}
private
DBSObject
findObjectByPath
(
DBSObjectContainer
sc
,
List
<
String
>
nameList
)
{
try
{
DBSObject
childObject
=
null
;
while
(
childObject
==
null
)
{
childObject
=
DBUtils
.
findNestedObject
(
monitor
,
sc
,
nameList
);
if
(
childObject
==
null
)
{
DBSObjectContainer
parentSc
=
DBUtils
.
getParentAdapter
(
DBSObjectContainer
.
class
,
sc
);
if
(
parentSc
==
null
)
{
break
;
}
sc
=
parentSc
;
}
}
if
(
childObject
==
null
&&
nameList
.
size
()
<=
1
)
{
if
(!
request
.
simpleMode
)
{
// No such object found - may be it's start of table name
DBSStructureAssistant
structureAssistant
=
DBUtils
.
getAdapter
(
DBSStructureAssistant
.
class
,
sc
);
if
(
structureAssistant
!=
null
)
{
String
objectNameMask
=
nameList
.
get
(
0
);
Collection
<
DBSObjectReference
>
tables
=
structureAssistant
.
findObjectsByMask
(
monitor
,
sc
,
structureAssistant
.
getAutoCompleteObjectTypes
(),
request
.
wordDetector
.
removeQuotes
(
objectNameMask
),
request
.
wordDetector
.
isQuoted
(
objectNameMask
),
false
,
2
);
if
(!
tables
.
isEmpty
())
{
return
tables
.
iterator
().
next
().
resolveObject
(
monitor
);
}
}
}
return
null
;
}
else
{
return
childObject
;
}
}
catch
(
DBException
e
)
{
log
.
error
(
e
);
return
null
;
}
}
}
private
void
makeProposalsFromChildren
(
DBPObject
parent
,
@Nullable
String
startPart
)
private
void
makeProposalsFromChildren
(
DBPObject
parent
,
@Nullable
String
startPart
)
...
...
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/syntax/SQLIdentifierDetector.java
浏览文件 @
e73e639a
...
@@ -24,11 +24,6 @@ import org.jkiss.code.Nullable;
...
@@ -24,11 +24,6 @@ import org.jkiss.code.Nullable;
import
org.jkiss.dbeaver.model.DBUtils
;
import
org.jkiss.dbeaver.model.DBUtils
;
import
org.jkiss.dbeaver.model.sql.SQLUtils
;
import
org.jkiss.dbeaver.model.sql.SQLUtils
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.StringTokenizer
;
/**
/**
* Determines whether a given character is valid as part of an SQL identifier.
* Determines whether a given character is valid as part of an SQL identifier.
*/
*/
...
...
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/syntax/SQLSearchUtils.java
0 → 100644
浏览文件 @
e73e639a
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* 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.syntax
;
import
org.jkiss.code.Nullable
;
import
org.jkiss.dbeaver.DBException
;
import
org.jkiss.dbeaver.Log
;
import
org.jkiss.dbeaver.model.DBPDataSource
;
import
org.jkiss.dbeaver.model.DBUtils
;
import
org.jkiss.dbeaver.model.impl.DBObjectNameCaseTransformer
;
import
org.jkiss.dbeaver.model.runtime.DBRProgressMonitor
;
import
org.jkiss.dbeaver.model.struct.DBSObject
;
import
org.jkiss.dbeaver.model.struct.DBSObjectContainer
;
import
org.jkiss.dbeaver.model.struct.DBSObjectReference
;
import
org.jkiss.dbeaver.model.struct.DBSStructureAssistant
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.List
;
/**
* Metadata search utils
*/
public
class
SQLSearchUtils
{
private
static
final
Log
log
=
Log
.
getLog
(
SQLSearchUtils
.
class
);
@Nullable
public
static
DBSObject
findObjectByFQN
(
DBRProgressMonitor
monitor
,
DBSObjectContainer
sc
,
DBPDataSource
dataSource
,
List
<
String
>
nameList
,
boolean
useAssistant
,
SQLIdentifierDetector
identifierDetector
)
{
if
(
nameList
.
isEmpty
())
{
return
null
;
}
{
List
<
String
>
unquotedNames
=
new
ArrayList
<>(
nameList
.
size
());
for
(
String
name
:
nameList
)
{
unquotedNames
.
add
(
DBUtils
.
getUnQuotedIdentifier
(
dataSource
,
name
));
}
DBSObject
result
=
findObjectByPath
(
monitor
,
sc
,
unquotedNames
,
identifierDetector
,
useAssistant
);
if
(
result
!=
null
)
{
return
result
;
}
}
{
// Fix names (convert case or remove quotes)
for
(
int
i
=
0
;
i
<
nameList
.
size
();
i
++)
{
String
name
=
nameList
.
get
(
i
);
String
unquotedName
=
DBUtils
.
getUnQuotedIdentifier
(
dataSource
,
name
);
if
(!
unquotedName
.
equals
(
name
))
{
name
=
unquotedName
;
}
else
{
name
=
DBObjectNameCaseTransformer
.
transformName
(
sc
.
getDataSource
(),
name
);
}
nameList
.
set
(
i
,
name
);
}
return
findObjectByPath
(
monitor
,
sc
,
nameList
,
identifierDetector
,
useAssistant
);
}
}
public
static
DBSObject
findObjectByPath
(
DBRProgressMonitor
monitor
,
DBSObjectContainer
sc
,
List
<
String
>
nameList
,
SQLIdentifierDetector
identifierDetector
,
boolean
useAssistant
)
{
try
{
DBSObject
childObject
=
null
;
while
(
childObject
==
null
)
{
childObject
=
DBUtils
.
findNestedObject
(
monitor
,
sc
,
nameList
);
if
(
childObject
==
null
)
{
DBSObjectContainer
parentSc
=
DBUtils
.
getParentAdapter
(
DBSObjectContainer
.
class
,
sc
);
if
(
parentSc
==
null
)
{
break
;
}
sc
=
parentSc
;
}
}
if
(
childObject
==
null
&&
nameList
.
size
()
<=
1
)
{
if
(
useAssistant
)
{
// No such object found - may be it's start of table name
DBSStructureAssistant
structureAssistant
=
DBUtils
.
getAdapter
(
DBSStructureAssistant
.
class
,
sc
);
if
(
structureAssistant
!=
null
)
{
String
objectNameMask
=
nameList
.
get
(
0
);
Collection
<
DBSObjectReference
>
tables
=
structureAssistant
.
findObjectsByMask
(
monitor
,
sc
,
structureAssistant
.
getAutoCompleteObjectTypes
(),
identifierDetector
.
removeQuotes
(
objectNameMask
),
identifierDetector
.
isQuoted
(
objectNameMask
),
false
,
2
);
if
(!
tables
.
isEmpty
())
{
return
tables
.
iterator
().
next
().
resolveObject
(
monitor
);
}
}
}
return
null
;
}
else
{
return
childObject
;
}
}
catch
(
DBException
e
)
{
log
.
error
(
e
);
return
null
;
}
}
}
\ No newline at end of file
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/sql/SQLQuery.java
浏览文件 @
e73e639a
...
@@ -113,6 +113,10 @@ public class SQLQuery implements SQLScriptElement {
...
@@ -113,6 +113,10 @@ public class SQLQuery implements SQLScriptElement {
}
}
}
}
public
DBPDataSource
getDataSource
()
{
return
dataSource
;
}
private
void
parseQuery
()
{
private
void
parseQuery
()
{
if
(
parsed
)
{
if
(
parsed
)
{
return
;
return
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录