Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
e87eb442
提交
e87eb442
authored
7 年前
作者:
Evgenij Ryazanov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Return LocalResult from GeneratedKeys.getKeys()
上级
ce60c783
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
38 行增加
和
31 行删除
+38
-31
Command.java
h2/src/main/org/h2/command/Command.java
+1
-4
GeneratedKeys.java
h2/src/main/org/h2/engine/GeneratedKeys.java
+37
-27
没有找到文件。
h2/src/main/org/h2/command/Command.java
浏览文件 @
e87eb442
...
...
@@ -14,7 +14,6 @@ import org.h2.engine.Session;
import
org.h2.expression.ParameterInterface
;
import
org.h2.message.DbException
;
import
org.h2.message.Trace
;
import
org.h2.result.LocalResult
;
import
org.h2.result.ResultInterface
;
import
org.h2.result.ResultWithGeneratedKeys
;
import
org.h2.util.MathUtils
;
...
...
@@ -262,9 +261,7 @@ public abstract class Command implements CommandInterface {
int
updateCount
=
update
();
if
(!
Boolean
.
FALSE
.
equals
(
generatedKeysRequest
))
{
return
new
ResultWithGeneratedKeys
.
WithKeys
(
updateCount
,
LocalResult
.
read
(
session
,
session
.
getGeneratedKeys
().
getKeys
(),
Integer
.
MAX_VALUE
));
session
.
getGeneratedKeys
().
getKeys
(
session
));
}
return
ResultWithGeneratedKeys
.
of
(
updateCount
);
}
catch
(
DbException
e
)
{
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/engine/GeneratedKeys.java
浏览文件 @
e87eb442
...
...
@@ -10,14 +10,16 @@ import java.util.Collections;
import
java.util.HashMap
;
import
java.util.Map
;
import
org.h2.expression.Expression
;
import
org.h2.expression.ExpressionColumn
;
import
org.h2.result.LocalResult
;
import
org.h2.result.Row
;
import
org.h2.table.Column
;
import
org.h2.table.Table
;
import
org.h2.tools.SimpleResultSet
;
import
org.h2.util.MathUtils
;
import
org.h2.util.New
;
import
org.h2.util.StringUtils
;
import
org.h2.value.DataType
;
import
org.h2.value.Value
;
import
org.h2.value.ValueNull
;
/**
* Class for gathering and processing of generated keys.
...
...
@@ -26,7 +28,7 @@ public final class GeneratedKeys {
/**
* Data for result set with generated keys.
*/
private
final
ArrayList
<
Map
<
Column
,
Object
>>
data
=
New
.
arrayList
();
private
final
ArrayList
<
Map
<
Column
,
Value
>>
data
=
New
.
arrayList
();
/**
* Columns with generated keys in the current row.
...
...
@@ -97,14 +99,14 @@ public final class GeneratedKeys {
if
(
size
>
0
)
{
if
(
size
==
1
)
{
Column
column
=
row
.
get
(
0
);
data
.
add
(
Collections
.
singletonMap
(
column
,
tableRow
.
getValue
(
column
.
getColumnId
())
.
getObject
()
));
data
.
add
(
Collections
.
singletonMap
(
column
,
tableRow
.
getValue
(
column
.
getColumnId
())));
if
(!
allColumns
.
contains
(
column
))
{
allColumns
.
add
(
column
);
}
}
else
{
HashMap
<
Column
,
Object
>
map
=
new
HashMap
<>();
HashMap
<
Column
,
Value
>
map
=
new
HashMap
<>();
for
(
Column
column
:
row
)
{
map
.
put
(
column
,
tableRow
.
getValue
(
column
.
getColumnId
())
.
getObject
()
);
map
.
put
(
column
,
tableRow
.
getValue
(
column
.
getColumnId
()));
if
(!
allColumns
.
contains
(
column
))
{
allColumns
.
add
(
column
);
}
...
...
@@ -118,17 +120,18 @@ public final class GeneratedKeys {
/**
* Returns generated keys.
*
* @return
result se
t with generated keys
* @return
local resul
t with generated keys
*/
public
SimpleResultSet
getKeys
(
)
{
SimpleResultSet
rs
=
new
SimpleResultSet
();
public
LocalResult
getKeys
(
Session
session
)
{
Database
db
=
session
==
null
?
null
:
session
.
getDatabase
();
if
(
Boolean
.
FALSE
.
equals
(
generatedKeysRequest
))
{
return
rs
;
return
new
LocalResult
()
;
}
ArrayList
<
ExpressionColumn
>
expressionColumns
;
if
(
Boolean
.
TRUE
.
equals
(
generatedKeysRequest
))
{
expressionColumns
=
new
ArrayList
<>(
allColumns
.
size
());
for
(
Column
column
:
allColumns
)
{
rs
.
addColumn
(
column
.
getName
(),
DataType
.
convertTypeToSQLType
(
column
.
getType
()),
MathUtils
.
convertLongToInt
(
column
.
getPrecision
()),
column
.
getScale
());
expressionColumns
.
add
(
new
ExpressionColumn
(
db
,
column
));
}
}
else
if
(
generatedKeysRequest
instanceof
int
[])
{
if
(
table
!=
null
)
{
...
...
@@ -136,21 +139,22 @@ public final class GeneratedKeys {
Column
[]
columns
=
table
.
getColumns
();
int
cnt
=
columns
.
length
;
allColumns
.
clear
();
expressionColumns
=
new
ArrayList
<>(
indices
.
length
);
for
(
int
idx
:
indices
)
{
if
(
idx
>=
1
&&
idx
<=
cnt
)
{
Column
column
=
columns
[
idx
-
1
];
rs
.
addColumn
(
column
.
getName
(),
DataType
.
convertTypeToSQLType
(
column
.
getType
()),
MathUtils
.
convertLongToInt
(
column
.
getPrecision
()),
column
.
getScale
());
expressionColumns
.
add
(
new
ExpressionColumn
(
db
,
column
));
allColumns
.
add
(
column
);
}
}
}
else
{
return
rs
;
return
new
LocalResult
()
;
}
}
else
if
(
generatedKeysRequest
instanceof
String
[])
{
if
(
table
!=
null
)
{
String
[]
names
=
(
String
[])
generatedKeysRequest
;
allColumns
.
clear
();
expressionColumns
=
new
ArrayList
<>(
names
.
length
);
for
(
String
name
:
names
)
{
Column
column
;
search:
if
(
table
.
doesColumnExist
(
name
))
{
...
...
@@ -169,30 +173,36 @@ public final class GeneratedKeys {
continue
;
}
}
rs
.
addColumn
(
column
.
getName
(),
DataType
.
convertTypeToSQLType
(
column
.
getType
()),
MathUtils
.
convertLongToInt
(
column
.
getPrecision
()),
column
.
getScale
());
expressionColumns
.
add
(
new
ExpressionColumn
(
db
,
column
));
allColumns
.
add
(
column
);
}
}
else
{
return
rs
;
return
new
LocalResult
()
;
}
}
else
{
return
rs
;
return
new
LocalResult
()
;
}
if
(
rs
.
getColumnCount
()
==
0
)
{
return
rs
;
int
columnCount
=
expressionColumns
.
size
();
if
(
columnCount
==
0
)
{
return
new
LocalResult
();
}
for
(
Map
<
Column
,
Object
>
map
:
data
)
{
Object
[]
row
=
new
Object
[
allColumns
.
size
()];
for
(
Map
.
Entry
<
Column
,
Object
>
entry
:
map
.
entrySet
())
{
LocalResult
result
=
new
LocalResult
(
session
,
expressionColumns
.
toArray
(
new
Expression
[
0
]),
columnCount
);
for
(
Map
<
Column
,
Value
>
map
:
data
)
{
Value
[]
row
=
new
Value
[
columnCount
];
for
(
Map
.
Entry
<
Column
,
Value
>
entry
:
map
.
entrySet
())
{
int
idx
=
allColumns
.
indexOf
(
entry
.
getKey
());
if
(
idx
>=
0
)
{
row
[
idx
]
=
entry
.
getValue
();
}
}
rs
.
addRow
(
row
);
for
(
int
i
=
0
;
i
<
columnCount
;
i
++)
{
if
(
row
[
i
]
==
null
)
{
row
[
i
]
=
ValueNull
.
INSTANCE
;
}
}
result
.
addRow
(
row
);
}
return
r
s
;
return
r
esult
;
}
/**
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论