1515// specific language governing permissions and limitations
1616// under the License.
1717
18- use crate :: linestring:: { parse_linestring , parse_multilinestring } ;
19- use crate :: point:: { parse_multipoint , parse_point , write_empty_point } ;
20- use crate :: polygon:: { parse_multipolygon , parse_polygon , write_empty_polygon } ;
18+ use crate :: linestring:: { deserialize_linestring , deserialize_multilinestring } ;
19+ use crate :: point:: { deserialize_multipoint , deserialize_point , deserialize_empty_point } ;
20+ use crate :: polygon:: { deserialize_multipolygon , deserialize_polygon , deserialize_empty_polygon } ;
2121use crate :: wkb:: write_wkb_byte_order_marker;
2222use arrow_array:: builder:: BinaryBuilder ;
2323use byteorder:: { ByteOrder , LittleEndian , ReadBytesExt , WriteBytesExt } ;
@@ -36,10 +36,10 @@ pub fn deserialize(builder: &mut BinaryBuilder, bytes: &[u8]) -> datafusion_comm
3636
3737 let mut reader = Cursor :: new ( bytes) ;
3838
39- parse_geometry :: < LittleEndian , LittleEndian > ( builder, & mut reader, bytes)
39+ deserialize_geometry :: < LittleEndian , LittleEndian > ( builder, & mut reader, bytes)
4040}
4141
42- pub fn parse_geometry < IN : ByteOrder , OUT : ByteOrder > (
42+ pub fn deserialize_geometry < IN : ByteOrder , OUT : ByteOrder > (
4343 builder : & mut BinaryBuilder ,
4444 cursor : & mut Cursor < & [ u8 ] > ,
4545 bytes : & [ u8 ] ,
@@ -50,6 +50,12 @@ pub fn parse_geometry<IN: ByteOrder, OUT: ByteOrder>(
5050
5151 let dimension = get_dimension ( ( preamble_byte) >> 1 ) ;
5252
53+ if dimension != Dimension :: XY {
54+ return Err ( DataFusionError :: Execution (
55+ "Only 2D geometries (XY) are supported" . to_string ( ) ,
56+ ) ) ;
57+ }
58+
5359 let _has_srid = ( preamble_byte & 0x01 ) != 0 ;
5460
5561 cursor. set_position ( cursor. position ( ) + 3 ) ; // Skip 3 bytes
@@ -58,42 +64,42 @@ pub fn parse_geometry<IN: ByteOrder, OUT: ByteOrder>(
5864 1 => {
5965 let number_of_coordinates = cursor. read_u32 :: < IN > ( ) ?;
6066 if number_of_coordinates == 0 {
61- write_empty_point :: < OUT > ( builder, dimension) ?;
67+ deserialize_empty_point :: < OUT > ( builder, dimension) ?;
6268 return Ok ( ( ) ) ;
6369 }
6470
65- parse_point :: < OUT > ( builder, cursor, dimension) ?;
71+ deserialize_point :: < OUT > ( builder, cursor, dimension) ?;
6672 }
6773 2 => {
68- parse_linestring :: < IN , OUT > ( builder, cursor, dimension) ?;
74+ deserialize_linestring :: < IN , OUT > ( builder, cursor, dimension) ?;
6975 }
7076 3 => {
7177 let mut meta_data_reader = Cursor :: new ( bytes) ;
7278
7379 let number_of_points = cursor. read_u32 :: < IN > ( ) ?;
7480 if number_of_points == 0 {
75- write_empty_polygon :: < OUT > ( builder, dimension) ?;
81+ deserialize_empty_polygon :: < OUT > ( builder, dimension) ?;
7682
7783 return Ok ( ( ) ) ;
7884 }
7985
8086 let metadata_start_position = number_of_points * 8 * 2 ;
8187 meta_data_reader. set_position ( cursor. position ( ) + ( metadata_start_position) as u64 ) ;
8288
83- parse_polygon :: < IN , OUT > ( builder, cursor, & mut meta_data_reader, dimension) ?;
89+ deserialize_polygon :: < IN , OUT > ( builder, cursor, & mut meta_data_reader, dimension) ?;
8490 cursor. set_position ( meta_data_reader. position ( ) ) ;
8591 }
8692 4 => {
87- parse_multipoint :: < IN , OUT > ( builder, cursor, dimension) ?;
93+ deserialize_multipoint :: < IN , OUT > ( builder, cursor, dimension) ?;
8894 }
8995 5 => {
9096 let mut meta_data_reader = Cursor :: new ( bytes) ;
91- parse_multilinestring :: < IN , OUT > ( builder, cursor, & mut meta_data_reader, dimension) ?;
97+ deserialize_multilinestring :: < IN , OUT > ( builder, cursor, & mut meta_data_reader, dimension) ?;
9298 cursor. set_position ( meta_data_reader. position ( ) ) ;
9399 }
94100 6 => {
95101 let mut meta_data_reader = Cursor :: new ( bytes) ;
96- parse_multipolygon :: < IN , OUT > ( builder, cursor, & mut meta_data_reader, dimension) ?;
102+ deserialize_multipolygon :: < IN , OUT > ( builder, cursor, & mut meta_data_reader, dimension) ?;
97103 cursor. set_position ( meta_data_reader. position ( ) ) ;
98104 }
99105 7 => {
@@ -104,7 +110,7 @@ pub fn parse_geometry<IN: ByteOrder, OUT: ByteOrder>(
104110 builder. write_u32 :: < OUT > ( number_of_geometries) ?;
105111
106112 for _i in 0 ..number_of_geometries {
107- parse_geometry :: < IN , OUT > ( builder, cursor, bytes) ?;
113+ deserialize_geometry :: < IN , OUT > ( builder, cursor, bytes) ?;
108114 }
109115 }
110116 _ => {
0 commit comments