@@ -6,7 +6,6 @@ pub enum ParseError {
6
6
UnsupportedCommand ,
7
7
EmptyResultSet ,
8
8
NullRow ,
9
- ColumnValueMissed ,
10
9
ColumnNameNotDefined ,
11
10
FlatBufferError ,
12
11
ErrorMessage ( String ) ,
@@ -18,7 +17,6 @@ impl std::fmt::Display for ParseError {
18
17
ParseError :: UnsupportedCommand => write ! ( f, "Unsupported command" ) ,
19
18
ParseError :: EmptyResultSet => write ! ( f, "Empty resultSet" ) ,
20
19
ParseError :: NullRow => write ! ( f, "Null row" ) ,
21
- ParseError :: ColumnValueMissed => write ! ( f, "Column value missed" ) ,
22
20
ParseError :: ColumnNameNotDefined => write ! ( f, "Column name is not defined" ) ,
23
21
ParseError :: FlatBufferError => write ! ( f, "FlatBuffer parsing error" ) ,
24
22
ParseError :: ErrorMessage ( msg) => write ! ( f, "Error: {}" , msg) ,
@@ -50,27 +48,24 @@ pub fn parse_cubestore_ws_result(
50
48
. ok_or ( ParseError :: EmptyResultSet ) ?;
51
49
52
50
let result_set_columns = result_set. columns ( ) . ok_or ( ParseError :: EmptyResultSet ) ?;
53
- let columns_len = result_set_columns. len ( ) ;
54
- let mut columns = Vec :: with_capacity ( columns_len) ;
55
51
56
- for column in result_set_columns. iter ( ) {
57
- if column. is_empty ( ) {
58
- return Err ( ParseError :: ColumnNameNotDefined ) ;
59
- }
60
- columns. push ( column) ;
52
+ if result_set_columns. iter ( ) . any ( |c| c. is_empty ( ) ) {
53
+ return Err ( ParseError :: ColumnNameNotDefined ) ;
61
54
}
62
55
63
56
let result_set_rows = result_set. rows ( ) . ok_or ( ParseError :: EmptyResultSet ) ?;
64
57
let mut result = Vec :: with_capacity ( result_set_rows. len ( ) ) ;
65
58
66
59
for row in result_set_rows. iter ( ) {
67
60
let values = row. values ( ) . ok_or ( ParseError :: NullRow ) ?;
68
- let mut row_obj = HashMap :: with_capacity ( columns_len) ;
69
-
70
- for ( i, val) in values. iter ( ) . enumerate ( ) {
71
- let value = val. string_value ( ) . ok_or ( ParseError :: ColumnValueMissed ) ?;
72
- row_obj. insert ( columns[ i] , value) ;
73
- }
61
+ let row_obj: HashMap < _ , _ > = result_set_columns
62
+ . iter ( )
63
+ . zip ( values. iter ( ) )
64
+ . map ( |( col, val) | {
65
+ let value = val. string_value ( ) . unwrap_or ( "" ) ;
66
+ ( col, value)
67
+ } )
68
+ . collect ( ) ;
74
69
75
70
result. push ( row_obj) ;
76
71
}
0 commit comments