@@ -47,9 +47,9 @@ use std::{
47
47
///
48
48
/// Specification: `QTDEX-A/BQL-S1`
49
49
pub struct Query {
50
- dataframe_q : Box < [ u8 ] > ,
51
- dataframe_p : Vec < u8 > ,
50
+ buf : Vec < u8 > ,
52
51
param_cnt : usize ,
52
+ q_window : usize ,
53
53
}
54
54
55
55
impl From < String > for Query {
@@ -74,19 +74,20 @@ impl Query {
74
74
Self :: _new ( query)
75
75
}
76
76
fn _new ( query : String ) -> Self {
77
+ let l = query. len ( ) ;
77
78
Self {
78
- dataframe_q : query. into_bytes ( ) . into_boxed_slice ( ) ,
79
- dataframe_p : vec ! [ ] ,
79
+ buf : query. into_bytes ( ) ,
80
80
param_cnt : 0 ,
81
+ q_window : l,
81
82
}
82
83
}
83
84
/// Returns a reference to the query string
84
85
pub fn query_str ( & self ) -> & str {
85
- unsafe { core:: str:: from_utf8_unchecked ( & self . dataframe_q ) }
86
+ unsafe { core:: str:: from_utf8_unchecked ( & self . buf [ .. self . q_window ] ) }
86
87
}
87
88
/// Add a new parameter to the query
88
89
pub fn push_param ( & mut self , param : impl SQParam ) -> & mut Self {
89
- self . param_cnt += param. append_param ( & mut self . dataframe_p ) ;
90
+ self . param_cnt += param. append_param ( & mut self . buf ) ;
90
91
self
91
92
}
92
93
/// Get the number of parameters
@@ -102,10 +103,9 @@ impl Query {
102
103
// compute the total packet size
103
104
// q window
104
105
let mut query_window_buffer = itoa:: Buffer :: new ( ) ;
105
- let query_window_str = query_window_buffer. format ( self . dataframe_q . len ( ) ) ;
106
+ let query_window_str = query_window_buffer. format ( self . q_window ) ;
106
107
// full packet
107
- let total_packet_size =
108
- query_window_str. len ( ) + 1 + self . dataframe_q . len ( ) + self . dataframe_p . len ( ) ;
108
+ let total_packet_size = query_window_str. len ( ) + 1 + self . buf . len ( ) ;
109
109
let mut total_packet_size_buffer = itoa:: Buffer :: new ( ) ;
110
110
let total_packet_size_str = total_packet_size_buffer. format ( total_packet_size) ;
111
111
// segment 1: meta
@@ -116,8 +116,7 @@ impl Query {
116
116
buf. write_all ( query_window_str. as_bytes ( ) ) ?;
117
117
buf. write_all ( b"\n " ) ?;
118
118
// segment 3: payload
119
- buf. write_all ( & self . dataframe_q ) ?;
120
- buf. write_all ( & self . dataframe_p ) ?;
119
+ buf. write_all ( & self . buf ) ?;
121
120
Ok ( ( ) )
122
121
}
123
122
#[ inline( always) ]
0 commit comments