1+ use std:: sync:: Arc ;
2+
13use datafusion:: catalog_common:: TableReference ;
24use exon:: ExonSession ;
35use log:: { debug, info} ;
@@ -7,6 +9,7 @@ use tokio::runtime::Runtime;
79use crate :: context:: set_option_internal;
810use crate :: option:: { FilterOp , RangeOp , RangeOptions } ;
911use crate :: query:: { count_overlaps_query, nearest_query, overlap_query} ;
12+ use crate :: udtf:: CountOverlapsProvider ;
1013use crate :: utils:: default_cols_to_string;
1114use crate :: DEFAULT_COLUMN_NAMES ;
1215
@@ -150,17 +153,30 @@ async fn do_count_overlaps_naive(
150153) -> datafusion:: dataframe:: DataFrame {
151154 let columns_1 = range_opts. columns_1 . unwrap ( ) ;
152155 let columns_2 = range_opts. columns_2 . unwrap ( ) ;
153- let query = format ! (
154- "SELECT * FROM count_overlaps('{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}' , false )" ,
156+ let session = & ctx. session ;
157+ let right_table_ref = TableReference :: from ( right_table. clone ( ) ) ;
158+ let right_schema = session
159+ . table ( right_table_ref. clone ( ) )
160+ . await
161+ . unwrap ( )
162+ . schema ( )
163+ . as_arrow ( )
164+ . clone ( ) ;
165+ let count_overlaps_provider = CountOverlapsProvider :: new (
166+ Arc :: new ( session. clone ( ) ) ,
155167 left_table,
156168 right_table,
157- columns_1[ 0 ] ,
158- columns_1[ 1 ] ,
159- columns_1[ 2 ] ,
160- columns_2[ 0 ] ,
161- columns_2[ 1 ] ,
162- columns_2[ 2 ]
169+ right_schema,
170+ columns_1,
171+ columns_2,
172+ range_opts. filter_op . unwrap ( ) ,
173+ false ,
163174 ) ;
175+ session. deregister_table ( "count_overlaps" ) . unwrap ( ) ;
176+ session
177+ . register_table ( "count_overlaps" , Arc :: new ( count_overlaps_provider) )
178+ . unwrap ( ) ;
179+ let query = "SELECT * FROM count_overlaps" ;
164180 debug ! ( "Query: {}" , query) ;
165181 ctx. sql ( & query) . await . unwrap ( )
166182}
0 commit comments