Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
b552fab4
提交
b552fab4
authored
6 年前
作者:
Evgenij Ryazanov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix CAST and add tests
上级
54b2b09c
master
version-1.4.198
无相关合并请求
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
110 行增加
和
6 行删除
+110
-6
ExtTypeInfoGeometry.java
h2/src/main/org/h2/value/ExtTypeInfoGeometry.java
+4
-1
Value.java
h2/src/main/org/h2/value/Value.java
+10
-5
geometry.sql
h2/src/test/org/h2/test/scripts/datatypes/geometry.sql
+96
-0
没有找到文件。
h2/src/main/org/h2/value/ExtTypeInfoGeometry.java
浏览文件 @
b552fab4
...
...
@@ -52,7 +52,10 @@ public final class ExtTypeInfoGeometry extends ExtTypeInfo {
@Override
public
Value
cast
(
Value
value
)
{
ValueGeometry
g
=
(
ValueGeometry
)
value
.
convertTo
(
Value
.
GEOMETRY
);
if
(
value
.
getType
()
!=
Value
.
GEOMETRY
)
{
value
=
value
.
convertTo
(
Value
.
GEOMETRY
);
}
ValueGeometry
g
=
(
ValueGeometry
)
value
;
if
(
type
!=
0
&&
g
.
getTypeAndDimensionSystem
()
!=
type
||
srid
!=
null
&&
g
.
getSRID
()
!=
srid
)
{
throw
DbException
.
get
(
ErrorCode
.
CHECK_CONSTRAINT_VIOLATED_1
,
toString
(
g
.
getTypeAndDimensionSystem
(),
g
.
getSRID
())
+
" <> "
+
toString
());
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/value/Value.java
浏览文件 @
b552fab4
...
...
@@ -762,7 +762,7 @@ public abstract class Value {
case
UUID:
return
convertToUuid
();
case
GEOMETRY:
return
convertToGeometry
();
return
convertToGeometry
(
(
ExtTypeInfoGeometry
)
extTypeInfo
);
case
Value
.
INTERVAL_YEAR
:
case
Value
.
INTERVAL_MONTH
:
case
Value
.
INTERVAL_YEAR_TO_MONTH
:
...
...
@@ -1211,20 +1211,25 @@ public abstract class Value {
return
ValueUuid
.
get
(
getString
());
}
private
ValueGeometry
convertToGeometry
()
{
private
Value
convertToGeometry
(
ExtTypeInfoGeometry
extTypeInfo
)
{
ValueGeometry
result
;
switch
(
getType
())
{
case
BYTES:
return
ValueGeometry
.
getFromEWKB
(
getBytesNoCopy
());
result
=
ValueGeometry
.
getFromEWKB
(
getBytesNoCopy
());
break
;
case
JAVA_OBJECT:
Object
object
=
JdbcUtils
.
deserialize
(
getBytesNoCopy
(),
getDataHandler
());
if
(
DataType
.
isGeometry
(
object
))
{
return
ValueGeometry
.
getFromGeometry
(
object
);
result
=
ValueGeometry
.
getFromGeometry
(
object
);
break
;
}
//$FALL-THROUGH$
case
TIMESTAMP_TZ:
throw
getDataConversionError
(
GEOMETRY
);
default
:
result
=
ValueGeometry
.
get
(
getString
());
}
return
ValueGeometry
.
get
(
getString
())
;
return
extTypeInfo
!=
null
?
extTypeInfo
.
cast
(
result
)
:
result
;
}
private
ValueInterval
convertToIntervalYearMonth
(
int
targetType
)
{
...
...
This diff is collapsed.
Click to expand it.
h2/src/test/org/h2/test/scripts/datatypes/geometry.sql
浏览文件 @
b552fab4
...
...
@@ -2,3 +2,99 @@
-- and the EPL 1.0 (http://h2database.com/html/license.html).
-- Initial Developer: H2 Group
--
CREATE
TABLE
TEST
(
G
GEOMETRY
,
G_S
GEOMETRY
(
1
),
P
GEOMETRY
(
POINT
),
P_S
GEOMETRY
(
POINT
,
1
),
PZ1
GEOMETRY
(
POINT
Z
),
PZ2
GEOMETRY
(
POINTZ
),
PZ1_S
GEOMETRY
(
POINT
Z
,
1
),
PZ2_S
GEOMETRY
(
POINTZ
,
1
),
PM
GEOMETRY
(
POINT
M
),
PZM
GEOMETRY
(
POINT
ZM
),
PZM_S
GEOMETRY
(
POINT
ZM
,
-
100
),
LS
GEOMETRY
(
LINESTRING
),
PG
GEOMETRY
(
POLYGON
),
MP
GEOMETRY
(
MULTIPOINT
),
MLS
GEOMETRY
(
MULTILINESTRING
),
MPG
GEOMETRY
(
MULTIPOLYGON
),
GC
GEOMETRY
(
GEOMETRYCOLLECTION
));
>
ok
INSERT
INTO
TEST
VALUES
(
'POINT EMPTY'
,
'SRID=1;POINT EMPTY'
,
'POINT EMPTY'
,
'SRID=1;POINT EMPTY'
,
'POINT Z EMPTY'
,
'POINT Z EMPTY'
,
'SRID=1;POINT Z EMPTY'
,
'SRID=1;POINTZ EMPTY'
,
'POINT M EMPTY'
,
'POINT ZM EMPTY'
,
'SRID=-100;POINT ZM EMPTY'
,
'LINESTRING EMPTY'
,
'POLYGON EMPTY'
,
'MULTIPOINT EMPTY'
,
'MULTILINESTRING EMPTY'
,
'MULTIPOLYGON EMPTY'
,
'GEOMETRYCOLLECTION EMPTY'
);
>
update
count
:
1
SELECT
COLUMN_NAME
,
TYPE_NAME
,
COLUMN_TYPE
FROM
INFORMATION_SCHEMA
.
COLUMNS
WHERE
TABLE_NAME
=
'TEST'
ORDER
BY
ORDINAL_POSITION
;
>
COLUMN_NAME
TYPE_NAME
COLUMN_TYPE
>
----------- --------- ----------------------------
>
G
GEOMETRY
GEOMETRY
>
G_S
GEOMETRY
GEOMETRY
(
1
)
>
P
GEOMETRY
GEOMETRY
(
POINT
)
>
P_S
GEOMETRY
GEOMETRY
(
POINT
,
1
)
>
PZ1
GEOMETRY
GEOMETRY
(
POINT
Z
)
>
PZ2
GEOMETRY
GEOMETRY
(
POINT
Z
)
>
PZ1_S
GEOMETRY
GEOMETRY
(
POINT
Z
,
1
)
>
PZ2_S
GEOMETRY
GEOMETRY
(
POINT
Z
,
1
)
>
PM
GEOMETRY
GEOMETRY
(
POINT
M
)
>
PZM
GEOMETRY
GEOMETRY
(
POINT
ZM
)
>
PZM_S
GEOMETRY
GEOMETRY
(
POINT
ZM
,
-
100
)
>
LS
GEOMETRY
GEOMETRY
(
LINESTRING
)
>
PG
GEOMETRY
GEOMETRY
(
POLYGON
)
>
MP
GEOMETRY
GEOMETRY
(
MULTIPOINT
)
>
MLS
GEOMETRY
GEOMETRY
(
MULTILINESTRING
)
>
MPG
GEOMETRY
GEOMETRY
(
MULTIPOLYGON
)
>
GC
GEOMETRY
GEOMETRY
(
GEOMETRYCOLLECTION
)
>
rows
(
ordered
):
17
UPDATE
TEST
SET
G
=
'SRID=10;LINESTRING EMPTY'
;
>
update
count
:
1
UPDATE
TEST
SET
GC
=
'SRID=8;GEOMETRYCOLLECTION(POINT (1 1))'
;
>
update
count
:
1
UPDATE
TEST
SET
G_S
=
'POINT (1 1)'
;
>
exception
CHECK_CONSTRAINT_VIOLATED_1
UPDATE
TEST
SET
P
=
'POINT Z EMPTY'
;
>
exception
CHECK_CONSTRAINT_VIOLATED_1
UPDATE
TEST
SET
P
=
'POLYGON EMPTY'
;
>
exception
CHECK_CONSTRAINT_VIOLATED_1
UPDATE
TEST
SET
PZ1
=
'POINT EMPTY'
;
>
exception
CHECK_CONSTRAINT_VIOLATED_1
SELECT
*
FROM
TEST
;
>
G
G_S
P
P_S
PZ1
PZ2
PZ1_S
PZ2_S
PM
PZM
PZM_S
LS
PG
MP
MLS
MPG
GC
>
------------------------ ------------------ ----------- ------------------ ------------- ------------- -------------------- -------------------- ------------- -------------- ------------------------ ---------------- ------------- ---------------- --------------------- ------------------ ---------------------------------------
>
SRID
=
10
;
LINESTRING
EMPTY
SRID
=
1
;
POINT
EMPTY
POINT
EMPTY
SRID
=
1
;
POINT
EMPTY
POINT
Z
EMPTY
POINT
Z
EMPTY
SRID
=
1
;
POINT
Z
EMPTY
SRID
=
1
;
POINT
Z
EMPTY
POINT
M
EMPTY
POINT
ZM
EMPTY
SRID
=-
100
;
POINT
ZM
EMPTY
LINESTRING
EMPTY
POLYGON
EMPTY
MULTIPOINT
EMPTY
MULTILINESTRING
EMPTY
MULTIPOLYGON
EMPTY
SRID
=
8
;
GEOMETRYCOLLECTION
(
POINT
(
1
1
))
>
rows
:
1
SELECT
G
FROM
TEST
WHERE
P_S
=
'SRID=1;POINT EMPTY'
;
>>
SRID
=
10
;
LINESTRING
EMPTY
SELECT
G
FROM
TEST
WHERE
P_S
=
'GEOMETRYCOLLECTION Z EMPTY'
;
>
exception
CHECK_CONSTRAINT_VIOLATED_1
CREATE
SPATIAL
INDEX
IDX
ON
TEST
(
GC
);
>
ok
SELECT
P
FROM
TEST
WHERE
GC
=
'SRID=8;GEOMETRYCOLLECTION (POINT (1 1))'
;
>>
POINT
EMPTY
SELECT
P
FROM
TEST
WHERE
GC
=
'SRID=8;GEOMETRYCOLLECTION Z (POINT (1 1 1))'
;
>
exception
CHECK_CONSTRAINT_VIOLATED_1
SELECT
CAST
(
'POINT EMPTY'
AS
GEOMETRY
(
POINT
));
>>
POINT
EMPTY
SELECT
CAST
(
'POINT EMPTY'
AS
GEOMETRY
(
POINT
Z
));
>
exception
CHECK_CONSTRAINT_VIOLATED_1
SELECT
CAST
(
'POINT EMPTY'
AS
GEOMETRY
(
POINT
,
0
));
>>
POINT
EMPTY
SELECT
CAST
(
'POINT EMPTY'
AS
GEOMETRY
(
POINT
,
1
));
>
exception
CHECK_CONSTRAINT_VIOLATED_1
SELECT
CAST
(
'POINT EMPTY'
AS
GEOMETRY
(
POLYGON
));
>
exception
CHECK_CONSTRAINT_VIOLATED_1
DROP
TABLE
TEST
;
>
ok
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论