@@ -81,6 +81,76 @@ pub fn normalize_quote_datetime(df: DataFrame) -> Result<DataFrame> {
8181 Ok ( result)
8282}
8383
84+ impl DataStore for ParquetStore {
85+ fn load_options (
86+ & self ,
87+ _symbol : & str ,
88+ start_date : Option < NaiveDate > ,
89+ end_date : Option < NaiveDate > ,
90+ ) -> Result < DataFrame > {
91+ let path_str = self . path . to_string_lossy ( ) . to_string ( ) ;
92+ let df = LazyFrame :: scan_parquet ( path_str. as_str ( ) . into ( ) , ScanArgsParquet :: default ( ) ) ?
93+ . collect ( )
94+ . context ( "Failed to read Parquet file" ) ?;
95+
96+ // Normalize to quote_datetime
97+ let mut df = normalize_quote_datetime ( df) ?;
98+
99+ // Apply date filters if quote_datetime exists
100+ if df. schema ( ) . contains ( QUOTE_DATETIME_COL ) {
101+ if let Some ( start) = start_date {
102+ let start_dt = start. and_hms_opt ( 0 , 0 , 0 ) . unwrap ( ) ;
103+ df = df
104+ . lazy ( )
105+ . filter ( col ( QUOTE_DATETIME_COL ) . gt_eq ( lit ( start_dt) ) )
106+ . collect ( ) ?;
107+ }
108+ if let Some ( end) = end_date {
109+ let end_dt = end. and_hms_opt ( 23 , 59 , 59 ) . unwrap ( ) ;
110+ df = df
111+ . lazy ( )
112+ . filter ( col ( QUOTE_DATETIME_COL ) . lt_eq ( lit ( end_dt) ) )
113+ . collect ( ) ?;
114+ }
115+ }
116+
117+ Ok ( df)
118+ }
119+
120+ fn list_symbols ( & self ) -> Result < Vec < String > > {
121+ let path_str = self . path . to_string_lossy ( ) . to_string ( ) ;
122+ let df = LazyFrame :: scan_parquet ( path_str. as_str ( ) . into ( ) , ScanArgsParquet :: default ( ) ) ?
123+ . select ( [ col ( "symbol" ) ] )
124+ . unique ( None , UniqueKeepStrategy :: First )
125+ . collect ( ) ?;
126+
127+ let ca = df. column ( "symbol" ) ?. str ( ) ?;
128+ Ok ( ca
129+ . into_no_null_iter ( )
130+ . map ( std:: string:: ToString :: to_string)
131+ . collect ( ) )
132+ }
133+
134+ fn date_range ( & self , _symbol : & str ) -> Result < ( NaiveDate , NaiveDate ) > {
135+ let path_str = self . path . to_string_lossy ( ) . to_string ( ) ;
136+ let df = LazyFrame :: scan_parquet ( path_str. as_str ( ) . into ( ) , ScanArgsParquet :: default ( ) ) ?
137+ . collect ( ) ?;
138+
139+ let df = normalize_quote_datetime ( df) ?;
140+ let date_col = df. column ( QUOTE_DATETIME_COL ) ?;
141+ let min = date_col. min_reduce ( ) ?;
142+ let max = date_col. max_reduce ( ) ?;
143+
144+ let min_str = format ! ( "{:?}" , min. value( ) ) ;
145+ let max_str = format ! ( "{:?}" , max. value( ) ) ;
146+
147+ let start = NaiveDate :: parse_from_str ( min_str. trim_matches ( '"' ) , "%Y-%m-%d" ) ?;
148+ let end = NaiveDate :: parse_from_str ( max_str. trim_matches ( '"' ) , "%Y-%m-%d" ) ?;
149+
150+ Ok ( ( start, end) )
151+ }
152+ }
153+
84154#[ cfg( test) ]
85155mod tests {
86156 use super :: * ;
@@ -101,7 +171,7 @@ mod tests {
101171 assert ! ( !result. schema( ) . contains( "quote_date" ) ) ;
102172 match result. column ( QUOTE_DATETIME_COL ) . unwrap ( ) . dtype ( ) {
103173 DataType :: Datetime ( _, _) => { }
104- other => panic ! ( "Expected Datetime, got {:?}" , other ) ,
174+ other => panic ! ( "Expected Datetime, got {other :?}" ) ,
105175 }
106176 }
107177
@@ -157,7 +227,7 @@ mod tests {
157227 assert ! ( result. schema( ) . contains( QUOTE_DATETIME_COL ) ) ;
158228 match result. column ( QUOTE_DATETIME_COL ) . unwrap ( ) . dtype ( ) {
159229 DataType :: Datetime ( _, _) => { }
160- other => panic ! ( "Expected Datetime, got {:?}" , other ) ,
230+ other => panic ! ( "Expected Datetime, got {other :?}" ) ,
161231 }
162232 }
163233
@@ -173,73 +243,3 @@ mod tests {
173243 assert_eq ! ( result. schema( ) , df. schema( ) ) ;
174244 }
175245}
176-
177- impl DataStore for ParquetStore {
178- fn load_options (
179- & self ,
180- _symbol : & str ,
181- start_date : Option < NaiveDate > ,
182- end_date : Option < NaiveDate > ,
183- ) -> Result < DataFrame > {
184- let path_str = self . path . to_string_lossy ( ) . to_string ( ) ;
185- let df = LazyFrame :: scan_parquet ( path_str. as_str ( ) . into ( ) , ScanArgsParquet :: default ( ) ) ?
186- . collect ( )
187- . context ( "Failed to read Parquet file" ) ?;
188-
189- // Normalize to quote_datetime
190- let mut df = normalize_quote_datetime ( df) ?;
191-
192- // Apply date filters if quote_datetime exists
193- if df. schema ( ) . contains ( QUOTE_DATETIME_COL ) {
194- if let Some ( start) = start_date {
195- let start_dt = start. and_hms_opt ( 0 , 0 , 0 ) . unwrap ( ) ;
196- df = df
197- . lazy ( )
198- . filter ( col ( QUOTE_DATETIME_COL ) . gt_eq ( lit ( start_dt) ) )
199- . collect ( ) ?;
200- }
201- if let Some ( end) = end_date {
202- let end_dt = end. and_hms_opt ( 23 , 59 , 59 ) . unwrap ( ) ;
203- df = df
204- . lazy ( )
205- . filter ( col ( QUOTE_DATETIME_COL ) . lt_eq ( lit ( end_dt) ) )
206- . collect ( ) ?;
207- }
208- }
209-
210- Ok ( df)
211- }
212-
213- fn list_symbols ( & self ) -> Result < Vec < String > > {
214- let path_str = self . path . to_string_lossy ( ) . to_string ( ) ;
215- let df = LazyFrame :: scan_parquet ( path_str. as_str ( ) . into ( ) , ScanArgsParquet :: default ( ) ) ?
216- . select ( [ col ( "symbol" ) ] )
217- . unique ( None , UniqueKeepStrategy :: First )
218- . collect ( ) ?;
219-
220- let ca = df. column ( "symbol" ) ?. str ( ) ?;
221- Ok ( ca
222- . into_no_null_iter ( )
223- . map ( std:: string:: ToString :: to_string)
224- . collect ( ) )
225- }
226-
227- fn date_range ( & self , _symbol : & str ) -> Result < ( NaiveDate , NaiveDate ) > {
228- let path_str = self . path . to_string_lossy ( ) . to_string ( ) ;
229- let df = LazyFrame :: scan_parquet ( path_str. as_str ( ) . into ( ) , ScanArgsParquet :: default ( ) ) ?
230- . collect ( ) ?;
231-
232- let df = normalize_quote_datetime ( df) ?;
233- let date_col = df. column ( QUOTE_DATETIME_COL ) ?;
234- let min = date_col. min_reduce ( ) ?;
235- let max = date_col. max_reduce ( ) ?;
236-
237- let min_str = format ! ( "{:?}" , min. value( ) ) ;
238- let max_str = format ! ( "{:?}" , max. value( ) ) ;
239-
240- let start = NaiveDate :: parse_from_str ( min_str. trim_matches ( '"' ) , "%Y-%m-%d" ) ?;
241- let end = NaiveDate :: parse_from_str ( max_str. trim_matches ( '"' ) , "%Y-%m-%d" ) ?;
242-
243- Ok ( ( start, end) )
244- }
245- }
0 commit comments