Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
2c0a1fd5
提交
2c0a1fd5
authored
6 年前
作者:
Evgenij Ryazanov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Pass StringBuilder to SelectOrderBy.getSQL()
上级
10ce4998
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
69 行增加
和
69 行删除
+69
-69
Select.java
h2/src/main/org/h2/command/dml/Select.java
+64
-62
SelectOrderBy.java
h2/src/main/org/h2/command/dml/SelectOrderBy.java
+5
-7
没有找到文件。
h2/src/main/org/h2/command/dml/Select.java
浏览文件 @
2c0a1fd5
...
...
@@ -48,7 +48,6 @@ import org.h2.table.TableFilter.TableFilterVisitor;
import
org.h2.table.TableType
;
import
org.h2.table.TableView
;
import
org.h2.util.ColumnNamer
;
import
org.h2.util.StatementBuilder
;
import
org.h2.util.StringUtils
;
import
org.h2.util.Utils
;
import
org.h2.value.Value
;
...
...
@@ -1463,7 +1462,7 @@ public class Select extends Query {
// indexes may be incorrect: ? may be in fact ?2 for a subquery
// but indexes may be set manually as well
Expression
[]
exprList
=
expressions
.
toArray
(
new
Expression
[
0
]);
St
atementBuilder
buff
=
new
Statement
Builder
();
St
ringBuilder
builder
=
new
String
Builder
();
for
(
TableFilter
f
:
topFilters
)
{
Table
t
=
f
.
getTable
();
TableView
tableView
=
t
.
isView
()
?
(
TableView
)
t
:
null
;
...
...
@@ -1474,121 +1473,124 @@ public class Select extends Query {
// since using a with statement will re-create the common table expression
// views.
}
else
{
buff
.
append
(
"WITH RECURSIVE "
);
t
.
getSchema
().
getSQL
(
buff
.
builder
()).
append
(
'.'
);
Parser
.
quoteIdentifier
(
buff
.
builder
(),
t
.
getName
())
.
append
(
'('
);
Column
.
writeColumns
(
buff
.
builder
(),
t
.
getColumns
());
buff
.
append
(
") AS "
);
t
.
getSQL
(
buff
.
builder
()).
append
(
'\n'
);
builder
.
append
(
"WITH RECURSIVE "
);
t
.
getSchema
().
getSQL
(
builder
).
append
(
'.'
);
Parser
.
quoteIdentifier
(
builder
,
t
.
getName
()).
append
(
'('
);
Column
.
writeColumns
(
builder
,
t
.
getColumns
());
builder
.
append
(
") AS "
);
t
.
getSQL
(
builder
).
append
(
'\n'
);
}
}
}
bu
ff
.
append
(
"SELECT"
);
bu
ilder
.
append
(
"SELECT"
);
if
(
isAnyDistinct
())
{
bu
ff
.
append
(
" DISTINCT"
);
bu
ilder
.
append
(
" DISTINCT"
);
if
(
distinctExpressions
!=
null
)
{
bu
ff
.
append
(
" ON("
);
Expression
.
writeExpressions
(
bu
ff
.
builder
()
,
distinctExpressions
);
bu
ff
.
append
(
')'
);
bu
ilder
.
append
(
" ON("
);
Expression
.
writeExpressions
(
bu
ilder
,
distinctExpressions
);
bu
ilder
.
append
(
')'
);
}
}
for
(
int
i
=
0
;
i
<
visibleColumnCount
;
i
++)
{
buff
.
appendExceptFirst
(
","
);
buff
.
append
(
'\n'
);
StringUtils
.
indent
(
buff
.
builder
(),
exprList
[
i
].
getSQL
(),
4
,
false
);
if
(
i
>
0
)
{
builder
.
append
(
", "
);
}
builder
.
append
(
'\n'
);
StringUtils
.
indent
(
builder
,
exprList
[
i
].
getSQL
(),
4
,
false
);
}
bu
ff
.
append
(
"\nFROM "
);
bu
ilder
.
append
(
"\nFROM "
);
TableFilter
filter
=
topTableFilter
;
if
(
filter
!=
null
)
{
buff
.
resetCount
();
int
i
=
0
;
do
{
buff
.
appendExceptFirst
(
"\n"
);
filter
.
getPlanSQL
(
buff
.
builder
(),
i
++
>
0
);
if
(
i
>
0
)
{
builder
.
append
(
'\n'
);
}
filter
.
getPlanSQL
(
builder
,
i
++
>
0
);
filter
=
filter
.
getJoin
();
}
while
(
filter
!=
null
);
}
else
{
buff
.
resetCount
();
int
i
=
0
;
for
(
TableFilter
f
:
topFilters
)
{
do
{
buff
.
appendExceptFirst
(
"\n"
);
f
.
getPlanSQL
(
buff
.
builder
(),
i
++
>
0
);
if
(
i
>
0
)
{
builder
.
append
(
'\n'
);
}
f
.
getPlanSQL
(
builder
,
i
++
>
0
);
f
=
f
.
getJoin
();
}
while
(
f
!=
null
);
}
}
if
(
condition
!=
null
)
{
bu
ff
.
append
(
"\nWHERE "
);
condition
.
getUnenclosedSQL
(
bu
ff
.
builder
()
);
bu
ilder
.
append
(
"\nWHERE "
);
condition
.
getUnenclosedSQL
(
bu
ilder
);
}
if
(
groupIndex
!=
null
)
{
buff
.
append
(
"\nGROUP BY "
);
buff
.
resetCount
();
for
(
int
gi
:
groupIndex
)
{
Expression
g
=
exprList
[
gi
];
g
=
g
.
getNonAliasExpression
();
buff
.
appendExceptFirst
(
", "
);
g
.
getUnenclosedSQL
(
buff
.
builder
());
builder
.
append
(
"\nGROUP BY "
);
for
(
int
i
=
0
,
l
=
groupIndex
.
length
;
i
<
l
;
i
++)
{
if
(
i
>
0
)
{
builder
.
append
(
", "
);
}
exprList
[
groupIndex
[
i
]].
getNonAliasExpression
().
getUnenclosedSQL
(
builder
);
}
}
if
(
group
!=
null
)
{
buff
.
append
(
"\nGROUP BY "
);
buff
.
resetCount
();
for
(
Expression
g
:
group
)
{
buff
.
appendExceptFirst
(
", "
);
g
.
getUnenclosedSQL
(
buff
.
builder
()
);
}
else
if
(
group
!=
null
)
{
builder
.
append
(
"\nGROUP BY "
);
for
(
int
i
=
0
,
l
=
group
.
size
();
i
<
l
;
i
++)
{
if
(
i
>
0
)
{
builder
.
append
(
", "
);
}
g
roup
.
get
(
i
).
getUnenclosedSQL
(
builder
);
}
}
getFilterSQL
(
bu
ff
,
"\nHAVING "
,
exprList
,
having
,
havingIndex
);
getFilterSQL
(
bu
ff
,
"\nQUALIFY "
,
exprList
,
qualify
,
qualifyIndex
);
getFilterSQL
(
bu
ilder
,
"\nHAVING "
,
exprList
,
having
,
havingIndex
);
getFilterSQL
(
bu
ilder
,
"\nQUALIFY "
,
exprList
,
qualify
,
qualifyIndex
);
if
(
sort
!=
null
)
{
bu
ff
.
append
(
"\nORDER BY "
).
append
(
bu
ilder
.
append
(
"\nORDER BY "
).
append
(
sort
.
getSQL
(
exprList
,
visibleColumnCount
));
}
if
(
orderList
!=
null
)
{
buff
.
append
(
"\nORDER BY "
);
buff
.
resetCount
();
for
(
SelectOrderBy
o
:
orderList
)
{
buff
.
appendExceptFirst
(
", "
);
buff
.
append
(
StringUtils
.
unEnclose
(
o
.
getSQL
()));
builder
.
append
(
"\nORDER BY "
);
for
(
int
i
=
0
,
l
=
orderList
.
size
();
i
<
l
;
i
++)
{
if
(
i
>
0
)
{
builder
.
append
(
", "
);
}
orderList
.
get
(
i
).
getSQL
(
builder
);
}
}
appendLimitToSQL
(
bu
ff
.
builder
()
);
appendLimitToSQL
(
bu
ilder
);
if
(
sampleSizeExpr
!=
null
)
{
bu
ff
.
append
(
"\nSAMPLE_SIZE "
);
sampleSizeExpr
.
getUnenclosedSQL
(
bu
ff
.
builder
()
);
bu
ilder
.
append
(
"\nSAMPLE_SIZE "
);
sampleSizeExpr
.
getUnenclosedSQL
(
bu
ilder
);
}
if
(
isForUpdate
)
{
bu
ff
.
append
(
"\nFOR UPDATE"
);
bu
ilder
.
append
(
"\nFOR UPDATE"
);
}
if
(
isQuickAggregateQuery
)
{
bu
ff
.
append
(
"\n/* direct lookup */"
);
bu
ilder
.
append
(
"\n/* direct lookup */"
);
}
if
(
isDistinctQuery
)
{
bu
ff
.
append
(
"\n/* distinct */"
);
bu
ilder
.
append
(
"\n/* distinct */"
);
}
if
(
sortUsingIndex
)
{
bu
ff
.
append
(
"\n/* index sorted */"
);
bu
ilder
.
append
(
"\n/* index sorted */"
);
}
if
(
isGroupQuery
)
{
if
(
isGroupSortedQuery
)
{
bu
ff
.
append
(
"\n/* group sorted */"
);
bu
ilder
.
append
(
"\n/* group sorted */"
);
}
}
// buff.append("\n/* cost: " + cost + " */");
return
bu
ff
.
toString
();
return
bu
ilder
.
toString
();
}
private
static
void
getFilterSQL
(
St
atementBuilder
buff
,
String
sql
,
Expression
[]
exprList
,
Expression
condition
,
private
static
void
getFilterSQL
(
St
ringBuilder
builder
,
String
sql
,
Expression
[]
exprList
,
Expression
condition
,
int
conditionIndex
)
{
if
(
condition
!=
null
)
{
bu
ff
.
append
(
sql
);
condition
.
getUnenclosedSQL
(
bu
ff
.
builder
()
);
bu
ilder
.
append
(
sql
);
condition
.
getUnenclosedSQL
(
bu
ilder
);
}
else
if
(
conditionIndex
>=
0
)
{
bu
ff
.
append
(
sql
);
exprList
[
conditionIndex
].
getUnenclosedSQL
(
bu
ff
.
builder
()
);
bu
ilder
.
append
(
sql
);
exprList
[
conditionIndex
].
getUnenclosedSQL
(
bu
ilder
);
}
}
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/command/dml/SelectOrderBy.java
浏览文件 @
2c0a1fd5
...
...
@@ -30,16 +30,14 @@ public class SelectOrderBy {
*/
public
int
sortType
;
public
String
getSQL
()
{
StringBuilder
buff
=
new
StringBuilder
();
public
void
getSQL
(
StringBuilder
builder
)
{
if
(
expression
!=
null
)
{
bu
ff
.
append
(
'='
);
expression
.
getSQL
(
bu
ff
);
bu
ilder
.
append
(
'='
);
expression
.
getSQL
(
bu
ilder
);
}
else
{
columnIndexExpr
.
get
SQL
(
buff
);
columnIndexExpr
.
get
UnenclosedSQL
(
builder
);
}
SortOrder
.
typeToString
(
buff
,
sortType
);
return
buff
.
toString
();
SortOrder
.
typeToString
(
builder
,
sortType
);
}
}
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论