Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
471902e0
提交
471902e0
authored
8 年前
作者:
Sergi Vladykin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix for #349
上级
4231eb92
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
35 行增加
和
12 行删除
+35
-12
PgServerThread.java
h2/src/main/org/h2/server/pg/PgServerThread.java
+19
-6
TestPgServer.java
h2/src/test/org/h2/test/unit/TestPgServer.java
+16
-6
没有找到文件。
h2/src/main/org/h2/server/pg/PgServerThread.java
浏览文件 @
471902e0
...
...
@@ -230,15 +230,28 @@ public class PgServerThread implements Runnable {
Prepared
p
=
new
Prepared
();
p
.
name
=
readString
();
p
.
sql
=
getSQL
(
readString
());
int
count
=
readShort
();
p
.
paramType
=
new
int
[
count
];
for
(
int
i
=
0
;
i
<
count
;
i
++)
{
int
type
=
readInt
();
server
.
checkType
(
type
);
p
.
paramType
[
i
]
=
type
;
int
paramTypesCount
=
readShort
();
int
[]
paramTypes
=
null
;
if
(
paramTypesCount
>
0
)
{
paramTypes
=
new
int
[
paramTypesCount
];
for
(
int
i
=
0
;
i
<
paramTypesCount
;
i
++)
{
paramTypes
[
i
]
=
readInt
();
}
}
try
{
p
.
prep
=
(
JdbcPreparedStatement
)
conn
.
prepareStatement
(
p
.
sql
);
ParameterMetaData
meta
=
p
.
prep
.
getParameterMetaData
();
p
.
paramType
=
new
int
[
meta
.
getParameterCount
()];
for
(
int
i
=
0
;
i
<
p
.
paramType
.
length
;
i
++)
{
int
type
;
if
(
i
<
paramTypesCount
&&
paramTypes
[
i
]
!=
0
)
{
type
=
paramTypes
[
i
];
server
.
checkType
(
type
);
}
else
{
type
=
PgServer
.
convertType
(
meta
.
getParameterType
(
i
+
1
));
}
p
.
paramType
[
i
]
=
type
;
}
prepared
.
put
(
p
.
name
,
p
);
sendParseComplete
();
}
catch
(
Exception
e
)
{
...
...
This diff is collapsed.
Click to expand it.
h2/src/test/org/h2/test/unit/TestPgServer.java
浏览文件 @
471902e0
...
...
@@ -5,8 +5,10 @@
*/
package
org
.
h2
.
test
.
unit
;
import
java.math.BigDecimal
;
import
java.sql.Connection
;
import
java.sql.DatabaseMetaData
;
import
java.sql.Date
;
import
java.sql.DriverManager
;
import
java.sql.ParameterMetaData
;
import
java.sql.PreparedStatement
;
...
...
@@ -14,6 +16,7 @@ import java.sql.ResultSet;
import
java.sql.ResultSetMetaData
;
import
java.sql.SQLException
;
import
java.sql.Statement
;
import
java.sql.Timestamp
;
import
java.sql.Types
;
import
java.util.Properties
;
import
java.util.concurrent.Callable
;
...
...
@@ -429,18 +432,25 @@ public class TestPgServer extends TestBase {
"jdbc:postgresql://localhost:5535/test"
,
props
);
Statement
stmt
=
conn
.
createStatement
();
stmt
.
executeUpdate
(
"create table t1 (id integer, value boolean)"
);
stmt
.
executeUpdate
(
"INSERT INTO t1 VALUES (1,'t')"
);
stmt
.
executeUpdate
(
"INSERT INTO t1 VALUES (2,'f')"
);
stmt
.
executeUpdate
(
"create table t1 (id integer, value timestamp)"
);
stmt
.
close
();
PreparedStatement
pstmt
=
conn
.
prepareStatement
(
"
SELECT * FROM t1 WHERE value = ?
"
);
PreparedStatement
pstmt
=
conn
.
prepareStatement
(
"
insert into t1 values(100500, ?)
"
);
// assertTrue(((PGStatement) pstmt).isUseServerPrepare());
assertEquals
(
Types
.
TIMESTAMP
,
pstmt
.
getParameterMetaData
().
getParameterType
(
1
));
pstmt
.
setObject
(
1
,
false
,
Types
.
OTHER
);
Timestamp
t
=
new
Timestamp
(
System
.
currentTimeMillis
());
pstmt
.
setObject
(
1
,
t
);
assertEquals
(
1
,
pstmt
.
executeUpdate
());
pstmt
.
close
();
pstmt
=
conn
.
prepareStatement
(
"SELECT * FROM t1 WHERE value = ?"
);
assertEquals
(
Types
.
TIMESTAMP
,
pstmt
.
getParameterMetaData
().
getParameterType
(
1
));
pstmt
.
setObject
(
1
,
t
);
ResultSet
rs
=
pstmt
.
executeQuery
();
assertTrue
(
rs
.
next
());
assertEquals
(
2
,
rs
.
getInt
(
1
));
assertEquals
(
100500
,
rs
.
getInt
(
1
));
rs
.
close
();
pstmt
.
close
();
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论