11use std:: {
22 collections:: BTreeMap ,
3- hash:: { BuildHasher , Hash , Hasher } ,
43 ops:: { ControlFlow , RangeInclusive } ,
54} ;
65
7- use ahash:: RandomState ;
86use alloy:: primitives:: BlockNumber ;
97use sqlparser_latest:: ast:: { self , VisitMut , VisitorMut } ;
108
@@ -23,11 +21,8 @@ pub(super) fn new_block_range_query(
2321 block_range : & RangeInclusive < BlockNumber > ,
2422) -> ast:: Query {
2523 // CTE names are unique within a SQL query.
26- // The hasher ensures that CTEs created for block range do not collide with user-defined CTEs.
27- // Constant seeds ensure consistent block range queries for the same input parameters.
28- let mut hasher = RandomState :: with_seeds ( 0 , 0 , 0 , 0 ) . build_hasher ( ) ;
2924
30- let tables_to_ctes_mapping = new_tables_to_ctes_mapping ( query, & mut hasher ) ;
25+ let tables_to_ctes_mapping = new_tables_to_ctes_mapping ( query) ;
3126 assert ! ( !tables_to_ctes_mapping. is_empty( ) ) ;
3227
3328 let mut cte_tables = Vec :: with_capacity ( tables_to_ctes_mapping. len ( ) ) ;
@@ -46,24 +41,18 @@ pub(super) fn new_block_range_query(
4641 let block_range_query = format ! (
4742 "WITH {cte_tables}, {source} AS ({query}) SELECT {source}.* FROM {source} ORDER BY {source}.{block_number_column}" ,
4843 cte_tables = cte_tables. join( ", " ) ,
49- source = format!( "source_{}" , hasher . finish ( ) )
44+ source = format!( "amp_src" )
5045 ) ;
5146
5247 parse_query ( block_range_query) . unwrap ( )
5348}
5449
5550/// Creates unique CTE names for every table referenced by the SQL query.
56- fn new_tables_to_ctes_mapping (
57- query : & ast:: Query ,
58- hasher : & mut impl Hasher ,
59- ) -> BTreeMap < TableReference , String > {
51+ fn new_tables_to_ctes_mapping ( query : & ast:: Query ) -> BTreeMap < TableReference , String > {
6052 extract_tables ( query)
6153 . into_iter ( )
62- . map ( |table| {
63- table. hash ( hasher) ;
64-
65- ( table, format ! ( "block_range_{}" , hasher. finish( ) ) )
66- } )
54+ . enumerate ( )
55+ . map ( |( idx, table) | ( table, format ! ( "amp_br{}" , idx + 1 ) ) )
6756 . collect ( )
6857}
6958
@@ -137,18 +126,18 @@ mod tests {
137126 block_range_query. to_string( ) ,
138127 parse_query(
139128 r#"
140- WITH block_range_14621009630487609643 AS (
129+ WITH amp_br1 AS (
141130 SELECT * FROM d WHERE _block_num BETWEEN 0 AND 1000000
142131 ),
143- source_14621009630487609643 AS (
144- SELECT a, b, c FROM block_range_14621009630487609643 AS d
132+ amp_src AS (
133+ SELECT a, b, c FROM amp_br1 AS d
145134 )
146135 SELECT
147- source_14621009630487609643 .*
136+ amp_src .*
148137 FROM
149- source_14621009630487609643
138+ amp_src
150139 ORDER BY
151- source_14621009630487609643 .b
140+ amp_src .b
152141 "#
153142 )
154143 . unwrap( )
@@ -167,21 +156,21 @@ mod tests {
167156 block_range_query. to_string( ) ,
168157 parse_query(
169158 r#"
170- WITH block_range_14621009630487609643 AS (
159+ WITH amp_br1 AS (
171160 SELECT * FROM d WHERE _block_num BETWEEN 0 AND 1000000
172161 ),
173- block_range_12377422807768256314 AS (
162+ amp_br2 AS (
174163 SELECT * FROM e WHERE _block_num BETWEEN 0 AND 1000000
175164 ),
176- source_12377422807768256314 AS (
177- SELECT a, b, c FROM block_range_14621009630487609643 AS d JOIN block_range_12377422807768256314 AS e ON e.e = d.d
165+ amp_src AS (
166+ SELECT a, b, c FROM amp_br1 AS d JOIN amp_br2 AS e ON e.e = d.d
178167 )
179168 SELECT
180- source_12377422807768256314 .*
169+ amp_src .*
181170 FROM
182- source_12377422807768256314
171+ amp_src
183172 ORDER BY
184- source_12377422807768256314 .b
173+ amp_src .b
185174 "#
186175 )
187176 . unwrap( )
0 commit comments