mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
bug 801466 ST_INTERSECTION() returns invalid value on empty intersection in maria-5.3-gis.
We didn't implement an empty geometry. And returning NULL instead of it is not quite correct. So here is the implementation of the empty value as GEOMETRYCOLLECTION(). per-file comments: mysql-test/r/gis-precise.result bug 801466 ST_INTERSECTION() returns invalid value on empty intersection in maria-5.3-gis. test result updated. mysql-test/r/gis.result bug 801466 ST_INTERSECTION() returns invalid value on empty intersection in maria-5.3-gis. test result updated. mysql-test/t/gis-precise.test bug 801466 ST_INTERSECTION() returns invalid value on empty intersection in maria-5.3-gis. test case added. mysql-test/t/gis.test bug 801466 ST_INTERSECTION() returns invalid value on empty intersection in maria-5.3-gis. test case added. sql/field.cc bug 801466 ST_INTERSECTION() returns invalid value on empty intersection in maria-5.3-gis. store GEOMETRYCOLLECTION() properly. sql/gcalc_tools.cc bug 801466 ST_INTERSECTION() returns invalid value on empty intersection in maria-5.3-gis. create the GEOMETRYCOLLECTION() for the empty result. sql/gstream.h bug 801466 ST_INTERSECTION() returns invalid value on empty intersection in maria-5.3-gis. next_symbol() added. sql/spatial.cc bug 801466 ST_INTERSECTION() returns invalid value on empty intersection in maria-5.3-gis. code modified to handle 0 geometries in the GEOMETRYCOLLECTION properly.
This commit is contained in:
parent
c937b7588f
commit
eefff87652
8 changed files with 55 additions and 22 deletions
|
@ -317,3 +317,6 @@ AsText( ST_UNION(
|
||||||
PolygonFromText(' POLYGON( ( 2 2 , 3 2 , 7 5 , 2 0 , 2 2 ) ) ') ,
|
PolygonFromText(' POLYGON( ( 2 2 , 3 2 , 7 5 , 2 0 , 2 2 ) ) ') ,
|
||||||
PolygonFromText(' POLYGON( ( 2 2 , 3 2 , 3 3 , 2 5 , 2 2 ) ) ') ) )
|
PolygonFromText(' POLYGON( ( 2 2 , 3 2 , 3 3 , 2 5 , 2 2 ) ) ') ) )
|
||||||
POLYGON((2 0,2 5,3 3,3 2,7 5,2 0))
|
POLYGON((2 0,2 5,3 3,3 2,7 5,2 0))
|
||||||
|
SELECT AsText(ST_INTERSECTION(LinestringFromText('LINESTRING(1 1, 2 2)'), GeometryFromText('LINESTRING(3 3, 4 4)')));
|
||||||
|
AsText(ST_INTERSECTION(LinestringFromText('LINESTRING(1 1, 2 2)'), GeometryFromText('LINESTRING(3 3, 4 4)')))
|
||||||
|
GEOMETRYCOLLECTION()
|
||||||
|
|
|
@ -66,7 +66,8 @@ INSERT INTO gis_multi_polygon VALUES
|
||||||
(119, MPolyFromWKB(AsWKB(MultiPolygon(Polygon(LineString(Point(0, 3), Point(3, 3), Point(3, 0), Point(0, 3)))))));
|
(119, MPolyFromWKB(AsWKB(MultiPolygon(Polygon(LineString(Point(0, 3), Point(3, 3), Point(3, 0), Point(0, 3)))))));
|
||||||
INSERT INTO gis_geometrycollection VALUES
|
INSERT INTO gis_geometrycollection VALUES
|
||||||
(120, GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))')),
|
(120, GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))')),
|
||||||
(121, GeometryFromWKB(AsWKB(GeometryCollection(Point(44, 6), LineString(Point(3, 6), Point(7, 9))))));
|
(121, GeometryFromWKB(AsWKB(GeometryCollection(Point(44, 6), LineString(Point(3, 6), Point(7, 9)))))),
|
||||||
|
(122, GeomFromText('GeometryCollection()'));
|
||||||
INSERT into gis_geometry SELECT * FROM gis_point;
|
INSERT into gis_geometry SELECT * FROM gis_point;
|
||||||
INSERT into gis_geometry SELECT * FROM gis_line;
|
INSERT into gis_geometry SELECT * FROM gis_line;
|
||||||
INSERT into gis_geometry SELECT * FROM gis_polygon;
|
INSERT into gis_geometry SELECT * FROM gis_polygon;
|
||||||
|
@ -109,6 +110,7 @@ SELECT fid, AsText(g) FROM gis_geometrycollection;
|
||||||
fid AsText(g)
|
fid AsText(g)
|
||||||
120 GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 10))
|
120 GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 10))
|
||||||
121 GEOMETRYCOLLECTION(POINT(44 6),LINESTRING(3 6,7 9))
|
121 GEOMETRYCOLLECTION(POINT(44 6),LINESTRING(3 6,7 9))
|
||||||
|
122 GEOMETRYCOLLECTION()
|
||||||
SELECT fid, AsText(g) FROM gis_geometry;
|
SELECT fid, AsText(g) FROM gis_geometry;
|
||||||
fid AsText(g)
|
fid AsText(g)
|
||||||
101 POINT(10 10)
|
101 POINT(10 10)
|
||||||
|
@ -132,6 +134,7 @@ fid AsText(g)
|
||||||
119 MULTIPOLYGON(((0 3,3 3,3 0,0 3)))
|
119 MULTIPOLYGON(((0 3,3 3,3 0,0 3)))
|
||||||
120 GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 10))
|
120 GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 10))
|
||||||
121 GEOMETRYCOLLECTION(POINT(44 6),LINESTRING(3 6,7 9))
|
121 GEOMETRYCOLLECTION(POINT(44 6),LINESTRING(3 6,7 9))
|
||||||
|
122 GEOMETRYCOLLECTION()
|
||||||
SELECT fid, Dimension(g) FROM gis_geometry;
|
SELECT fid, Dimension(g) FROM gis_geometry;
|
||||||
fid Dimension(g)
|
fid Dimension(g)
|
||||||
101 0
|
101 0
|
||||||
|
@ -155,6 +158,7 @@ fid Dimension(g)
|
||||||
119 2
|
119 2
|
||||||
120 1
|
120 1
|
||||||
121 1
|
121 1
|
||||||
|
122 0
|
||||||
SELECT fid, GeometryType(g) FROM gis_geometry;
|
SELECT fid, GeometryType(g) FROM gis_geometry;
|
||||||
fid GeometryType(g)
|
fid GeometryType(g)
|
||||||
101 POINT
|
101 POINT
|
||||||
|
@ -178,6 +182,7 @@ fid GeometryType(g)
|
||||||
119 MULTIPOLYGON
|
119 MULTIPOLYGON
|
||||||
120 GEOMETRYCOLLECTION
|
120 GEOMETRYCOLLECTION
|
||||||
121 GEOMETRYCOLLECTION
|
121 GEOMETRYCOLLECTION
|
||||||
|
122 GEOMETRYCOLLECTION
|
||||||
SELECT fid, IsEmpty(g) FROM gis_geometry;
|
SELECT fid, IsEmpty(g) FROM gis_geometry;
|
||||||
fid IsEmpty(g)
|
fid IsEmpty(g)
|
||||||
101 0
|
101 0
|
||||||
|
@ -201,6 +206,7 @@ fid IsEmpty(g)
|
||||||
119 0
|
119 0
|
||||||
120 0
|
120 0
|
||||||
121 0
|
121 0
|
||||||
|
122 0
|
||||||
SELECT fid, AsText(Envelope(g)) FROM gis_geometry;
|
SELECT fid, AsText(Envelope(g)) FROM gis_geometry;
|
||||||
fid AsText(Envelope(g))
|
fid AsText(Envelope(g))
|
||||||
101 POLYGON((10 10,10 10,10 10,10 10,10 10))
|
101 POLYGON((10 10,10 10,10 10,10 10,10 10))
|
||||||
|
@ -224,9 +230,10 @@ fid AsText(Envelope(g))
|
||||||
119 POLYGON((0 0,3 0,3 3,0 3,0 0))
|
119 POLYGON((0 0,3 0,3 3,0 3,0 0))
|
||||||
120 POLYGON((0 0,10 0,10 10,0 10,0 0))
|
120 POLYGON((0 0,10 0,10 10,0 10,0 0))
|
||||||
121 POLYGON((3 6,44 6,44 9,3 9,3 6))
|
121 POLYGON((3 6,44 6,44 9,3 9,3 6))
|
||||||
|
122 POLYGON((1.79769313486232e+308 1.79769313486232e+308,-1.79769313486232e+308 1.79769313486232e+308,-1.79769313486232e+308 -1.79769313486232e+308,1.79769313486232e+308 -1.79769313486232e+308,1.79769313486232e+308 1.79769313486232e+308))
|
||||||
explain extended select Dimension(g), GeometryType(g), IsEmpty(g), AsText(Envelope(g)) from gis_geometry;
|
explain extended select Dimension(g), GeometryType(g), IsEmpty(g), AsText(Envelope(g)) from gis_geometry;
|
||||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
1 SIMPLE gis_geometry ALL NULL NULL NULL NULL 21 100.00
|
1 SIMPLE gis_geometry ALL NULL NULL NULL NULL 22 100.00
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select st_dimension(`test`.`gis_geometry`.`g`) AS `Dimension(g)`,st_geometrytype(`test`.`gis_geometry`.`g`) AS `GeometryType(g)`,st_isempty(`test`.`gis_geometry`.`g`) AS `IsEmpty(g)`,st_astext(st_envelope(`test`.`gis_geometry`.`g`)) AS `AsText(Envelope(g))` from `test`.`gis_geometry`
|
Note 1003 select st_dimension(`test`.`gis_geometry`.`g`) AS `Dimension(g)`,st_geometrytype(`test`.`gis_geometry`.`g`) AS `GeometryType(g)`,st_isempty(`test`.`gis_geometry`.`g`) AS `IsEmpty(g)`,st_astext(st_envelope(`test`.`gis_geometry`.`g`)) AS `AsText(Envelope(g))` from `test`.`gis_geometry`
|
||||||
SELECT fid, X(g) FROM gis_point;
|
SELECT fid, X(g) FROM gis_point;
|
||||||
|
@ -345,6 +352,7 @@ SELECT fid, NumGeometries(g) from gis_geometrycollection;
|
||||||
fid NumGeometries(g)
|
fid NumGeometries(g)
|
||||||
120 2
|
120 2
|
||||||
121 2
|
121 2
|
||||||
|
122 0
|
||||||
explain extended SELECT fid, NumGeometries(g) from gis_multi_point;
|
explain extended SELECT fid, NumGeometries(g) from gis_multi_point;
|
||||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
1 SIMPLE gis_multi_point ALL NULL NULL NULL NULL 3 100.00
|
1 SIMPLE gis_multi_point ALL NULL NULL NULL NULL 3 100.00
|
||||||
|
@ -369,10 +377,12 @@ SELECT fid, AsText(GeometryN(g, 2)) from gis_geometrycollection;
|
||||||
fid AsText(GeometryN(g, 2))
|
fid AsText(GeometryN(g, 2))
|
||||||
120 LINESTRING(0 0,10 10)
|
120 LINESTRING(0 0,10 10)
|
||||||
121 LINESTRING(3 6,7 9)
|
121 LINESTRING(3 6,7 9)
|
||||||
|
122 NULL
|
||||||
SELECT fid, AsText(GeometryN(g, 1)) from gis_geometrycollection;
|
SELECT fid, AsText(GeometryN(g, 1)) from gis_geometrycollection;
|
||||||
fid AsText(GeometryN(g, 1))
|
fid AsText(GeometryN(g, 1))
|
||||||
120 POINT(0 0)
|
120 POINT(0 0)
|
||||||
121 POINT(44 6)
|
121 POINT(44 6)
|
||||||
|
122 NULL
|
||||||
explain extended SELECT fid, AsText(GeometryN(g, 2)) from gis_multi_point;
|
explain extended SELECT fid, AsText(GeometryN(g, 2)) from gis_multi_point;
|
||||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
1 SIMPLE gis_multi_point ALL NULL NULL NULL NULL 3 100.00
|
1 SIMPLE gis_multi_point ALL NULL NULL NULL NULL 3 100.00
|
||||||
|
@ -386,16 +396,21 @@ FROM gis_geometrycollection g1, gis_geometrycollection g2 ORDER BY first, second
|
||||||
first second w c o e d t i r
|
first second w c o e d t i r
|
||||||
120 120 1 1 0 1 0 1 1 1
|
120 120 1 1 0 1 0 1 1 1
|
||||||
120 121 0 0 1 0 0 0 1 0
|
120 121 0 0 1 0 0 0 1 0
|
||||||
|
120 122 0 1 0 0 1 0 0 0
|
||||||
121 120 0 0 1 0 0 0 1 0
|
121 120 0 0 1 0 0 0 1 0
|
||||||
121 121 1 1 0 1 0 1 1 1
|
121 121 1 1 0 1 0 1 1 1
|
||||||
|
121 122 0 1 0 0 1 0 0 0
|
||||||
|
122 120 1 0 0 0 1 0 0 0
|
||||||
|
122 121 1 0 0 0 1 0 0 0
|
||||||
|
122 122 1 1 0 1 1 0 0 0
|
||||||
explain extended SELECT g1.fid as first, g2.fid as second,
|
explain extended SELECT g1.fid as first, g2.fid as second,
|
||||||
Within(g1.g, g2.g) as w, Contains(g1.g, g2.g) as c, Overlaps(g1.g, g2.g) as o,
|
Within(g1.g, g2.g) as w, Contains(g1.g, g2.g) as c, Overlaps(g1.g, g2.g) as o,
|
||||||
Equals(g1.g, g2.g) as e, Disjoint(g1.g, g2.g) as d, Touches(g1.g, g2.g) as t,
|
Equals(g1.g, g2.g) as e, Disjoint(g1.g, g2.g) as d, Touches(g1.g, g2.g) as t,
|
||||||
Intersects(g1.g, g2.g) as i, Crosses(g1.g, g2.g) as r
|
Intersects(g1.g, g2.g) as i, Crosses(g1.g, g2.g) as r
|
||||||
FROM gis_geometrycollection g1, gis_geometrycollection g2 ORDER BY first, second;
|
FROM gis_geometrycollection g1, gis_geometrycollection g2 ORDER BY first, second;
|
||||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
1 SIMPLE g1 ALL NULL NULL NULL NULL 2 100.00 Using temporary; Using filesort
|
1 SIMPLE g1 ALL NULL NULL NULL NULL 3 100.00 Using temporary; Using filesort
|
||||||
1 SIMPLE g2 ALL NULL NULL NULL NULL 2 100.00 Using join buffer (flat, BNL join)
|
1 SIMPLE g2 ALL NULL NULL NULL NULL 3 100.00 Using join buffer (flat, BNL join)
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select `test`.`g1`.`fid` AS `first`,`test`.`g2`.`fid` AS `second`,st_within(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `w`,st_contains(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `c`,mbroverlaps(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `o`,mbrequals(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `e`,mbrdisjoint(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `d`,st_touches(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `t`,mbrintersects(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `i`,st_crosses(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `r` from `test`.`gis_geometrycollection` `g1` join `test`.`gis_geometrycollection` `g2` order by `test`.`g1`.`fid`,`test`.`g2`.`fid`
|
Note 1003 select `test`.`g1`.`fid` AS `first`,`test`.`g2`.`fid` AS `second`,st_within(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `w`,st_contains(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `c`,mbroverlaps(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `o`,mbrequals(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `e`,mbrdisjoint(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `d`,st_touches(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `t`,mbrintersects(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `i`,st_crosses(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `r` from `test`.`gis_geometrycollection` `g1` join `test`.`gis_geometrycollection` `g2` order by `test`.`g1`.`fid`,`test`.`g2`.`fid`
|
||||||
DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry;
|
DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry;
|
||||||
|
|
|
@ -200,4 +200,7 @@ SELECT AsText( ST_UNION(
|
||||||
PolygonFromText(' POLYGON( ( 2 2 , 3 2 , 7 5 , 2 0 , 2 2 ) ) ') ,
|
PolygonFromText(' POLYGON( ( 2 2 , 3 2 , 7 5 , 2 0 , 2 2 ) ) ') ,
|
||||||
PolygonFromText(' POLYGON( ( 2 2 , 3 2 , 3 3 , 2 5 , 2 2 ) ) ') ) );
|
PolygonFromText(' POLYGON( ( 2 2 , 3 2 , 3 3 , 2 5 , 2 2 ) ) ') ) );
|
||||||
|
|
||||||
|
#bug 801466 ST_INTERSECTION() returns invalid value on empty intersection in maria-5.3-gis
|
||||||
|
|
||||||
|
SELECT AsText(ST_INTERSECTION(LinestringFromText('LINESTRING(1 1, 2 2)'), GeometryFromText('LINESTRING(3 3, 4 4)')));
|
||||||
|
|
||||||
|
|
|
@ -62,7 +62,8 @@ INSERT INTO gis_multi_polygon VALUES
|
||||||
|
|
||||||
INSERT INTO gis_geometrycollection VALUES
|
INSERT INTO gis_geometrycollection VALUES
|
||||||
(120, GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))')),
|
(120, GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))')),
|
||||||
(121, GeometryFromWKB(AsWKB(GeometryCollection(Point(44, 6), LineString(Point(3, 6), Point(7, 9))))));
|
(121, GeometryFromWKB(AsWKB(GeometryCollection(Point(44, 6), LineString(Point(3, 6), Point(7, 9)))))),
|
||||||
|
(122, GeomFromText('GeometryCollection()'));
|
||||||
|
|
||||||
INSERT into gis_geometry SELECT * FROM gis_point;
|
INSERT into gis_geometry SELECT * FROM gis_point;
|
||||||
INSERT into gis_geometry SELECT * FROM gis_line;
|
INSERT into gis_geometry SELECT * FROM gis_line;
|
||||||
|
|
|
@ -8008,7 +8008,7 @@ int Field_geom::store(const char *from, uint length, CHARSET_INFO *cs)
|
||||||
goto err;
|
goto err;
|
||||||
// Check given WKB
|
// Check given WKB
|
||||||
uint32 wkb_type;
|
uint32 wkb_type;
|
||||||
if (length < SRID_SIZE + WKB_HEADER_SIZE + SIZEOF_STORED_DOUBLE*2)
|
if (length < SRID_SIZE + WKB_HEADER_SIZE + 4)
|
||||||
goto err;
|
goto err;
|
||||||
wkb_type= uint4korr(from + SRID_SIZE + 1);
|
wkb_type= uint4korr(from + SRID_SIZE + 1);
|
||||||
if (wkb_type < (uint32) Geometry::wkb_point ||
|
if (wkb_type < (uint32) Geometry::wkb_point ||
|
||||||
|
|
|
@ -137,6 +137,8 @@ int Gcalc_function::count_internal()
|
||||||
cur_func+= 4;
|
cur_func+= 4;
|
||||||
if (next_func == op_shape)
|
if (next_func == op_shape)
|
||||||
return i_states[c_op & ~(op_any | op_not)] ^ mask;
|
return i_states[c_op & ~(op_any | op_not)] ^ mask;
|
||||||
|
if (n_ops == 0)
|
||||||
|
return mask;
|
||||||
|
|
||||||
result= count_internal();
|
result= count_internal();
|
||||||
|
|
||||||
|
@ -442,11 +444,9 @@ void Gcalc_result_receiver::reset()
|
||||||
|
|
||||||
int Gcalc_result_receiver::get_result_typeid()
|
int Gcalc_result_receiver::get_result_typeid()
|
||||||
{
|
{
|
||||||
if (!n_shapes)
|
if (!n_shapes || collection_result)
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (collection_result)
|
|
||||||
return Geometry::wkb_geometrycollection;
|
return Geometry::wkb_geometrycollection;
|
||||||
|
|
||||||
switch (common_shapetype)
|
switch (common_shapetype)
|
||||||
{
|
{
|
||||||
case Gcalc_function::shape_polygon:
|
case Gcalc_function::shape_polygon:
|
||||||
|
@ -1186,6 +1186,7 @@ int Gcalc_operation_reducer::get_result(Gcalc_result_receiver *storage)
|
||||||
poly_instance *polygons= NULL;
|
poly_instance *polygons= NULL;
|
||||||
|
|
||||||
*m_res_hook= NULL;
|
*m_res_hook= NULL;
|
||||||
|
|
||||||
while (m_result)
|
while (m_result)
|
||||||
{
|
{
|
||||||
Gcalc_function::shape_type shape= m_result->type;
|
Gcalc_function::shape_type shape= m_result->type;
|
||||||
|
|
|
@ -57,6 +57,14 @@ public:
|
||||||
m_cur++;
|
m_cur++;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
/* Returns the next notempty character. */
|
||||||
|
char next_symbol()
|
||||||
|
{
|
||||||
|
skip_space();
|
||||||
|
if (m_cur >= m_limit)
|
||||||
|
return 0; /* EOL meet. */
|
||||||
|
return *m_cur;
|
||||||
|
}
|
||||||
void set_error_msg(const char *msg);
|
void set_error_msg(const char *msg);
|
||||||
|
|
||||||
// caller should free this pointer
|
// caller should free this pointer
|
||||||
|
|
|
@ -2075,6 +2075,8 @@ bool Gis_geometry_collection::init_from_wkt(Gis_read_stream *trs, String *wkb)
|
||||||
return 1;
|
return 1;
|
||||||
wkb->length(wkb->length()+4); // Reserve space for points
|
wkb->length(wkb->length()+4); // Reserve space for points
|
||||||
|
|
||||||
|
if (trs->next_symbol() != ')')
|
||||||
|
{
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
if (!(g= create_from_wkt(&buffer, trs, wkb)))
|
if (!(g= create_from_wkt(&buffer, trs, wkb)))
|
||||||
|
@ -2089,6 +2091,7 @@ bool Gis_geometry_collection::init_from_wkt(Gis_read_stream *trs, String *wkb)
|
||||||
if (trs->skip_char(',')) // Didn't find ','
|
if (trs->skip_char(',')) // Didn't find ','
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
wkb->write_at_position(no_pos, n_objects);
|
wkb->write_at_position(no_pos, n_objects);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -2208,10 +2211,9 @@ bool Gis_geometry_collection::get_data_as_wkt(String *txt,
|
||||||
geom->set_data_ptr(data, (uint) (m_data_end - data));
|
geom->set_data_ptr(data, (uint) (m_data_end - data));
|
||||||
if (geom->as_wkt(txt, &data))
|
if (geom->as_wkt(txt, &data))
|
||||||
return 1;
|
return 1;
|
||||||
if (txt->append(STRING_WITH_LEN(","), 512))
|
if (n_objects && txt->append(STRING_WITH_LEN(","), 512))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
txt->length(txt->length() - 1);
|
|
||||||
*end= data;
|
*end= data;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue