Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
469c5639
提交
469c5639
authored
13 年前
作者:
Thomas Mueller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Issue 355: ResultSet.findColumn returns the last column index for ambiguous column names.
上级
876a9574
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
27 行增加
和
9 行删除
+27
-9
JdbcResultSet.java
h2/src/main/org/h2/jdbc/JdbcResultSet.java
+17
-9
TestResultSet.java
h2/src/test/org/h2/test/jdbc/TestResultSet.java
+10
-0
没有找到文件。
h2/src/main/org/h2/jdbc/JdbcResultSet.java
浏览文件 @
469c5639
...
@@ -2856,25 +2856,23 @@ public class JdbcResultSet extends TraceObject implements ResultSet {
...
@@ -2856,25 +2856,23 @@ public class JdbcResultSet extends TraceObject implements ResultSet {
if
(
columnCount
>=
SysProperties
.
MIN_COLUMN_NAME_MAP
)
{
if
(
columnCount
>=
SysProperties
.
MIN_COLUMN_NAME_MAP
)
{
if
(
columnLabelMap
==
null
)
{
if
(
columnLabelMap
==
null
)
{
HashMap
<
String
,
Integer
>
map
=
New
.
hashMap
(
columnCount
);
HashMap
<
String
,
Integer
>
map
=
New
.
hashMap
(
columnCount
);
// first column names
// column labels have higher priority
for
(
int
i
=
0
;
i
<
columnCount
;
i
++)
{
String
c
=
StringUtils
.
toUpperEnglish
(
result
.
getAlias
(
i
));
mapColumn
(
map
,
c
,
i
);
}
for
(
int
i
=
0
;
i
<
columnCount
;
i
++)
{
for
(
int
i
=
0
;
i
<
columnCount
;
i
++)
{
String
colName
=
result
.
getColumnName
(
i
);
String
colName
=
result
.
getColumnName
(
i
);
if
(
colName
!=
null
)
{
if
(
colName
!=
null
)
{
colName
=
StringUtils
.
toUpperEnglish
(
colName
);
colName
=
StringUtils
.
toUpperEnglish
(
colName
);
map
.
put
(
colName
,
i
);
map
Column
(
map
,
colName
,
i
);
String
tabName
=
result
.
getTableName
(
i
);
String
tabName
=
result
.
getTableName
(
i
);
if
(
tabName
!=
null
)
{
if
(
tabName
!=
null
)
{
colName
=
StringUtils
.
toUpperEnglish
(
tabName
)
+
"."
+
colName
;
colName
=
StringUtils
.
toUpperEnglish
(
tabName
)
+
"."
+
colName
;
map
.
put
(
colName
,
i
);
map
Column
(
map
,
colName
,
i
);
}
}
}
}
}
}
// column labels have higher priority
// column names with the same name are replaced
for
(
int
i
=
0
;
i
<
columnCount
;
i
++)
{
String
c
=
StringUtils
.
toUpperEnglish
(
result
.
getAlias
(
i
));
map
.
put
(
c
,
i
);
}
// assign at the end so concurrent access is supported
// assign at the end so concurrent access is supported
columnLabelMap
=
map
;
columnLabelMap
=
map
;
}
}
...
@@ -2908,6 +2906,16 @@ public class JdbcResultSet extends TraceObject implements ResultSet {
...
@@ -2908,6 +2906,16 @@ public class JdbcResultSet extends TraceObject implements ResultSet {
throw
DbException
.
get
(
ErrorCode
.
COLUMN_NOT_FOUND_1
,
columnLabel
);
throw
DbException
.
get
(
ErrorCode
.
COLUMN_NOT_FOUND_1
,
columnLabel
);
}
}
private
void
mapColumn
(
HashMap
<
String
,
Integer
>
map
,
String
label
,
int
index
)
{
// put the index (usually that's the only operation)
Integer
old
=
map
.
put
(
label
,
index
);
if
(
old
!=
null
)
{
// if there was a clash (which is seldom),
// put the old one back
map
.
put
(
label
,
old
);
}
}
private
void
checkColumnIndex
(
int
columnIndex
)
{
private
void
checkColumnIndex
(
int
columnIndex
)
{
checkClosed
();
checkClosed
();
if
(
columnIndex
<
1
||
columnIndex
>
columnCount
)
{
if
(
columnIndex
<
1
||
columnIndex
>
columnCount
)
{
...
...
This diff is collapsed.
Click to expand it.
h2/src/test/org/h2/test/jdbc/TestResultSet.java
浏览文件 @
469c5639
...
@@ -55,6 +55,7 @@ public class TestResultSet extends TestBase {
...
@@ -55,6 +55,7 @@ public class TestResultSet extends TestBase {
stat
=
conn
.
createStatement
();
stat
=
conn
.
createStatement
();
testAmbiguousColumnNames
();
testInsertRowWithUpdateableResultSetDefault
();
testInsertRowWithUpdateableResultSetDefault
();
testBeforeFirstAfterLast
();
testBeforeFirstAfterLast
();
testParseSpecialValues
();
testParseSpecialValues
();
...
@@ -91,6 +92,15 @@ public class TestResultSet extends TestBase {
...
@@ -91,6 +92,15 @@ public class TestResultSet extends TestBase {
}
}
private
void
testAmbiguousColumnNames
()
throws
SQLException
{
stat
.
execute
(
"create table test(id int)"
);
stat
.
execute
(
"insert into test values(1)"
);
ResultSet
rs
=
stat
.
executeQuery
(
"select 1 x, 2 x, 3 x, 4 x, 5 x, 6 x from test"
);
rs
.
next
();
assertEquals
(
1
,
rs
.
getInt
(
"x"
));
stat
.
execute
(
"drop table test"
);
}
private
void
testInsertRowWithUpdateableResultSetDefault
()
throws
SQLException
{
private
void
testInsertRowWithUpdateableResultSetDefault
()
throws
SQLException
{
stat
.
execute
(
"create table test(id int primary key, data varchar(255) default 'Hello')"
);
stat
.
execute
(
"create table test(id int primary key, data varchar(255) default 'Hello')"
);
PreparedStatement
prep
=
conn
.
prepareStatement
(
"select * from test"
,
PreparedStatement
prep
=
conn
.
prepareStatement
(
"select * from test"
,
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论