@@ -405,7 +405,7 @@ mod tests {
405405
406406 #[ test]
407407 #[ ignore]
408- fn test_insert_multipoylgon ( ) {
408+ fn test_insert_multipolygon ( ) {
409409 let conn = connect ( ) ;
410410 or_panic ! ( conn. execute( "CREATE TEMPORARY TABLE geomtests (geom geometry(MultiPolygon))" , & [ ] ) ) ;
411411 let p = |x, y| ewkb:: Point { x : x, y : y, srid : Some ( 4326 ) } ;
@@ -420,6 +420,55 @@ mod tests {
420420 assert ! ( result. iter( ) . map( |r| r. get:: <_, bool >( 0 ) ) . last( ) . unwrap( ) ) ;
421421 }
422422
423+ #[ test]
424+ #[ ignore]
425+ fn test_insert_geometry ( ) {
426+ let conn = connect ( ) ;
427+ or_panic ! ( conn. execute( "CREATE TEMPORARY TABLE geomtests (geom geometry)" , & [ ] ) ) ;
428+ let p = |x, y| ewkb:: Point { x : x, y : y, srid : Some ( 4326 ) } ;
429+ // SELECT 'SRID=4326;MULTIPOLYGON (((0 0, 2 0, 2 2, 0 2, 0 0)), ((10 10, -2 10, -2 -2, 10 -2, 10 10)))'::geometry
430+ let multipoly = {
431+ let line = ewkb:: LineString { srid : Some ( 4326 ) , points : vec ! [ p( 0. , 0. ) , p( 2. , 0. ) , p( 2. , 2. ) , p( 0. , 2. ) , p( 0. , 0. ) ] } ;
432+ let poly1 = ewkb:: Polygon { srid : Some ( 4326 ) , rings : vec ! [ line] } ;
433+ let line = ewkb:: LineString { srid : Some ( 4326 ) , points : vec ! [ p( 10. , 10. ) , p( -2. , 10. ) , p( -2. , -2. ) , p( 10. , -2. ) , p( 10. , 10. ) ] } ;
434+ let poly2 = ewkb:: Polygon { srid : Some ( 4326 ) , rings : vec ! [ line] } ;
435+ ewkb:: MultiPolygon { srid : Some ( 4326 ) , polygons : vec ! [ poly1, poly2] }
436+ } ;
437+ let geometry = ewkb:: GeometryT :: MultiPolygon ( multipoly) ;
438+ or_panic ! ( conn. execute( "INSERT INTO geomtests (geom) VALUES ($1)" , & [ & geometry] ) ) ;
439+ let result = or_panic ! ( conn. query( "SELECT geom=ST_GeomFromEWKT('SRID=4326;MULTIPOLYGON (((0 0, 2 0, 2 2, 0 2, 0 0)), ((10 10, -2 10, -2 -2, 10 -2, 10 10)))') FROM geomtests" , & [ ] ) ) ;
440+ assert ! ( result. iter( ) . map( |r| r. get:: <_, bool >( 0 ) ) . last( ) . unwrap( ) ) ;
441+ }
442+
443+ #[ test]
444+ #[ ignore]
445+ fn test_insert_geometrycollection ( ) {
446+ let conn = connect ( ) ;
447+ or_panic ! ( conn. execute( "CREATE TEMPORARY TABLE geomtests (geom geometry(GeometryCollection))" , & [ ] ) ) ;
448+ let p = |x, y| ewkb:: Point { x : x, y : y, srid : Some ( 4326 ) } ;
449+ // SELECT 'SRID=4326;LINESTRING (10 -20, -0 -0.5)'
450+ let line = ewkb:: LineString { srid : Some ( 4326 ) , points : vec ! [ p( 10.0 , -20.0 ) , p( 0. , -0.5 ) ] } ;
451+ // SELECT 'SRID=4326;MULTIPOLYGON (((0 0, 2 0, 2 2, 0 2, 0 0)), ((10 10, -2 10, -2 -2, 10 -2, 10 10)))'::geometry
452+ let multipoly = {
453+ let line = ewkb:: LineString { srid : Some ( 4326 ) , points : vec ! [ p( 0. , 0. ) , p( 2. , 0. ) , p( 2. , 2. ) , p( 0. , 2. ) , p( 0. , 0. ) ] } ;
454+ let poly1 = ewkb:: Polygon { srid : Some ( 4326 ) , rings : vec ! [ line] } ;
455+ let line = ewkb:: LineString { srid : Some ( 4326 ) , points : vec ! [ p( 10. , 10. ) , p( -2. , 10. ) , p( -2. , -2. ) , p( 10. , -2. ) , p( 10. , 10. ) ] } ;
456+ let poly2 = ewkb:: Polygon { srid : Some ( 4326 ) , rings : vec ! [ line] } ;
457+ ewkb:: MultiPolygon { srid : Some ( 4326 ) , polygons : vec ! [ poly1, poly2] }
458+ } ;
459+ // SELECT 'SRID=4326;GEOMETRYCOLLECTION (LINESTRING (10 -20,0 -0.5), MULTIPOLYGON (((0 0,2 0,2 2,0 2,0 0)),((10 10,-2 10,-2 -2,10 -2,10 10))))'::geometry
460+ let collection = ewkb:: GeometryCollection {
461+ srid : Some ( 4326 ) ,
462+ geometries : vec ! [
463+ ewkb:: GeometryT :: LineString ( line) ,
464+ ewkb:: GeometryT :: MultiPolygon ( multipoly) ,
465+ ] ,
466+ } ;
467+ or_panic ! ( conn. execute( "INSERT INTO geomtests (geom) VALUES ($1)" , & [ & collection] ) ) ;
468+ let result = or_panic ! ( conn. query( "SELECT geom=ST_GeomFromEWKT('SRID=4326;GEOMETRYCOLLECTION (LINESTRING (10 -20,0 -0.5), MULTIPOLYGON (((0 0,2 0,2 2,0 2,0 0)),((10 10,-2 10,-2 -2,10 -2,10 10))))') FROM geomtests" , & [ ] ) ) ;
469+ assert ! ( result. iter( ) . map( |r| r. get:: <_, bool >( 0 ) ) . last( ) . unwrap( ) ) ;
470+ }
471+
423472 #[ test]
424473 #[ ignore]
425474 fn test_select_point ( ) {
0 commit comments