Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
8a670816
Unverified
提交
8a670816
authored
7 年前
作者:
Noel Grandin
提交者:
GitHub
7 年前
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #801 from katzyn/PgServer
Fix NULL support in PgServer for primitive types too
上级
0295a962
0d92749b
master
version-1.4.198
version-1.4.197
无相关合并请求
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
70 行增加
和
24 行删除
+70
-24
PgServerThread.java
h2/src/main/org/h2/server/pg/PgServerThread.java
+56
-22
TestPgServer.java
h2/src/test/org/h2/test/unit/TestPgServer.java
+14
-2
没有找到文件。
h2/src/main/org/h2/server/pg/PgServerThread.java
浏览文件 @
8a670816
...
...
@@ -537,10 +537,16 @@ public class PgServerThread implements Runnable {
if
(
text
)
{
// plain text
switch
(
pgType
)
{
case
PgServer
.
PG_TYPE_BOOL
:
writeInt
(
1
);
dataOut
.
writeByte
(
rs
.
getBoolean
(
column
)
?
't'
:
'f'
);
case
PgServer
.
PG_TYPE_BOOL
:
{
boolean
b
=
rs
.
getBoolean
(
column
);
if
(
rs
.
wasNull
())
{
writeInt
(-
1
);
}
else
{
writeInt
(
1
);
dataOut
.
writeByte
(
b
?
't'
:
'f'
);
}
break
;
}
default
:
String
s
=
rs
.
getString
(
column
);
if
(
s
==
null
)
{
...
...
@@ -554,26 +560,56 @@ public class PgServerThread implements Runnable {
}
else
{
// binary
switch
(
pgType
)
{
case
PgServer
.
PG_TYPE_INT2
:
writeInt
(
2
);
writeShort
(
rs
.
getShort
(
column
));
case
PgServer
.
PG_TYPE_INT2
:
{
short
s
=
rs
.
getShort
(
column
);
if
(
rs
.
wasNull
())
{
writeInt
(-
1
);
}
else
{
writeInt
(
2
);
writeShort
(
s
);
}
break
;
case
PgServer
.
PG_TYPE_INT4
:
writeInt
(
4
);
writeInt
(
rs
.
getInt
(
column
));
}
case
PgServer
.
PG_TYPE_INT4
:
{
int
i
=
rs
.
getInt
(
column
);
if
(
rs
.
wasNull
())
{
writeInt
(-
1
);
}
else
{
writeInt
(
4
);
writeInt
(
i
);
}
break
;
case
PgServer
.
PG_TYPE_INT8
:
writeInt
(
8
);
dataOut
.
writeLong
(
rs
.
getLong
(
column
));
}
case
PgServer
.
PG_TYPE_INT8
:
{
long
l
=
rs
.
getLong
(
column
);
if
(
rs
.
wasNull
())
{
writeInt
(-
1
);
}
else
{
writeInt
(
8
);
dataOut
.
writeLong
(
l
);
}
break
;
case
PgServer
.
PG_TYPE_FLOAT4
:
writeInt
(
4
);
dataOut
.
writeFloat
(
rs
.
getFloat
(
column
));
}
case
PgServer
.
PG_TYPE_FLOAT4
:
{
float
f
=
rs
.
getFloat
(
column
);
if
(
rs
.
wasNull
())
{
writeInt
(-
1
);
}
else
{
writeInt
(
4
);
dataOut
.
writeFloat
(
f
);
}
break
;
case
PgServer
.
PG_TYPE_FLOAT8
:
writeInt
(
8
);
dataOut
.
writeDouble
(
rs
.
getDouble
(
column
));
}
case
PgServer
.
PG_TYPE_FLOAT8
:
{
double
d
=
rs
.
getDouble
(
column
);
if
(
rs
.
wasNull
())
{
writeInt
(-
1
);
}
else
{
writeInt
(
8
);
dataOut
.
writeDouble
(
d
);
}
break
;
}
case
PgServer
.
PG_TYPE_BYTEA
:
{
byte
[]
data
=
rs
.
getBytes
(
column
);
if
(
data
==
null
)
{
...
...
@@ -612,8 +648,7 @@ public class PgServerThread implements Runnable {
m
/=
1000
;
m
=
Double
.
doubleToLongBits
(
m
);
}
writeInt
((
int
)
(
m
>>>
32
));
writeInt
((
int
)
m
);
dataOut
.
writeLong
(
m
);
}
break
;
}
...
...
@@ -637,8 +672,7 @@ public class PgServerThread implements Runnable {
// double format
m
=
Double
.
doubleToLongBits
(
m
+
nanos
*
0.000000001
);
}
writeInt
((
int
)
(
m
>>>
32
));
writeInt
((
int
)
m
);
dataOut
.
writeLong
(
m
);
}
break
;
}
...
...
This diff is collapsed.
Click to expand it.
h2/src/test/org/h2/test/unit/TestPgServer.java
浏览文件 @
8a670816
...
...
@@ -5,6 +5,7 @@
*/
package
org
.
h2
.
test
.
unit
;
import
java.math.BigDecimal
;
import
java.sql.Connection
;
import
java.sql.DatabaseMetaData
;
import
java.sql.Date
;
...
...
@@ -410,10 +411,10 @@ public class TestPgServer extends TestBase {
"create table test(x1 varchar, x2 int, "
+
"x3 smallint, x4 bigint, x5 double, x6 float, "
+
"x7 real, x8 boolean, x9 char, x10 bytea, "
+
"x11 date, x12 time, x13 timestamp)"
);
"x11 date, x12 time, x13 timestamp
, x14 numeric
)"
);
PreparedStatement
ps
=
conn
.
prepareStatement
(
"insert into test values (?,?,?,?,?,?,?,?,?,?,?,?,?)"
);
"insert into test values (?,?,?,?,?,?,?,?,?,?,?,?,?
,?
)"
);
ps
.
setString
(
1
,
"test"
);
ps
.
setInt
(
2
,
12345678
);
ps
.
setShort
(
3
,
(
short
)
12345
);
...
...
@@ -427,6 +428,11 @@ public class TestPgServer extends TestBase {
ps
.
setDate
(
11
,
Date
.
valueOf
(
"2015-01-31"
));
ps
.
setTime
(
12
,
Time
.
valueOf
(
"20:11:15"
));
ps
.
setTimestamp
(
13
,
Timestamp
.
valueOf
(
"2001-10-30 14:16:10.111"
));
ps
.
setBigDecimal
(
14
,
new
BigDecimal
(
"12345678901234567890.12345"
));
ps
.
execute
();
for
(
int
i
=
1
;
i
<=
14
;
i
++)
{
ps
.
setNull
(
i
,
Types
.
NULL
);
}
ps
.
execute
();
ResultSet
rs
=
stat
.
executeQuery
(
"select * from test"
);
...
...
@@ -445,6 +451,12 @@ public class TestPgServer extends TestBase {
assertEquals
(
Date
.
valueOf
(
"2015-01-31"
),
rs
.
getDate
(
11
));
assertEquals
(
Time
.
valueOf
(
"20:11:15"
),
rs
.
getTime
(
12
));
assertEquals
(
Timestamp
.
valueOf
(
"2001-10-30 14:16:10.111"
),
rs
.
getTimestamp
(
13
));
assertEquals
(
new
BigDecimal
(
"12345678901234567890.12345"
),
rs
.
getBigDecimal
(
14
));
assertTrue
(
rs
.
next
());
for
(
int
i
=
1
;
i
<=
14
;
i
++)
{
assertNull
(
rs
.
getObject
(
i
));
}
assertFalse
(
rs
.
next
());
conn
.
close
();
}
finally
{
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论