@@ -25,17 +25,16 @@ pub fn sql_least(exprs: &[&str]) -> String {
2525/// deep recursion: only recurses ~cbrt(n) times, then cross-joins three
2626/// copies to cover the full range.
2727pub fn sql_generate_series ( n : usize ) -> String {
28- use crate :: naming:: { SERIES_BASE , SERIES_SEQ } ;
2928 let base_size = ( n as f64 ) . cbrt ( ) . ceil ( ) as usize ;
3029 let base_sq = base_size * base_size;
3130 let base_max = base_size - 1 ;
3231 format ! (
33- "{SERIES_BASE} (n) AS (\
34- SELECT 0 UNION ALL SELECT n + 1 FROM {SERIES_BASE} WHERE n < {base_max}\
32+ "__ggsql_base__ (n) AS (\
33+ SELECT 0 UNION ALL SELECT n + 1 FROM __ggsql_base__ WHERE n < {base_max}\
3534 ),\
36- {SERIES_SEQ} (n) AS (\
35+ __ggsql_seq__ (n) AS (\
3736 SELECT CAST(a.n * {base_sq} + b.n * {base_size} + c.n AS REAL) AS n \
38- FROM {SERIES_BASE} a, {SERIES_BASE} b, {SERIES_BASE} c \
37+ FROM __ggsql_base__ a, __ggsql_base__ b, __ggsql_base__ c \
3938 WHERE a.n * {base_sq} + b.n * {base_size} + c.n < {n}\
4039 )"
4140 )
@@ -49,7 +48,7 @@ pub fn sql_generate_series(n: usize) -> String {
4948pub fn sql_percentile ( column : & str , fraction : f64 , from : & str , groups : & [ String ] ) -> String {
5049 let group_filter = groups
5150 . iter ( )
52- . map ( |g| format ! ( "AND _pct .{g} IS NOT DISTINCT FROM _qt .{g}" ) )
51+ . map ( |g| format ! ( "AND __ggsql_pct__ .{g} IS NOT DISTINCT FROM __ggsql_qt__ .{g}" ) )
5352 . collect :: < Vec < _ > > ( )
5453 . join ( " " ) ;
5554
@@ -65,7 +64,7 @@ pub fn sql_percentile(column: &str, fraction: f64, from: &str, groups: &[String]
6564 FROM (\
6665 SELECT {column} AS __val, \
6766 NTILE(4) OVER (ORDER BY {column}) AS __tile \
68- FROM ({from}) AS _pct \
67+ FROM ({from}) AS __ggsql_pct__ \
6968 WHERE {column} IS NOT NULL {group_filter}\
7069 ))"
7170 )
@@ -113,16 +112,28 @@ mod tests {
113112 fn test_generate_series_small ( ) {
114113 let sql = sql_generate_series ( 8 ) ;
115114 // base_size = ceil(8^(1/3)) = 2, base_sq = 4, base_max = 1
116- assert ! ( sql. contains( "WHERE n < 1" ) , "base CTE should recurse up to base_max=1" ) ;
117- assert ! ( sql. contains( "a.n * 4 + b.n * 2 + c.n" ) , "cross-join arithmetic" ) ;
118- assert ! ( sql. contains( "a.n * 4 + b.n * 2 + c.n < 8" ) , "seq CTE filters to n" ) ;
115+ assert ! (
116+ sql. contains( "WHERE n < 1" ) ,
117+ "base CTE should recurse up to base_max=1"
118+ ) ;
119+ assert ! (
120+ sql. contains( "a.n * 4 + b.n * 2 + c.n" ) ,
121+ "cross-join arithmetic"
122+ ) ;
123+ assert ! (
124+ sql. contains( "a.n * 4 + b.n * 2 + c.n < 8" ) ,
125+ "seq CTE filters to n"
126+ ) ;
119127 }
120128
121129 #[ test]
122130 fn test_generate_series_exact_cube ( ) {
123131 let sql = sql_generate_series ( 27 ) ;
124132 // base_size = ceil(27^(1/3)) = 3, base_sq = 9, base_max = 2
125- assert ! ( sql. contains( "WHERE n < 2" ) , "base CTE should recurse up to base_max=2" ) ;
133+ assert ! (
134+ sql. contains( "WHERE n < 2" ) ,
135+ "base CTE should recurse up to base_max=2"
136+ ) ;
126137 assert ! ( sql. contains( "a.n * 9 + b.n * 3 + c.n < 27" ) ) ;
127138 }
128139
@@ -158,16 +169,16 @@ mod tests {
158169 assert ! ( sql. contains( "__tile = 3" ) ) ;
159170 assert ! ( sql. contains( "NTILE(4)" ) ) ;
160171 assert ! ( sql. contains( "val AS __val" ) ) ;
161- assert ! ( sql. contains( "FROM (SELECT * FROM t) AS _pct " ) ) ;
172+ assert ! ( sql. contains( "FROM (SELECT * FROM t) AS __ggsql_pct__ " ) ) ;
162173 assert ! ( !sql. contains( "IS NOT DISTINCT FROM" ) ) ;
163174 }
164175
165176 #[ test]
166177 fn test_percentile_with_groups ( ) {
167178 let groups = vec ! [ "region" . to_string( ) , "year" . to_string( ) ] ;
168179 let sql = sql_percentile ( "price" , 0.25 , "SELECT * FROM sales" , & groups) ;
169- assert ! ( sql. contains( "_pct .region IS NOT DISTINCT FROM _qt .region" ) ) ;
170- assert ! ( sql. contains( "_pct .year IS NOT DISTINCT FROM _qt .year" ) ) ;
180+ assert ! ( sql. contains( "__ggsql_pct__ .region IS NOT DISTINCT FROM __ggsql_qt__ .region" ) ) ;
181+ assert ! ( sql. contains( "__ggsql_pct__ .year IS NOT DISTINCT FROM __ggsql_qt__ .year" ) ) ;
171182 }
172183
173184 #[ test]
0 commit comments