2025-02-13 15:22:50 +01:00
<!doctype html>
< html lang = "en" >
< head >
< meta charset = "utf-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1" >
2025-02-13 21:18:57 +01:00
< meta name = "generator" content = "pdoc 14.3.0" / >
2025-02-13 15:22:50 +01:00
< title > sqlglot.transforms API documentation< / title >
< style > / * ! * B o o t s t r a p R e b o o t v 5 . 0 . 0 ( h t t p s : / / g e t b o o t s t r a p . c o m / ) * C o p y r i g h t 2 0 1 1 - 2 0 2 1 T h e B o o t s t r a p A u t h o r s * C o p y r i g h t 2 0 1 1 - 2 0 2 1 T w i t t e r , I n c . * L i c e n s e d u n d e r M I T ( h t t p s : / / g i t h u b . c o m / t w b s / b o o t s t r a p / b l o b / m a i n / L I C E N S E ) * F o r k e d f r o m N o r m a l i z e . c s s , l i c e n s e d M I T ( h t t p s : / / g i t h u b . c o m / n e c o l a s / n o r m a l i z e . c s s / b l o b / m a s t e r / L I C E N S E . m d ) * / * , : : a f t e r , : : b e f o r e { b o x - s i z i n g : b o r d e r - b o x } @ m e d i a ( p r e f e r s - r e d u c e d - m o t i o n : n o - p r e f e r e n c e ) { : r o o t { s c r o l l - b e h a v i o r : s m o o t h } } b o d y { m a r g i n : 0 ; f o n t - f a m i l y : s y s t e m - u i , - a p p l e - s y s t e m , " S e g o e U I " , R o b o t o , " H e l v e t i c a N e u e " , A r i a l , " N o t o S a n s " , " L i b e r a t i o n S a n s " , s a n s - s e r i f , " A p p l e C o l o r E m o j i " , " S e g o e U I E m o j i " , " S e g o e U I S y m b o l " , " N o t o C o l o r E m o j i " ; f o n t - s i z e : 1 r e m ; f o n t - w e i g h t : 4 0 0 ; l i n e - h e i g h t : 1 . 5 ; c o l o r : # 2 1 2 5 2 9 ; b a c k g r o u n d - c o l o r : # f f f ; - w e b k i t - t e x t - s i z e - a d j u s t : 1 0 0 % ; - w e b k i t - t a p - h i g h l i g h t - c o l o r : t r a n s p a r e n t } h r { m a r g i n : 1 r e m 0 ; c o l o r : i n h e r i t ; b a c k g r o u n d - c o l o r : c u r r e n t C o l o r ; b o r d e r : 0 ; o p a c i t y : . 2 5 } h r : n o t ( [ s i z e ] ) { h e i g h t : 1 p x } h 1 , h 2 , h 3 , h 4 , h 5 , h 6 { m a r g i n - t o p : 0 ; m a r g i n - b o t t o m : . 5 r e m ; f o n t - w e i g h t : 5 0 0 ; l i n e - h e i g h t : 1 . 2 } h 1 { f o n t - s i z e : c a l c ( 1 . 3 7 5 r e m + 1 . 5 v w ) } @ m e d i a ( m i n - w i d t h : 1 2 0 0 p x ) { h 1 { f o n t - s i z e : 2 . 5 r e m } } h 2 { f o n t - s i z e : c a l c ( 1 . 3 2 5 r e m + . 9 v w ) } @ m e d i a ( m i n - w i d t h : 1 2 0 0 p x ) { h 2 { f o n t - s i z e : 2 r e m } } h 3 { f o n t - s i z e : c a l c ( 1 . 3 r e m + . 6 v w ) } @ m e d i a ( m i n - w i d t h : 1 2 0 0 p x ) { h 3 { f o n t - s i z e : 1 . 7 5 r e m } } h 4 { f o n t - s i z e : c a l c ( 1 . 2 7 5 r e m + . 3 v w ) } @ m e d i a ( m i n - w i d t h : 1 2 0 0 p x ) { h 4 { f o n t - s i z e : 1 . 5 r e m } } h 5 { f o n t - s i z e : 1 . 2 5 r e m } h 6 { f o n t - s i z e : 1 r e m } p { m a r g i n - t o p : 0 ; m a r g i n - b o t t o m : 1 r e m } a b b r [ d a t a - b s - o r i g i n a l - t i t l e ] , a b b r [ t i t l e ] { - w e b k i t - t e x t - d e c o r a t i o n : u n d e r l i n e d o t t e d ; t e x t - d e c o r a t i o n : u n d e r l i n e d o t t e d ; c u r s o r : h e l p ; - w e b k i t - t e x t - d e c o r a t i o n - s k i p - i n k : n o n e ; t e x t - d e c o r a t i o n - s k i p - i n k : n o n e } a d d r e s s { m a r g i n - b o t t o m : 1 r e m ; f o n t - s t y l e : n o r m a l ; l i n e - h e i g h t : i n h e r i t } o l , u l { p a d d i n g - l e f t : 2 r e m } d l , o l , u l { m a r g i n - t o p : 0 ; m a r g i n - b o t t o m : 1 r e m } o l o l , o l u l , u l o l , u l u l { m a r g i n - b o t t o m : 0 } d t { f o n t - w e i g h t : 7 0 0 } d d { m a r g i n - b o t t o m : . 5 r e m ; m a r g i n - l e f t : 0 } b l o c k q u o t e { m a r g i n : 0 0 1 r e m } b , s t r o n g { f o n t - w e i g h t : b o l d e r } s m a l l { f o n t - s i z e : . 8 7 5 e m } m a r k { p a d d i n g : . 2 e m ; b a c k g r o u n d - c o l o r : # f c f 8 e 3 } s u b , s u p { p o s i t i o n : r e l a t i v e ; f o n t - s i z e : . 7 5 e m ; l i n e - h e i g h t : 0 ; v e r t i c a l - a l i g n : b a s e l i n e } s u b { b o t t o m : - . 2 5 e m } s u p { t o p : - . 5 e m } a { c o l o r : # 0 d 6 e f d ; t e x t - d e c o r a t i o n : u n d e r l i n e } a : h o v e r { c o l o r : # 0 a 5 8 c a } a : n o t ( [ h r e f ] ) : n o t ( [ c l a s s ] ) , a : n o t ( [ h r e f ] ) : n o t ( [ c l a s s ] ) : h o v e r { c o l o r : i n h e r i t ; t e x t - d e c o r a t i o n : n o n e } c o d e , k b d , p r e , s a m p { f o n t - f a m i l y : S F M o n o - R e g u l a r , M e n l o , M o n a c o , C o n s o l a s , " L i b e r a t i o n M o n o " , " C o u r i e r N e w " , m o n o s p a c e ; f o n t - s i z e : 1 e m ; d i r e c t i o n : l t r ; u n i c o d e - b i d i : b i d i - o v e r r i d e } p r e { d i s p l a y : b l o c k ; m a r g i n - t o p : 0 ; m a r g i n - b o t t o m : 1 r e m ; o v e r f l o w : a u t o ; f o n t - s i z e : . 8 7 5 e m } p r e c o d e { f o n t - s i z e : i n h e r i t ; c o l o r : i n h e r i t ; w o r d - b r e a k : n o r m a l } c o d e { f o n t - s i z e : . 8 7 5 e m ; c o l o r : # d 6 3 3 8 4 ; w o r d - w r a p : b r e a k - w o r d } a > c o d e { c o l o r : i n h e r i t } k b d { p a d d i n g : . 2 r e m . 4 r e m ; f o n t - s i z e : . 8 7 5 e m ; c o l o r : # f f f ; b a c k g r o u n d - c o l o r : # 2 1 2 5 2 9 ; b o r d e r - r a d i u s : . 2 r e m } k b d k b d { p a d d i n g : 0 ; f o n t - s i z e : 1 e m ; f o n t - w e i g h t : 7 0 0 } f i g u r e { m a r g i n : 0 0 1 r e m } i m g , s v g { v e r t i c a l - a l i g n : m i d d l e } t a b l e { c a p t i o n - s i d e : b o t t o m ; b o r d e r - c o l l a p s e : c o l l a p s e } c a p t i o n { p a d d i n g - t o p : . 5 r e m ; p a d d i n g - b o t t o m : . 5 r e m ; c o l o r : # 6 c 7 5 7 d ; t e x t - a l i g n : l e f t } t h { t e x t - a l i g n : i n h e r i t ; t e x t - a l i g n : - w e b k i t - m a t c h - p a r e n t } t b o d y , t d , t f o o t , t h , t h e a d , t r { b o r d e r - c o l o r : i n h e r i t ; b o r d e r - s t y l e : s o l i d ; b o r d e r - w i d t h : 0 } l a b e l { d i s p l a y : i n l i n e - b l o c k } b u t t o n { b o r d e r - r a d i u s : 0 } b u t t o n : f o c u s : n o t ( : f o c u s - v i s i b l e ) { o u t l i n e : 0 } b u t t o n , i n p u t , o p t g r o u p , s e l e c t , t e x t a r e a { m a r g i n : 0 ; f o n t - f a m i l y : i n h e r i t ; f o n t - s i z e : i n h e r i t ; l i n e - h e i g h t : i n h e r i t } b u t t o n , s e l e c t { t e x t - t r a n s f o r m : n o n e } [ r o l e = b u t t o n ] { c u r s o r : p o i n t e r } s e l e c t { w o r d - w r a p : n o r m a l } s e l e c t : d i s a b l e d { o p a c i t y : 1 } [ l i s t ] : : - w e b k i t - c a l e n d a r - p i c k e r - i n d i c a t o r { d i s p l a y : n o n e } [ t y p e = b u t t o n ] , [ t y p e = r e s e t ] , [ t y p e = s u b m i t ] , b u t t o n { - w e b k i t - a p p e a r a n c e : b u t t o n } [ t y p e = b u t t o n ] : n o t ( : d i s a b l e d ) , [ t y p e = r e s e t ] : n o t ( : d i s a b l e d ) , [ t y p e = s u b m i t ] : n o t ( : d i s a b l e d ) , b u t t o n : n o t ( : d i s a b l e d ) { c u r s o r : p o i n t e r } : : - m o z - f o c u s - i n n e r { p a d d i n g : 0 ; b o r d e r - s t y l e : n o n e } t e x t a r e a { r e s i z e : v e r t i c a l } f i e l d s e t { m i n - w i d t h : 0 ; p a d d i n g : 0 ; m a r g i n : 0 ; b o r d e r : 0 } l e g e n d { f l o a t : l e f t ; w i d t h : 1 0 0 % ; p a d d i n g : 0 ; m a r g i n - b o t t o m : . 5 r e m ; f o n t - s i z e : c a l c ( 1 . 2 7 5 r e m + . 3 v w ) ; l i n e - h e i g h t : i n h e r i t } @ m e d i a ( m i n - w i d t h : 1 2 0 0 p x ) { l e g e n d { f o n t - s i z e : 1 . 5 r e m } } l e g e n d + * { c l e a r : l e f t } : : - w e b k i t - d a t e t i m e - e d i t - d a y - f i e l d , : : - w e b k i t - d a t e t i m e - e d i t - f i e l d s - w r a p p e r , : : - w e b k i t - d a t e t i m e - e d i t - h o u r - f i e l d , : : - w e b k i t - d a t e t i m e - e d i t - m i n u t e , : : - w e b k i t - d a t e t i m e - e d i t - m o n t h - f i e
< style > /*! syntax-highlighting.css */ pre { line-height : 125 % ; } span . linenos { color : inherit ; background-color : transparent ; padding-left : 5 px ; padding-right : 20 px ; } . pdoc-code . hll { background-color : #ffffcc } . pdoc-code { background : #f8f8f8 ; } . pdoc-code . c { color : #3D7B7B ; font-style : italic } . pdoc-code . err { border : 1 px solid #FF0000 } . pdoc-code . k { color : #008000 ; font-weight : bold } . pdoc-code . o { color : #666666 } . pdoc-code . ch { color : #3D7B7B ; font-style : italic } . pdoc-code . cm { color : #3D7B7B ; font-style : italic } . pdoc-code . cp { color : #9C6500 } . pdoc-code . cpf { color : #3D7B7B ; font-style : italic } . pdoc-code . c1 { color : #3D7B7B ; font-style : italic } . pdoc-code . cs { color : #3D7B7B ; font-style : italic } . pdoc-code . gd { color : #A00000 } . pdoc-code . ge { font-style : italic } . pdoc-code . gr { color : #E40000 } . pdoc-code . gh { color : #000080 ; font-weight : bold } . pdoc-code . gi { color : #008400 } . pdoc-code . go { color : #717171 } . pdoc-code . gp { color : #000080 ; font-weight : bold } . pdoc-code . gs { font-weight : bold } . pdoc-code . gu { color : #800080 ; font-weight : bold } . pdoc-code . gt { color : #0044DD } . pdoc-code . kc { color : #008000 ; font-weight : bold } . pdoc-code . kd { color : #008000 ; font-weight : bold } . pdoc-code . kn { color : #008000 ; font-weight : bold } . pdoc-code . kp { color : #008000 } . pdoc-code . kr { color : #008000 ; font-weight : bold } . pdoc-code . kt { color : #B00040 } . pdoc-code . m { color : #666666 } . pdoc-code . s { color : #BA2121 } . pdoc-code . na { color : #687822 } . pdoc-code . nb { color : #008000 } . pdoc-code . nc { color : #0000FF ; font-weight : bold } . pdoc-code . no { color : #880000 } . pdoc-code . nd { color : #AA22FF } . pdoc-code . ni { color : #717171 ; font-weight : bold } . pdoc-code . ne { color : #CB3F38 ; font-weight : bold } . pdoc-code . nf { color : #0000FF } . pdoc-code . nl { color : #767600 } . pdoc-code . nn { color : #0000FF ; font-weight : bold } . pdoc-code . nt { color : #008000 ; font-weight : bold } . pdoc-code . nv { color : #19177C } . pdoc-code . ow { color : #AA22FF ; font-weight : bold } . pdoc-code . w { color : #bbbbbb } . pdoc-code . mb { color : #666666 } . pdoc-code . mf { color : #666666 } . pdoc-code . mh { color : #666666 } . pdoc-code . mi { color : #666666 } . pdoc-code . mo { color : #666666 } . pdoc-code . sa { color : #BA2121 } . pdoc-code . sb { color : #BA2121 } . pdoc-code . sc { color : #BA2121 } . pdoc-code . dl { color : #BA2121 } . pdoc-code . sd { color : #BA2121 ; font-style : italic } . pdoc-code . s2 { color : #BA2121 } . pdoc-code . se { color : #AA5D1F ; font-weight : bold } . pdoc-code . sh { color : #BA2121 } . pdoc-code . si { color : #A45A77 ; font-weight : bold } . pdoc-code . sx { color : #008000 } . pdoc-code . sr { color : #A45A77 } . pdoc-code . s1 { color : #BA2121 } . pdoc-code . ss { color : #19177C } . pdoc-code . bp { color : #008000 } . pdoc-code . fm { color : #0000FF } . pdoc-code . vc { color : #19177C } . pdoc-code . vg { color : #19177C } . pdoc-code . vi { color : #19177C } . pdoc-code . vm { color : #19177C } . pdoc-code . il { color : #666666 } < / style >
< style > /*! theme.css */ : root { --pdoc-background : #fff ; } . pdoc { --text : #212529 ; --muted : #6c757d ; --link : #3660a5 ; --link-hover : #1659c5 ; --code : #f8f8f8 ; --active : #fff598 ; --accent : #eee ; --accent2 : #c1c1c1 ; --nav-hover : rgba ( 255 , 255 , 255 , 0.5 ) ; --name : #0066BB ; --def : #008800 ; --annotation : #007020 ; } < / style >
2025-02-13 21:00:44 +01:00
< style > /*! layout.css */ html , body { width : 100 % ; height : 100 % ; } html , main { scroll-behavior : smooth ; } body { background-color : var ( - - pdoc - background ) ; } @ media ( max-width : 769px ) { # navtoggle { cursor : pointer ; position : absolute ; width : 50 px ; height : 40 px ; top : 1 rem ; right : 1 rem ; border-color : var ( - - text ) ; color : var ( - - text ) ; display : flex ; opacity : 0.8 ; z-index : 999 ; } # navtoggle : hover { opacity : 1 ; } # togglestate + div { display : none ; } # togglestate : checked + div { display : inherit ; } main , header { padding : 2 rem 3 vw ; } header + main { margin-top : -3 rem ; } . git-button { display : none !important ; } nav input [ type = "search" ] { max-width : 77 % ; } nav input [ type = "search" ] : first-child { margin-top : -6 px ; } nav input [ type = "search" ] : valid ~ * { display : none !important ; } } @ media ( min-width : 770px ) { : root { --sidebar-width : clamp ( 12.5 rem , 28 vw , 22 rem ) ; } nav { position : fixed ; overflow : auto ; height : 100 vh ; width : var ( - - sidebar - width ) ; } main , header { padding : 3 rem 2 rem 3 rem calc ( var ( - - sidebar - width ) + 3 rem ) ; width : calc ( 54 rem + var ( - - sidebar - width ) ) ; max-width : 100 % ; } header + main { margin-top : -4 rem ; } # navtoggle { display : none ; } } # togglestate { position : absolute ; height : 0 ; opacity : 0 ; } nav . pdoc { --pad : clamp ( 0.5 rem , 2 vw , 1.75 rem ) ; --indent : 1.5 rem ; background-color : var ( - - accent ) ; border-right : 1 px solid var ( - - accent2 ) ; box-shadow : 0 0 20 px rgba ( 50 , 50 , 50 , .2 ) inset ; padding : 0 0 0 var ( - - pad ) ; overflow-wrap : anywhere ; scrollbar-width : thin ; scrollbar-color : var ( - - accent2 ) transparent ; z-index : 1 } nav . pdoc :: -webkit-scrollbar { width : .4 rem ; } nav . pdoc :: -webkit-scrollbar-thumb { background-color : var ( - - accent2 ) ; } nav . pdoc > div { padding : var ( - - pad ) 0 ; } nav . pdoc . module-list-button { display : inline-flex ; align-items : center ; color : var ( - - text ) ; border-color : var ( - - muted ) ; margin-bottom : 1 rem ; } nav . pdoc . module-list-button : hover { border-color : var ( - - text ) ; } nav . pdoc input [ type = search ] { display : block ; outline-offset : 0 ; width : calc ( 100 % - var ( - - pad ) ) ; } nav . pdoc . logo { max-width : calc ( 100 % - var ( - - pad ) ) ; max-height : 35 vh ; display : block ; margin : 0 auto 1 rem ; transform : translate ( calc ( -.5 * var ( - - pad ) ) , 0 ) ; } nav . pdoc ul { list-style : none ; padding-left : 0 ; } nav . pdoc > div > ul { margin-left : calc ( 0 px - var ( - - pad ) ) ; } nav . pdoc li a { padding : .2 rem 0 .2 rem calc ( var ( - - pad ) + var ( - - indent ) ) ; } nav . pdoc > div > ul > li > a { padding-left : var ( - - pad ) ; } nav . pdoc li { transition : all 100 ms ; } nav . pdoc li : hover { background-color : var ( - - nav - hover ) ; } nav . pdoc a , nav . pdoc a : hover { color : var ( - - text ) ; } nav . pdoc a { display : block ; } nav . pdoc > h2 : first-of-type { margin-top : 1.5 rem ; } nav . pdoc . class : before { content : "class " ; color : var ( - - muted ) ; } nav . pdoc . function : after { content : "()" ; color : var ( - - muted ) ; } nav . pdoc footer : before { content : "" ; display : block ; width : calc ( 100 % - var ( - - pad ) ) ; border-top : solid var ( - - accent2 ) 1 px ; margin-top : 1.5 rem ; padding-top : .5 rem ; } nav . pdoc footer { font-size : small ; } < / style >
< style > / * ! c o n t e n t . c s s * / . p d o c { c o l o r : v a r ( - - t e x t ) ; b o x - s i z i n g : b o r d e r - b o x ; l i n e - h e i g h t : 1 . 5 ; b a c k g r o u n d : n o n e ; } . p d o c . p d o c - b u t t o n { c u r s o r : p o i n t e r ; d i s p l a y : i n l i n e - b l o c k ; b o r d e r : s o l i d b l a c k 1 p x ; b o r d e r - r a d i u s : 2 p x ; f o n t - s i z e : . 7 5 r e m ; p a d d i n g : c a l c ( 0 . 5 e m - 1 p x ) 1 e m ; t r a n s i t i o n : 1 0 0 m s a l l ; } . p d o c . p d o c - a l e r t { p a d d i n g : 1 r e m 1 r e m 1 r e m c a l c ( 1 . 5 r e m + 2 4 p x ) ; b o r d e r : 1 p x s o l i d t r a n s p a r e n t ; b o r d e r - r a d i u s : . 2 5 r e m ; b a c k g r o u n d - r e p e a t : n o - r e p e a t ; b a c k g r o u n d - p o s i t i o n : 1 r e m c e n t e r ; m a r g i n - b o t t o m : 1 r e m ; } . p d o c . p d o c - a l e r t > * : l a s t - c h i l d { m a r g i n - b o t t o m : 0 ; } . p d o c . p d o c - a l e r t - n o t e { c o l o r : # 0 8 4 2 9 8 ; b a c k g r o u n d - c o l o r : # c f e 2 f f ; b o r d e r - c o l o r : # b 6 d 4 f e ; b a c k g r o u n d - i m a g e : u r l ( " d a t a : i m a g e / s v g + x m l , % 3 C s v g % 2 0 x m l n s % 3 D % 2 2 h t t p % 3 A / / w w w . w 3 . o r g / 2 0 0 0 / s v g % 2 2 % 2 0 w i d t h % 3 D % 2 2 2 4 % 2 2 % 2 0 h e i g h t % 3 D % 2 2 2 4 % 2 2 % 2 0 f i l l % 3 D % 2 2 % 2 3 0 8 4 2 9 8 % 2 2 % 2 0 v i e w B o x % 3 D % 2 2 0 % 2 0 0 % 2 0 1 6 % 2 0 1 6 % 2 2 % 3 E % 3 C p a t h % 2 0 d % 3 D % 2 2 M 8 % 2 0 1 6 A 8 % 2 0 8 % 2 0 0 % 2 0 1 % 2 0 0 % 2 0 8 % 2 0 0 a 8 % 2 0 8 % 2 0 0 % 2 0 0 % 2 0 0 % 2 0 0 % 2 0 1 6 z m . 9 3 - 9 . 4 1 2 - 1 % 2 0 4 . 7 0 5 c - . 0 7 . 3 4 . 0 2 9 . 5 3 3 . 3 0 4 . 5 3 3 . 1 9 4 % 2 0 0 % 2 0 . 4 8 7 - . 0 7 . 6 8 6 - . 2 4 6 l - . 0 8 8 . 4 1 6 c - . 2 8 7 . 3 4 6 - . 9 2 . 5 9 8 - 1 . 4 6 5 . 5 9 8 - . 7 0 3 % 2 0 0 - 1 . 0 0 2 - . 4 2 2 - . 8 0 8 - 1 . 3 1 9 l . 7 3 8 - 3 . 4 6 8 c . 0 6 4 - . 2 9 3 . 0 0 6 - . 3 9 9 - . 2 8 7 - . 4 7 l - . 4 5 1 - . 0 8 1 . 0 8 2 - . 3 8 1 % 2 0 2 . 2 9 - . 2 8 7 z M 8 % 2 0 5 . 5 a 1 % 2 0 1 % 2 0 0 % 2 0 1 % 2 0 1 % 2 0 0 - 2 % 2 0 1 % 2 0 1 % 2 0 0 % 2 0 0 % 2 0 1 % 2 0 0 % 2 0 2 z % 2 2 / % 3 E % 3 C / s v g % 3 E " ) ; } . p d o c . p d o c - a l e r t - w a r n i n g { c o l o r : # 6 6 4 d 0 3 ; b a c k g r o u n d - c o l o r : # f f f 3 c d ; b o r d e r - c o l o r : # f f e c b 5 ; b a c k g r o u n d - i m a g e : u r l ( " d a t a : i m a g e / s v g + x m l , % 3 C s v g % 2 0 x m l n s % 3 D % 2 2 h t t p % 3 A / / w w w . w 3 . o r g / 2 0 0 0 / s v g % 2 2 % 2 0 w i d t h % 3 D % 2 2 2 4 % 2 2 % 2 0 h e i g h t % 3 D % 2 2 2 4 % 2 2 % 2 0 f i l l % 3 D % 2 2 % 2 3 6 6 4 d 0 3 % 2 2 % 2 0 v i e w B o x % 3 D % 2 2 0 % 2 0 0 % 2 0 1 6 % 2 0 1 6 % 2 2 % 3 E % 3 C p a t h % 2 0 d % 3 D % 2 2 M 8 . 9 8 2 % 2 0 1 . 5 6 6 a 1 . 1 3 % 2 0 1 . 1 3 % 2 0 0 % 2 0 0 % 2 0 0 - 1 . 9 6 % 2 0 0 L . 1 6 5 % 2 0 1 3 . 2 3 3 c - . 4 5 7 . 7 7 8 . 0 9 1 % 2 0 1 . 7 6 7 . 9 8 % 2 0 1 . 7 6 7 h 1 3 . 7 1 3 c . 8 8 9 % 2 0 0 % 2 0 1 . 4 3 8 - . 9 9 . 9 8 - 1 . 7 6 7 L 8 . 9 8 2 % 2 0 1 . 5 6 6 z M 8 % 2 0 5 c . 5 3 5 % 2 0 0 % 2 0 . 9 5 4 . 4 6 2 . 9 . 9 9 5 l - . 3 5 % 2 0 3 . 5 0 7 a . 5 5 2 . 5 5 2 % 2 0 0 % 2 0 0 % 2 0 1 - 1 . 1 % 2 0 0 L 7 . 1 % 2 0 5 . 9 9 5 A . 9 0 5 . 9 0 5 % 2 0 0 % 2 0 0 % 2 0 1 % 2 0 8 % 2 0 5 z m . 0 0 2 % 2 0 6 a 1 % 2 0 1 % 2 0 0 % 2 0 1 % 2 0 1 % 2 0 0 % 2 0 2 % 2 0 1 % 2 0 1 % 2 0 0 % 2 0 0 % 2 0 1 % 2 0 0 - 2 z % 2 2 / % 3 E % 3 C / s v g % 3 E " ) ; } . p d o c . p d o c - a l e r t - d a n g e r { c o l o r : # 8 4 2 0 2 9 ; b a c k g r o u n d - c o l o r : # f 8 d 7 d a ; b o r d e r - c o l o r : # f 5 c 2 c 7 ; b a c k g r o u n d - i m a g e : u r l ( " d a t a : i m a g e / s v g + x m l , % 3 C s v g % 2 0 x m l n s % 3 D % 2 2 h t t p % 3 A / / w w w . w 3 . o r g / 2 0 0 0 / s v g % 2 2 % 2 0 w i d t h % 3 D % 2 2 2 4 % 2 2 % 2 0 h e i g h t % 3 D % 2 2 2 4 % 2 2 % 2 0 f i l l % 3 D % 2 2 % 2 3 8 4 2 0 2 9 % 2 2 % 2 0 v i e w B o x % 3 D % 2 2 0 % 2 0 0 % 2 0 1 6 % 2 0 1 6 % 2 2 % 3 E % 3 C p a t h % 2 0 d % 3 D % 2 2 M 5 . 5 2 . 3 5 9 A . 5 . 5 % 2 0 0 % 2 0 0 % 2 0 1 % 2 0 6 % 2 0 0 h 4 a . 5 . 5 % 2 0 0 % 2 0 0 % 2 0 1 % 2 0 . 4 7 4 . 6 5 8 L 8 . 6 9 4 % 2 0 6 H 1 2 . 5 a . 5 . 5 % 2 0 0 % 2 0 0 % 2 0 1 % 2 0 . 3 9 5 . 8 0 7 l - 7 % 2 0 9 a . 5 . 5 % 2 0 0 % 2 0 0 % 2 0 1 - . 8 7 3 - . 4 5 4 L 6 . 8 2 3 % 2 0 9 . 5 H 3 . 5 a . 5 . 5 % 2 0 0 % 2 0 0 % 2 0 1 - . 4 8 - . 6 4 1 l 2 . 5 - 8 . 5 z % 2 2 / % 3 E % 3 C / s v g % 3 E " ) ; } . p d o c . v i s u a l l y - h i d d e n { p o s i t i o n : a b s o l u t e ! i m p o r t a n t ; w i d t h : 1 p x ! i m p o r t a n t ; h e i g h t : 1 p x ! i m p o r t a n t ; p a d d i n g : 0 ! i m p o r t a n t ; m a r g i n : - 1 p x ! i m p o r t a n t ; o v e r f l o w : h i d d e n ! i m p o r t a n t ; c l i p : r e c t ( 0 , 0 , 0 , 0 ) ! i m p o r t a n t ; w h i t e - s p a c e : n o w r a p ! i m p o r t a n t ; b o r d e r : 0 ! i m p o r t a n t ; } . p d o c h 1 , . p d o c h 2 , . p d o c h 3 { f o n t - w e i g h t : 3 0 0 ; m a r g i n : . 3 e m 0 ; p a d d i n g : . 2 e m 0 ; } . p d o c > s e c t i o n : n o t ( . m o d u l e - i n f o ) h 1 { f o n t - s i z e : 1 . 5 r e m ; f o n t - w e i g h t : 5 0 0 ; } . p d o c > s e c t i o n : n o t ( . m o d u l e - i n f o ) h 2 { f o n t - s i z e : 1 . 4 r e m ; f o n t - w e i g h t : 5 0 0 ; } . p d o c > s e c t i o n : n o t ( . m o d u l e - i n f o ) h 3 { f o n t - s i z e : 1 . 3 r e m ; f o n t - w e i g h t : 5 0 0 ; } . p d o c > s e c t i o n : n o t ( . m o d u l e - i n f o ) h 4 { f o n t - s i z e : 1 . 2 r e m ; } . p d o c > s e c t i o n : n o t ( . m o d u l e - i n f o ) h 5 { f o n t - s i z e : 1 . 1 r e m ; } . p d o c a { t e x t - d e c o r a t i o n : n o n e ; c o l o r : v a r ( - - l i n k ) ; } . p d o c a : h o v e r { c o l o r : v a r ( - - l i n k - h o v e r ) ; } . p d o c b l o c k q u o t e { m a r g i n - l e f t : 2 r e m ; } . p d o c p r e { b o r d e r - t o p : 1 p x s o l i d v a r ( - - a c c e n t 2 ) ; b o r d e r - b o t t o m : 1 p x s o l i d v a r ( - - a c c e n t 2 ) ; m a r g i n - t o p : 0 ; m a r g i n - b o t t o m : 1 e m ; p a d d i n g : . 5 r e m 0 . 5 r e m . 5 r e m ; o v e r f l o w - x : a u t o ; b a c k g r o u n d - c o l o r : v a r ( - - c o d e ) ; } . p d o c c o d e { c o l o r : v a r ( - - t e x t ) ; p a d d i n g : . 2 e m . 4 e m ; m a r g i n : 0 ; f o n t - s i z e : 8 5 % ; b a c k g r o u n d - c o l o r : v a r ( - - a c c e n t ) ; b o r d e r - r a d i u s : 6 p x ; } . p d o c a > c o d e { c o l o r : i n h e r i t ; } . p d o c p r e > c o d e { d i s p l a y : i n l i n e - b l o c k ; f o n t - s i z e : i n h e r i t ; b a c k g r o u n d : n o n e ; b o r d e r : n o n e ; p a d d i n g : 0 ; } . p d o c > s e c t i o n : n o t ( . m o d u l e - i n f o ) { m a r g i n - b o t t o m : 1 . 5 r e m ; } . p d o c . m o d u l e n a m e { m a r g i n - t o p : 0 ; f o n t - w e i g h t : b o l d ; } . p d o c . m o d u l e n a m e a { c o l o r : v a r ( - - l i n k ) ; t r a n s i t i o n : 1 0 0 m s a l l ; } . p d o c . g i t - b u t t o n { f l o a t : r i g h t ; b o r d e r : s o l i d v a r ( - - l i n k ) 1 p x ; } . p d o c . g i t - b u t t o n : h o v e r { b a c k g r o u n d - c o l o r : v a r ( - - l i n k ) ; c o l o r : v a r ( - - p d o c - b a c k g r o u n d ) ; } . v i e w - s o u r c e - t o g g l e - s t a t e , . v i e w - s o u r c e - t o g g l e - s t a t e ~ . p d o c - c o d e { d i s p l a y : n o n e ; } . v i e w - s o u r c e - t o g g l e - s t a t e : c h e c k e d ~ . p d o c - c o d e { d i s p l a y : b l o c k ; } . v i e w - s o u r c e - b u t t o n { d i s p l a y : i n l i n e - b l o c k ; f l o a t : r i g h t ; f o n t - s i z e : . 7 5 r e m ; l i n e - h e i g h t : 1 . 5 r e m ; c o l o r : v a r ( - - m u t e d ) ; p a d d i n g : 0 . 4 r e m 0 1 .
2025-02-13 15:22:50 +01:00
< style > /*! custom.css */ < / style > < / head >
< body >
< nav class = "pdoc" >
< label id = "navtoggle" for = "togglestate" class = "pdoc-button" > < svg xmlns = 'http://www.w3.org/2000/svg' viewBox = '0 0 30 30' > < path stroke-linecap = 'round' stroke = "currentColor" stroke-miterlimit = '10' stroke-width = '2' d = 'M4 7h22M4 15h22M4 23h22' / > < / svg > < / label >
< input id = "togglestate" type = "checkbox" aria-hidden = "true" tabindex = "-1" >
< div > < a class = "pdoc-button module-list-button" href = "../sqlglot.html" >
< svg xmlns = "http://www.w3.org/2000/svg" width = "16" height = "16" fill = "currentColor" class = "bi bi-box-arrow-in-left" viewBox = "0 0 16 16" >
< path fill-rule = "evenodd" d = "M10 3.5a.5.5 0 0 0-.5-.5h-8a.5.5 0 0 0-.5.5v9a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5v-2a.5.5 0 0 1 1 0v2A1.5 1.5 0 0 1 9.5 14h-8A1.5 1.5 0 0 1 0 12.5v-9A1.5 1.5 0 0 1 1.5 2h8A1.5 1.5 0 0 1 11 3.5v2a.5.5 0 0 1-1 0v-2z" / >
< path fill-rule = "evenodd" d = "M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z" / >
< / svg > sqlglot< / a >
< input type = "search" placeholder = "Search..." role = "searchbox" aria-label = "search"
pattern=".+" required>
2025-02-13 15:47:04 +01:00
< h2 > API Documentation< / h2 >
< ul class = "memberlist" >
2025-02-13 15:22:50 +01:00
< li >
< a class = "function" href = "#unalias_group" > unalias_group< / a >
< / li >
< li >
< a class = "function" href = "#eliminate_distinct_on" > eliminate_distinct_on< / a >
< / li >
2025-02-13 15:45:33 +01:00
< li >
< a class = "function" href = "#eliminate_qualify" > eliminate_qualify< / a >
< / li >
2025-02-13 15:22:50 +01:00
< li >
< a class = "function" href = "#remove_precision_parameterized_types" > remove_precision_parameterized_types< / a >
< / li >
< li >
2025-02-13 15:51:35 +01:00
< a class = "function" href = "#unnest_to_explode" > unnest_to_explode< / a >
< / li >
< li >
< a class = "function" href = "#explode_to_unnest" > explode_to_unnest< / a >
< / li >
2025-02-13 21:03:05 +01:00
< li >
< a class = "variable" href = "#PERCENTILES" > PERCENTILES< / a >
< / li >
< li >
< a class = "function" href = "#add_within_group_for_percentiles" > add_within_group_for_percentiles< / a >
< / li >
2025-02-13 15:56:32 +01:00
< li >
< a class = "function" href = "#remove_within_group_for_percentiles" > remove_within_group_for_percentiles< / a >
< / li >
< li >
< a class = "function" href = "#add_recursive_cte_column_names" > add_recursive_cte_column_names< / a >
< / li >
2025-02-13 15:58:03 +01:00
< li >
< a class = "function" href = "#epoch_cast_to_ts" > epoch_cast_to_ts< / a >
< / li >
2025-02-13 21:03:05 +01:00
< li >
< a class = "function" href = "#eliminate_semi_and_anti_joins" > eliminate_semi_and_anti_joins< / a >
< / li >
2025-02-13 21:15:38 +01:00
< li >
< a class = "function" href = "#eliminate_full_outer_join" > eliminate_full_outer_join< / a >
< / li >
< li >
< a class = "function" href = "#move_ctes_to_top_level" > move_ctes_to_top_level< / a >
< / li >
2025-02-13 21:16:46 +01:00
< li >
< a class = "function" href = "#ensure_bools" > ensure_bools< / a >
< / li >
< li >
< a class = "function" href = "#unqualify_columns" > unqualify_columns< / a >
< / li >
2025-02-13 15:22:50 +01:00
< li >
2025-02-13 15:51:35 +01:00
< a class = "function" href = "#preprocess" > preprocess< / a >
2025-02-13 15:22:50 +01:00
< / li >
< / ul >
< footer > Copyright (c) 2023 Toby Mao< / footer >
< a class = "attribution" title = "pdoc: Python API documentation generator" href = "https://pdoc.dev" target = "_blank" >
built with < span class = "visually-hidden" > pdoc< / span > < img
alt="pdoc logo"
src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20role%3D%22img%22%20aria-label%3D%22pdoc%20logo%22%20width%3D%22300%22%20height%3D%22150%22%20viewBox%3D%22-1%200%2060%2030%22%3E%3Ctitle%3Epdoc%3C/title%3E%3Cpath%20d%3D%22M29.621%2021.293c-.011-.273-.214-.475-.511-.481a.5.5%200%200%200-.489.503l-.044%201.393c-.097.551-.695%201.215-1.566%201.704-.577.428-1.306.486-2.193.182-1.426-.617-2.467-1.654-3.304-2.487l-.173-.172a3.43%203.43%200%200%200-.365-.306.49.49%200%200%200-.286-.196c-1.718-1.06-4.931-1.47-7.353.191l-.219.15c-1.707%201.187-3.413%202.131-4.328%201.03-.02-.027-.49-.685-.141-1.763.233-.721.546-2.408.772-4.076.042-.09.067-.187.046-.288.166-1.347.277-2.625.241-3.351%201.378-1.008%202.271-2.586%202.271-4.362%200-.976-.272-1.935-.788-2.774-.057-.094-.122-.18-.184-.268.033-.167.052-.339.052-.516%200-1.477-1.202-2.679-2.679-2.679-.791%200-1.496.352-1.987.9a6.3%206.3%200%200%200-1.001.029c-.492-.564-1.207-.929-2.012-.929-1.477%200-2.679%201.202-2.679%202.679A2.65%202.65%200%200%200%20.97%206.554c-.383.747-.595%201.572-.595%202.41%200%202.311%201.507%204.29%203.635%205.107-.037.699-.147%202.27-.423%203.294l-.137.461c-.622%202.042-2.515%208.257%201.727%2010.643%201.614.908%203.06%201.248%204.317%201.248%202.665%200%204.492-1.524%205.322-2.401%201.476-1.559%202.886-1.854%206.491.82%201.877%201.393%203.514%201.753%204.861%201.068%202.223-1.713%202.811-3.867%203.399-6.374.077-.846.056-1.469.054-1.537zm-4.835%204.313c-.054.305-.156.586-.242.629-.034-.007-.131-.022-.307-.157-.145-.111-.314-.478-.456-.908.221.121.432.25.675.355.115.039.219.051.33.081zm-2.251-1.238c-.05.33-.158.648-.252.694-.022.001-.125-.018-.307-.157-.217-.166-.488-.906-.639-1.573.358.344.754.693%201.198%201.036zm-3.887-2.337c-.006-.116-.018-.231-.041-.342.635.145%201.189.368%201.599.625.097.231.166.481.174.642-.03.049-.055.101-.067.158-.046.013-.128.026-.298.004-.278-.037-.901-.57-1.367-1.087zm-1.127-.497c.116.306.176.625.12.71-.019.014-.117.045-.345.016-.206-.027-.604-.332-.986-.695.41-.051.816-.056%201.211-.031zm-4.535%201.535c.209.22.379.47.358.598-.006.041-.088.138-.351.234-.144.055-.539-.063-.979-.259a11.66%2011.66%200%200%200%20.972-.573zm.983-.664c.359-.237.738-.418%201.126-.554.25.237.479.548.457.694-.006.042-.087.138-.351.235-.174.064-.694-.105-1.232-.375zm-3.381%201.794c-.022.145-.061.29-.149.401-.133.166-.358.248-.69.251h-.002c-.133%200-.306-.26-.45-.621.417.091.854.07%201.291-.031zm-2.066-8.077a4.78%204.78%200%200%201-.775-.584c.172-.115.505-.254.88-.378l-.105.962zm-.331%202.302a10.32%2010.32%200%200%201-.828-.502c.202-.143.576-.328.984-.49l-.156.992zm-.45%202.157l-.701-.403c.214-.115.536-.249.891-.376a11.57%2011.57%200%200%201-.19.779zm-.181%201.716c.064.398.194.702.298.893-.194-.051-.435-.162-.736-.398.061-.119.224-.3.438-.495zM8.87%204.141c0%20.152-.123.276-.276.276s-.275-.124-.275-.276.123-.276.276-.276.275.124.275.276zm-.735-.389a1.15%201.15%200%200%200-.314.783%201.16%201.16%200%200%200%201.162%201.162c.457%200%20.842-.27%201.032-.653.026.117.042.238.042.362a1.68%201.68%200%200%201-1.679%201.679%201.68%201.68%200%200%201-1.679-1.679c0-.843.626-1.535%201.436-1.654zM5.059%205.406A1.68%201.68%200%200%201%203.38%207.085a1.68%201.68%200%200%201-1.679-1.679c0-.037.009-.072.011-.109.21.3.541.508.935.508a1.16%201.16%200%200%200%201.162-1.162%201.14%201.14%200%200%200-.474-.912c.015%200%20.03-.005.045-.005.926.001%201.679.754%201.679%201.68zM3.198%204.141c0%20.152-.123.276-.276.276s-.275-.124-.275-.276.123-.276.276-.276.275.124.275.276zM1.375%208.964c0-.52.103-1.035.288-1.52.466.394%201.06.64%201.717.64%201.144%200%202.116-.725%202.499-1.738.383%201.012%201.355%201.738%202.499%201.738.867%200%201.631-.421%202.121-1.062.307.605.478%201.267.478%201.942%200%202.486-2.153%204.51-4.801%204.51s-4.801-2.023-4.801-4.51zm24.342%2019.349c-.985.498-2.267.168-3.813-.979-3.073-2.281-5.453-3.199-7.813-.705-1.315%201.391-4.163%203.365-8.423.97-3.174-1.786-2.239-6.266-1.261-9.479l.146-.492c.276-1.02.395-2.457.444-3.268a6.11%206.11%200%200%200%201.18.115%206.01%206.01%200%200%200%202.536-.562l-.006.175c-.802.215-1.848.612
< / a >
< / div >
< / nav >
< main class = "pdoc" >
< section class = "module-info" >
< a class = "pdoc-button git-button" href = "https://github.com/tobymao/sqlglot/tree/main/sqlglot/transforms.py" > Edit on GitHub< / a >
< h1 class = "modulename" >
< a href = "./../sqlglot.html" > sqlglot< / a > < wbr > .transforms < / h1 >
< input id = "mod-transforms-view-source" class = "view-source-toggle-state" type = "checkbox" aria-hidden = "true" tabindex = "-1" >
< label class = "view-source-button" for = "mod-transforms-view-source" > < span > View Source< / span > < / label >
< div class = "pdoc-code codehilite" > < pre > < span > < / span > < span id = "L-1" > < a href = "#L-1" > < span class = "linenos" > 1< / span > < / a > < span class = "kn" > from< / span > < span class = "nn" > __future__< / span > < span class = "kn" > import< / span > < span class = "n" > annotations< / span >
< / span > < span id = "L-2" > < a href = "#L-2" > < span class = "linenos" > 2< / span > < / a >
2025-02-13 15:58:03 +01:00
< / span > < span id = "L-3" > < a href = "#L-3" > < span class = "linenos" > 3< / span > < / a > < span class = "kn" > import< / span > < span class = "nn" > typing< / span > < span class = "k" > as< / span > < span class = "nn" > t< / span >
< / span > < span id = "L-4" > < a href = "#L-4" > < span class = "linenos" > 4< / span > < / a >
< / span > < span id = "L-5" > < a href = "#L-5" > < span class = "linenos" > 5< / span > < / a > < span class = "kn" > from< / span > < span class = "nn" > sqlglot< / span > < span class = "kn" > import< / span > < span class = "n" > expressions< / span > < span class = "k" > as< / span > < span class = "n" > exp< / span >
< / span > < span id = "L-6" > < a href = "#L-6" > < span class = "linenos" > 6< / span > < / a > < span class = "kn" > from< / span > < span class = "nn" > sqlglot.helper< / span > < span class = "kn" > import< / span > < span class = "n" > find_new_name< / span > < span class = "p" > ,< / span > < span class = "n" > name_sequence< / span >
< / span > < span id = "L-7" > < a href = "#L-7" > < span class = "linenos" > 7< / span > < / a >
< / span > < span id = "L-8" > < a href = "#L-8" > < span class = "linenos" > 8< / span > < / a > < span class = "k" > if< / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > TYPE_CHECKING< / span > < span class = "p" > :< / span >
< / span > < span id = "L-9" > < a href = "#L-9" > < span class = "linenos" > 9< / span > < / a > < span class = "kn" > from< / span > < span class = "nn" > sqlglot.generator< / span > < span class = "kn" > import< / span > < span class = "n" > Generator< / span >
< / span > < span id = "L-10" > < a href = "#L-10" > < span class = "linenos" > 10< / span > < / a >
2025-02-13 15:22:50 +01:00
< / span > < span id = "L-11" > < a href = "#L-11" > < span class = "linenos" > 11< / span > < / a >
2025-02-13 15:58:03 +01:00
< / span > < span id = "L-12" > < a href = "#L-12" > < span class = "linenos" > 12< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > unalias_group< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "L-13" > < a href = "#L-13" > < span class = "linenos" > 13< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " < / span >
< / span > < span id = "L-14" > < a href = "#L-14" > < span class = "linenos" > 14< / span > < / a > < span class = "sd" > Replace references to select aliases in GROUP BY clauses.< / span >
< / span > < span id = "L-15" > < a href = "#L-15" > < span class = "linenos" > 15< / span > < / a >
< / span > < span id = "L-16" > < a href = "#L-16" > < span class = "linenos" > 16< / span > < / a > < span class = "sd" > Example:< / span >
< / span > < span id = "L-17" > < a href = "#L-17" > < span class = "linenos" > 17< / span > < / a > < span class = "sd" > > > > import sqlglot< / span >
< / span > < span id = "L-18" > < a href = "#L-18" > < span class = "linenos" > 18< / span > < / a > < span class = "sd" > > > > sqlglot.parse_one(" SELECT a AS b FROM x GROUP BY b" ).transform(unalias_group).sql()< / span >
< / span > < span id = "L-19" > < a href = "#L-19" > < span class = "linenos" > 19< / span > < / a > < span class = "sd" > ' SELECT a AS b FROM x GROUP BY 1' < / span >
< / span > < span id = "L-20" > < a href = "#L-20" > < span class = "linenos" > 20< / span > < / a >
< / span > < span id = "L-21" > < a href = "#L-21" > < span class = "linenos" > 21< / span > < / a > < span class = "sd" > Args:< / span >
< / span > < span id = "L-22" > < a href = "#L-22" > < span class = "linenos" > 22< / span > < / a > < span class = "sd" > expression: the expression that will be transformed.< / span >
< / span > < span id = "L-23" > < a href = "#L-23" > < span class = "linenos" > 23< / span > < / a >
< / span > < span id = "L-24" > < a href = "#L-24" > < span class = "linenos" > 24< / span > < / a > < span class = "sd" > Returns:< / span >
< / span > < span id = "L-25" > < a href = "#L-25" > < span class = "linenos" > 25< / span > < / a > < span class = "sd" > The transformed expression.< / span >
< / span > < span id = "L-26" > < a href = "#L-26" > < span class = "linenos" > 26< / span > < / a > < span class = "sd" > " " " < / span >
< / span > < span id = "L-27" > < a href = "#L-27" > < span class = "linenos" > 27< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Group< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > parent< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Select< / span > < span class = "p" > ):< / span >
< / span > < span id = "L-28" > < a href = "#L-28" > < span class = "linenos" > 28< / span > < / a > < span class = "n" > aliased_selects< / span > < span class = "o" > =< / span > < span class = "p" > {< / span >
< / span > < span id = "L-29" > < a href = "#L-29" > < span class = "linenos" > 29< / span > < / a > < span class = "n" > e< / span > < span class = "o" > .< / span > < span class = "n" > alias< / span > < span class = "p" > :< / span > < span class = "n" > i< / span >
< / span > < span id = "L-30" > < a href = "#L-30" > < span class = "linenos" > 30< / span > < / a > < span class = "k" > for< / span > < span class = "n" > i< / span > < span class = "p" > ,< / span > < span class = "n" > e< / span > < span class = "ow" > in< / span > < span class = "nb" > enumerate< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > parent< / span > < span class = "o" > .< / span > < span class = "n" > expressions< / span > < span class = "p" > ,< / span > < span class = "n" > start< / span > < span class = "o" > =< / span > < span class = "mi" > 1< / span > < span class = "p" > )< / span >
< / span > < span id = "L-31" > < a href = "#L-31" > < span class = "linenos" > 31< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > e< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Alias< / span > < span class = "p" > )< / span >
< / span > < span id = "L-32" > < a href = "#L-32" > < span class = "linenos" > 32< / span > < / a > < span class = "p" > }< / span >
< / span > < span id = "L-33" > < a href = "#L-33" > < span class = "linenos" > 33< / span > < / a >
< / span > < span id = "L-34" > < a href = "#L-34" > < span class = "linenos" > 34< / span > < / a > < span class = "k" > for< / span > < span class = "n" > group_by< / span > < span class = "ow" > in< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > expressions< / span > < span class = "p" > :< / span >
< / span > < span id = "L-35" > < a href = "#L-35" > < span class = "linenos" > 35< / span > < / a > < span class = "k" > if< / span > < span class = "p" > (< / span >
< / span > < span id = "L-36" > < a href = "#L-36" > < span class = "linenos" > 36< / span > < / a > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > group_by< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Column< / span > < span class = "p" > )< / span >
< / span > < span id = "L-37" > < a href = "#L-37" > < span class = "linenos" > 37< / span > < / a > < span class = "ow" > and< / span > < span class = "ow" > not< / span > < span class = "n" > group_by< / span > < span class = "o" > .< / span > < span class = "n" > table< / span >
< / span > < span id = "L-38" > < a href = "#L-38" > < span class = "linenos" > 38< / span > < / a > < span class = "ow" > and< / span > < span class = "n" > group_by< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "ow" > in< / span > < span class = "n" > aliased_selects< / span >
< / span > < span id = "L-39" > < a href = "#L-39" > < span class = "linenos" > 39< / span > < / a > < span class = "p" > ):< / span >
< / span > < span id = "L-40" > < a href = "#L-40" > < span class = "linenos" > 40< / span > < / a > < span class = "n" > group_by< / span > < span class = "o" > .< / span > < span class = "n" > replace< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Literal< / span > < span class = "o" > .< / span > < span class = "n" > number< / span > < span class = "p" > (< / span > < span class = "n" > aliased_selects< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "n" > group_by< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "p" > )))< / span >
< / span > < span id = "L-41" > < a href = "#L-41" > < span class = "linenos" > 41< / span > < / a >
< / span > < span id = "L-42" > < a href = "#L-42" > < span class = "linenos" > 42< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
< / span > < span id = "L-43" > < a href = "#L-43" > < span class = "linenos" > 43< / span > < / a >
2025-02-13 15:22:50 +01:00
< / span > < span id = "L-44" > < a href = "#L-44" > < span class = "linenos" > 44< / span > < / a >
2025-02-13 15:58:03 +01:00
< / span > < span id = "L-45" > < a href = "#L-45" > < span class = "linenos" > 45< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > eliminate_distinct_on< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "L-46" > < a href = "#L-46" > < span class = "linenos" > 46< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " < / span >
< / span > < span id = "L-47" > < a href = "#L-47" > < span class = "linenos" > 47< / span > < / a > < span class = "sd" > Convert SELECT DISTINCT ON statements to a subquery with a window function.< / span >
< / span > < span id = "L-48" > < a href = "#L-48" > < span class = "linenos" > 48< / span > < / a >
< / span > < span id = "L-49" > < a href = "#L-49" > < span class = "linenos" > 49< / span > < / a > < span class = "sd" > This is useful for dialects that don' t support SELECT DISTINCT ON but support window functions.< / span >
< / span > < span id = "L-50" > < a href = "#L-50" > < span class = "linenos" > 50< / span > < / a >
< / span > < span id = "L-51" > < a href = "#L-51" > < span class = "linenos" > 51< / span > < / a > < span class = "sd" > Args:< / span >
< / span > < span id = "L-52" > < a href = "#L-52" > < span class = "linenos" > 52< / span > < / a > < span class = "sd" > expression: the expression that will be transformed.< / span >
< / span > < span id = "L-53" > < a href = "#L-53" > < span class = "linenos" > 53< / span > < / a >
< / span > < span id = "L-54" > < a href = "#L-54" > < span class = "linenos" > 54< / span > < / a > < span class = "sd" > Returns:< / span >
< / span > < span id = "L-55" > < a href = "#L-55" > < span class = "linenos" > 55< / span > < / a > < span class = "sd" > The transformed expression.< / span >
< / span > < span id = "L-56" > < a href = "#L-56" > < span class = "linenos" > 56< / span > < / a > < span class = "sd" > " " " < / span >
< / span > < span id = "L-57" > < a href = "#L-57" > < span class = "linenos" > 57< / span > < / a > < span class = "k" > if< / span > < span class = "p" > (< / span >
< / span > < span id = "L-58" > < a href = "#L-58" > < span class = "linenos" > 58< / span > < / a > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Select< / span > < span class = "p" > )< / span >
< / span > < span id = "L-59" > < a href = "#L-59" > < span class = "linenos" > 59< / span > < / a > < span class = "ow" > and< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " distinct" < / span > < span class = "p" > )< / span >
< / span > < span id = "L-60" > < a href = "#L-60" > < span class = "linenos" > 60< / span > < / a > < span class = "ow" > and< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " distinct" < / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " on" < / span > < span class = "p" > )< / span >
< / span > < span id = "L-61" > < a href = "#L-61" > < span class = "linenos" > 61< / span > < / a > < span class = "ow" > and< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " distinct" < / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " on" < / span > < span class = "p" > ],< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Tuple< / span > < span class = "p" > )< / span >
< / span > < span id = "L-62" > < a href = "#L-62" > < span class = "linenos" > 62< / span > < / a > < span class = "p" > ):< / span >
< / span > < span id = "L-63" > < a href = "#L-63" > < span class = "linenos" > 63< / span > < / a > < span class = "n" > distinct_cols< / span > < span class = "o" > =< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " distinct" < / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > pop< / span > < span class = "p" > ()< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " on" < / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > expressions< / span >
< / span > < span id = "L-64" > < a href = "#L-64" > < span class = "linenos" > 64< / span > < / a > < span class = "n" > outer_selects< / span > < span class = "o" > =< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > selects< / span >
< / span > < span id = "L-65" > < a href = "#L-65" > < span class = "linenos" > 65< / span > < / a > < span class = "n" > row_number< / span > < span class = "o" > =< / span > < span class = "n" > find_new_name< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > named_selects< / span > < span class = "p" > ,< / span > < span class = "s2" > " _row_number" < / span > < span class = "p" > )< / span >
< / span > < span id = "L-66" > < a href = "#L-66" > < span class = "linenos" > 66< / span > < / a > < span class = "n" > window< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Window< / span > < span class = "p" > (< / span > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > RowNumber< / span > < span class = "p" > (),< / span > < span class = "n" > partition_by< / span > < span class = "o" > =< / span > < span class = "n" > distinct_cols< / span > < span class = "p" > )< / span >
< / span > < span id = "L-67" > < a href = "#L-67" > < span class = "linenos" > 67< / span > < / a > < span class = "n" > order< / span > < span class = "o" > =< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " order" < / span > < span class = "p" > )< / span >
< / span > < span id = "L-68" > < a href = "#L-68" > < span class = "linenos" > 68< / span > < / a >
< / span > < span id = "L-69" > < a href = "#L-69" > < span class = "linenos" > 69< / span > < / a > < span class = "k" > if< / span > < span class = "n" > order< / span > < span class = "p" > :< / span >
2025-02-13 21:15:38 +01:00
< / span > < span id = "L-70" > < a href = "#L-70" > < span class = "linenos" > 70< / span > < / a > < span class = "n" > window< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span > < span class = "s2" > " order" < / span > < span class = "p" > ,< / span > < span class = "n" > order< / span > < span class = "o" > .< / span > < span class = "n" > pop< / span > < span class = "p" > ())< / span >
2025-02-13 20:56:33 +01:00
< / span > < span id = "L-71" > < a href = "#L-71" > < span class = "linenos" > 71< / span > < / a > < span class = "k" > else< / span > < span class = "p" > :< / span >
< / span > < span id = "L-72" > < a href = "#L-72" > < span class = "linenos" > 72< / span > < / a > < span class = "n" > window< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span > < span class = "s2" > " order" < / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Order< / span > < span class = "p" > (< / span > < span class = "n" > expressions< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "n" > c< / span > < span class = "o" > .< / span > < span class = "n" > copy< / span > < span class = "p" > ()< / span > < span class = "k" > for< / span > < span class = "n" > c< / span > < span class = "ow" > in< / span > < span class = "n" > distinct_cols< / span > < span class = "p" > ]))< / span >
< / span > < span id = "L-73" > < a href = "#L-73" > < span class = "linenos" > 73< / span > < / a >
< / span > < span id = "L-74" > < a href = "#L-74" > < span class = "linenos" > 74< / span > < / a > < span class = "n" > window< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > alias_< / span > < span class = "p" > (< / span > < span class = "n" > window< / span > < span class = "p" > ,< / span > < span class = "n" > row_number< / span > < span class = "p" > )< / span >
< / span > < span id = "L-75" > < a href = "#L-75" > < span class = "linenos" > 75< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > select< / span > < span class = "p" > (< / span > < span class = "n" > window< / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
2025-02-13 15:58:03 +01:00
< / span > < span id = "L-76" > < a href = "#L-76" > < span class = "linenos" > 76< / span > < / a >
2025-02-13 20:59:23 +01:00
< / span > < span id = "L-77" > < a href = "#L-77" > < span class = "linenos" > 77< / span > < / a > < span class = "k" > return< / span > < span class = "p" > (< / span >
2025-02-13 21:15:38 +01:00
< / span > < span id = "L-78" > < a href = "#L-78" > < span class = "linenos" > 78< / span > < / a > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > select< / span > < span class = "p" > (< / span > < span class = "o" > *< / span > < span class = "n" > outer_selects< / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< / span > < span id = "L-79" > < a href = "#L-79" > < span class = "linenos" > 79< / span > < / a > < span class = "o" > .< / span > < span class = "n" > from_< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > subquery< / span > < span class = "p" > (< / span > < span class = "s2" > " _t" < / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ),< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< / span > < span id = "L-80" > < a href = "#L-80" > < span class = "linenos" > 80< / span > < / a > < span class = "o" > .< / span > < span class = "n" > where< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > row_number< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > eq< / span > < span class = "p" > (< / span > < span class = "mi" > 1< / span > < span class = "p" > ),< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
2025-02-13 20:59:23 +01:00
< / span > < span id = "L-81" > < a href = "#L-81" > < span class = "linenos" > 81< / span > < / a > < span class = "p" > )< / span >
< / span > < span id = "L-82" > < a href = "#L-82" > < span class = "linenos" > 82< / span > < / a >
< / span > < span id = "L-83" > < a href = "#L-83" > < span class = "linenos" > 83< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
< / span > < span id = "L-84" > < a href = "#L-84" > < span class = "linenos" > 84< / span > < / a >
2025-02-13 20:56:33 +01:00
< / span > < span id = "L-85" > < a href = "#L-85" > < span class = "linenos" > 85< / span > < / a >
2025-02-13 20:59:23 +01:00
< / span > < span id = "L-86" > < a href = "#L-86" > < span class = "linenos" > 86< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > eliminate_qualify< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "L-87" > < a href = "#L-87" > < span class = "linenos" > 87< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " < / span >
< / span > < span id = "L-88" > < a href = "#L-88" > < span class = "linenos" > 88< / span > < / a > < span class = "sd" > Convert SELECT statements that contain the QUALIFY clause into subqueries, filtered equivalently.< / span >
< / span > < span id = "L-89" > < a href = "#L-89" > < span class = "linenos" > 89< / span > < / a >
< / span > < span id = "L-90" > < a href = "#L-90" > < span class = "linenos" > 90< / span > < / a > < span class = "sd" > The idea behind this transformation can be seen in Snowflake' s documentation for QUALIFY:< / span >
< / span > < span id = "L-91" > < a href = "#L-91" > < span class = "linenos" > 91< / span > < / a > < span class = "sd" > https://docs.snowflake.com/en/sql-reference/constructs/qualify< / span >
< / span > < span id = "L-92" > < a href = "#L-92" > < span class = "linenos" > 92< / span > < / a >
< / span > < span id = "L-93" > < a href = "#L-93" > < span class = "linenos" > 93< / span > < / a > < span class = "sd" > Some dialects don' t support window functions in the WHERE clause, so we need to include them as< / span >
< / span > < span id = "L-94" > < a href = "#L-94" > < span class = "linenos" > 94< / span > < / a > < span class = "sd" > projections in the subquery, in order to refer to them in the outer filter using aliases. Also,< / span >
< / span > < span id = "L-95" > < a href = "#L-95" > < span class = "linenos" > 95< / span > < / a > < span class = "sd" > if a column is referenced in the QUALIFY clause but is not selected, we need to include it too,< / span >
< / span > < span id = "L-96" > < a href = "#L-96" > < span class = "linenos" > 96< / span > < / a > < span class = "sd" > otherwise we won' t be able to refer to it in the outer query' s WHERE clause.< / span >
< / span > < span id = "L-97" > < a href = "#L-97" > < span class = "linenos" > 97< / span > < / a > < span class = "sd" > " " " < / span >
< / span > < span id = "L-98" > < a href = "#L-98" > < span class = "linenos" > 98< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Select< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " qualify" < / span > < span class = "p" > ):< / span >
< / span > < span id = "L-99" > < a href = "#L-99" > < span class = "linenos" > 99< / span > < / a > < span class = "n" > taken< / span > < span class = "o" > =< / span > < span class = "nb" > set< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > named_selects< / span > < span class = "p" > )< / span >
< / span > < span id = "L-100" > < a href = "#L-100" > < span class = "linenos" > 100< / span > < / a > < span class = "k" > for< / span > < span class = "n" > select< / span > < span class = "ow" > in< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > selects< / span > < span class = "p" > :< / span >
< / span > < span id = "L-101" > < a href = "#L-101" > < span class = "linenos" > 101< / span > < / a > < span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > select< / span > < span class = "o" > .< / span > < span class = "n" > alias_or_name< / span > < span class = "p" > :< / span >
< / span > < span id = "L-102" > < a href = "#L-102" > < span class = "linenos" > 102< / span > < / a > < span class = "n" > alias< / span > < span class = "o" > =< / span > < span class = "n" > find_new_name< / span > < span class = "p" > (< / span > < span class = "n" > taken< / span > < span class = "p" > ,< / span > < span class = "s2" > " _c" < / span > < span class = "p" > )< / span >
< / span > < span id = "L-103" > < a href = "#L-103" > < span class = "linenos" > 103< / span > < / a > < span class = "n" > select< / span > < span class = "o" > .< / span > < span class = "n" > replace< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > alias_< / span > < span class = "p" > (< / span > < span class = "n" > select< / span > < span class = "p" > ,< / span > < span class = "n" > alias< / span > < span class = "p" > ))< / span >
< / span > < span id = "L-104" > < a href = "#L-104" > < span class = "linenos" > 104< / span > < / a > < span class = "n" > taken< / span > < span class = "o" > .< / span > < span class = "n" > add< / span > < span class = "p" > (< / span > < span class = "n" > alias< / span > < span class = "p" > )< / span >
< / span > < span id = "L-105" > < a href = "#L-105" > < span class = "linenos" > 105< / span > < / a >
< / span > < span id = "L-106" > < a href = "#L-106" > < span class = "linenos" > 106< / span > < / a > < span class = "n" > outer_selects< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > select< / span > < span class = "p" > (< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > select< / span > < span class = "o" > .< / span > < span class = "n" > alias_or_name< / span > < span class = "k" > for< / span > < span class = "n" > select< / span > < span class = "ow" > in< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > selects< / span > < span class = "p" > ])< / span >
< / span > < span id = "L-107" > < a href = "#L-107" > < span class = "linenos" > 107< / span > < / a > < span class = "n" > qualify_filters< / span > < span class = "o" > =< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " qualify" < / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > pop< / span > < span class = "p" > ()< / span > < span class = "o" > .< / span > < span class = "n" > this< / span >
< / span > < span id = "L-108" > < a href = "#L-108" > < span class = "linenos" > 108< / span > < / a >
< / span > < span id = "L-109" > < a href = "#L-109" > < span class = "linenos" > 109< / span > < / a > < span class = "n" > select_candidates< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Window< / span > < span class = "k" > if< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > is_star< / span > < span class = "k" > else< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Window< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Column< / span > < span class = "p" > )< / span >
< / span > < span id = "L-110" > < a href = "#L-110" > < span class = "linenos" > 110< / span > < / a > < span class = "k" > for< / span > < span class = "n" > expr< / span > < span class = "ow" > in< / span > < span class = "n" > qualify_filters< / span > < span class = "o" > .< / span > < span class = "n" > find_all< / span > < span class = "p" > (< / span > < span class = "n" > select_candidates< / span > < span class = "p" > ):< / span >
< / span > < span id = "L-111" > < a href = "#L-111" > < span class = "linenos" > 111< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expr< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Window< / span > < span class = "p" > ):< / span >
< / span > < span id = "L-112" > < a href = "#L-112" > < span class = "linenos" > 112< / span > < / a > < span class = "n" > alias< / span > < span class = "o" > =< / span > < span class = "n" > find_new_name< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > named_selects< / span > < span class = "p" > ,< / span > < span class = "s2" > " _w" < / span > < span class = "p" > )< / span >
< / span > < span id = "L-113" > < a href = "#L-113" > < span class = "linenos" > 113< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > select< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > alias_< / span > < span class = "p" > (< / span > < span class = "n" > expr< / span > < span class = "p" > ,< / span > < span class = "n" > alias< / span > < span class = "p" > ),< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< / span > < span id = "L-114" > < a href = "#L-114" > < span class = "linenos" > 114< / span > < / a > < span class = "n" > column< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > alias< / span > < span class = "p" > )< / span >
< / span > < span id = "L-115" > < a href = "#L-115" > < span class = "linenos" > 115< / span > < / a >
< / span > < span id = "L-116" > < a href = "#L-116" > < span class = "linenos" > 116< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expr< / span > < span class = "o" > .< / span > < span class = "n" > parent< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Qualify< / span > < span class = "p" > ):< / span >
< / span > < span id = "L-117" > < a href = "#L-117" > < span class = "linenos" > 117< / span > < / a > < span class = "n" > qualify_filters< / span > < span class = "o" > =< / span > < span class = "n" > column< / span >
< / span > < span id = "L-118" > < a href = "#L-118" > < span class = "linenos" > 118< / span > < / a > < span class = "k" > else< / span > < span class = "p" > :< / span >
< / span > < span id = "L-119" > < a href = "#L-119" > < span class = "linenos" > 119< / span > < / a > < span class = "n" > expr< / span > < span class = "o" > .< / span > < span class = "n" > replace< / span > < span class = "p" > (< / span > < span class = "n" > column< / span > < span class = "p" > )< / span >
< / span > < span id = "L-120" > < a href = "#L-120" > < span class = "linenos" > 120< / span > < / a > < span class = "k" > elif< / span > < span class = "n" > expr< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > named_selects< / span > < span class = "p" > :< / span >
< / span > < span id = "L-121" > < a href = "#L-121" > < span class = "linenos" > 121< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > select< / span > < span class = "p" > (< / span > < span class = "n" > expr< / span > < span class = "o" > .< / span > < span class = "n" > copy< / span > < span class = "p" > (),< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
2025-02-13 20:56:33 +01:00
< / span > < span id = "L-122" > < a href = "#L-122" > < span class = "linenos" > 122< / span > < / a >
2025-02-13 21:15:38 +01:00
< / span > < span id = "L-123" > < a href = "#L-123" > < span class = "linenos" > 123< / span > < / a > < span class = "k" > return< / span > < span class = "n" > outer_selects< / span > < span class = "o" > .< / span > < span class = "n" > from_< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > subquery< / span > < span class = "p" > (< / span > < span class = "n" > alias< / span > < span class = "o" > =< / span > < span class = "s2" > " _t" < / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ),< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > where< / span > < span class = "p" > (< / span >
< / span > < span id = "L-124" > < a href = "#L-124" > < span class = "linenos" > 124< / span > < / a > < span class = "n" > qualify_filters< / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span >
< / span > < span id = "L-125" > < a href = "#L-125" > < span class = "linenos" > 125< / span > < / a > < span class = "p" > )< / span >
2025-02-13 20:59:23 +01:00
< / span > < span id = "L-126" > < a href = "#L-126" > < span class = "linenos" > 126< / span > < / a >
2025-02-13 21:15:38 +01:00
< / span > < span id = "L-127" > < a href = "#L-127" > < span class = "linenos" > 127< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
< / span > < span id = "L-128" > < a href = "#L-128" > < span class = "linenos" > 128< / span > < / a >
< / span > < span id = "L-129" > < a href = "#L-129" > < span class = "linenos" > 129< / span > < / a >
< / span > < span id = "L-130" > < a href = "#L-130" > < span class = "linenos" > 130< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > remove_precision_parameterized_types< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "L-131" > < a href = "#L-131" > < span class = "linenos" > 131< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " < / span >
< / span > < span id = "L-132" > < a href = "#L-132" > < span class = "linenos" > 132< / span > < / a > < span class = "sd" > Some dialects only allow the precision for parameterized types to be defined in the DDL and not in< / span >
< / span > < span id = "L-133" > < a href = "#L-133" > < span class = "linenos" > 133< / span > < / a > < span class = "sd" > other expressions. This transforms removes the precision from parameterized types in expressions.< / span >
< / span > < span id = "L-134" > < a href = "#L-134" > < span class = "linenos" > 134< / span > < / a > < span class = "sd" > " " " < / span >
< / span > < span id = "L-135" > < a href = "#L-135" > < span class = "linenos" > 135< / span > < / a > < span class = "k" > for< / span > < span class = "n" > node< / span > < span class = "ow" > in< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > find_all< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > DataType< / span > < span class = "p" > ):< / span >
< / span > < span id = "L-136" > < a href = "#L-136" > < span class = "linenos" > 136< / span > < / a > < span class = "n" > node< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span >
< / span > < span id = "L-137" > < a href = "#L-137" > < span class = "linenos" > 137< / span > < / a > < span class = "s2" > " expressions" < / span > < span class = "p" > ,< / span > < span class = "p" > [< / span > < span class = "n" > e< / span > < span class = "k" > for< / span > < span class = "n" > e< / span > < span class = "ow" > in< / span > < span class = "n" > node< / span > < span class = "o" > .< / span > < span class = "n" > expressions< / span > < span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > e< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > DataTypeParam< / span > < span class = "p" > )]< / span >
< / span > < span id = "L-138" > < a href = "#L-138" > < span class = "linenos" > 138< / span > < / a > < span class = "p" > )< / span >
2025-02-13 20:59:23 +01:00
< / span > < span id = "L-139" > < a href = "#L-139" > < span class = "linenos" > 139< / span > < / a >
2025-02-13 21:15:38 +01:00
< / span > < span id = "L-140" > < a href = "#L-140" > < span class = "linenos" > 140< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
< / span > < span id = "L-141" > < a href = "#L-141" > < span class = "linenos" > 141< / span > < / a >
< / span > < span id = "L-142" > < a href = "#L-142" > < span class = "linenos" > 142< / span > < / a >
< / span > < span id = "L-143" > < a href = "#L-143" > < span class = "linenos" > 143< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > unnest_to_explode< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
2025-02-13 21:16:46 +01:00
< / span > < span id = "L-144" > < a href = "#L-144" > < span class = "linenos" > 144< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " Convert cross join unnest into lateral view explode." " " < / span >
2025-02-13 21:15:38 +01:00
< / span > < span id = "L-145" > < a href = "#L-145" > < span class = "linenos" > 145< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Select< / span > < span class = "p" > ):< / span >
< / span > < span id = "L-146" > < a href = "#L-146" > < span class = "linenos" > 146< / span > < / a > < span class = "k" > for< / span > < span class = "n" > join< / span > < span class = "ow" > in< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " joins" < / span > < span class = "p" > )< / span > < span class = "ow" > or< / span > < span class = "p" > []:< / span >
< / span > < span id = "L-147" > < a href = "#L-147" > < span class = "linenos" > 147< / span > < / a > < span class = "n" > unnest< / span > < span class = "o" > =< / span > < span class = "n" > join< / span > < span class = "o" > .< / span > < span class = "n" > this< / span >
< / span > < span id = "L-148" > < a href = "#L-148" > < span class = "linenos" > 148< / span > < / a >
< / span > < span id = "L-149" > < a href = "#L-149" > < span class = "linenos" > 149< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > unnest< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Unnest< / span > < span class = "p" > ):< / span >
< / span > < span id = "L-150" > < a href = "#L-150" > < span class = "linenos" > 150< / span > < / a > < span class = "n" > alias< / span > < span class = "o" > =< / span > < span class = "n" > unnest< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " alias" < / span > < span class = "p" > )< / span >
< / span > < span id = "L-151" > < a href = "#L-151" > < span class = "linenos" > 151< / span > < / a > < span class = "n" > udtf< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Posexplode< / span > < span class = "k" > if< / span > < span class = "n" > unnest< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " offset" < / span > < span class = "p" > )< / span > < span class = "k" > else< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Explode< / span >
2025-02-13 20:59:23 +01:00
< / span > < span id = "L-152" > < a href = "#L-152" > < span class = "linenos" > 152< / span > < / a >
2025-02-13 21:15:38 +01:00
< / span > < span id = "L-153" > < a href = "#L-153" > < span class = "linenos" > 153< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " joins" < / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > remove< / span > < span class = "p" > (< / span > < span class = "n" > join< / span > < span class = "p" > )< / span >
< / span > < span id = "L-154" > < a href = "#L-154" > < span class = "linenos" > 154< / span > < / a >
< / span > < span id = "L-155" > < a href = "#L-155" > < span class = "linenos" > 155< / span > < / a > < span class = "k" > for< / span > < span class = "n" > e< / span > < span class = "p" > ,< / span > < span class = "n" > column< / span > < span class = "ow" > in< / span > < span class = "nb" > zip< / span > < span class = "p" > (< / span > < span class = "n" > unnest< / span > < span class = "o" > .< / span > < span class = "n" > expressions< / span > < span class = "p" > ,< / span > < span class = "n" > alias< / span > < span class = "o" > .< / span > < span class = "n" > columns< / span > < span class = "k" > if< / span > < span class = "n" > alias< / span > < span class = "k" > else< / span > < span class = "p" > []):< / span >
< / span > < span id = "L-156" > < a href = "#L-156" > < span class = "linenos" > 156< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span >
< / span > < span id = "L-157" > < a href = "#L-157" > < span class = "linenos" > 157< / span > < / a > < span class = "s2" > " laterals" < / span > < span class = "p" > ,< / span >
< / span > < span id = "L-158" > < a href = "#L-158" > < span class = "linenos" > 158< / span > < / a > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Lateral< / span > < span class = "p" > (< / span >
< / span > < span id = "L-159" > < a href = "#L-159" > < span class = "linenos" > 159< / span > < / a > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > udtf< / span > < span class = "p" > (< / span > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > e< / span > < span class = "p" > ),< / span >
< / span > < span id = "L-160" > < a href = "#L-160" > < span class = "linenos" > 160< / span > < / a > < span class = "n" > view< / span > < span class = "o" > =< / span > < span class = "kc" > True< / span > < span class = "p" > ,< / span >
< / span > < span id = "L-161" > < a href = "#L-161" > < span class = "linenos" > 161< / span > < / a > < span class = "n" > alias< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > TableAlias< / span > < span class = "p" > (< / span > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > alias< / span > < span class = "o" > .< / span > < span class = "n" > this< / span > < span class = "p" > ,< / span > < span class = "n" > columns< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "n" > column< / span > < span class = "p" > ]),< / span > < span class = "c1" > # type: ignore< / span >
< / span > < span id = "L-162" > < a href = "#L-162" > < span class = "linenos" > 162< / span > < / a > < span class = "p" > ),< / span >
< / span > < span id = "L-163" > < a href = "#L-163" > < span class = "linenos" > 163< / span > < / a > < span class = "p" > )< / span >
2025-02-13 20:59:23 +01:00
< / span > < span id = "L-164" > < a href = "#L-164" > < span class = "linenos" > 164< / span > < / a >
2025-02-13 21:15:38 +01:00
< / span > < span id = "L-165" > < a href = "#L-165" > < span class = "linenos" > 165< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
< / span > < span id = "L-166" > < a href = "#L-166" > < span class = "linenos" > 166< / span > < / a >
< / span > < span id = "L-167" > < a href = "#L-167" > < span class = "linenos" > 167< / span > < / a >
< / span > < span id = "L-168" > < a href = "#L-168" > < span class = "linenos" > 168< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > explode_to_unnest< / span > < span class = "p" > (< / span > < span class = "n" > index_offset< / span > < span class = "p" > :< / span > < span class = "nb" > int< / span > < span class = "o" > =< / span > < span class = "mi" > 0< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > Callable< / span > < span class = "p" > [[< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > ],< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > ]:< / span >
2025-02-13 21:16:46 +01:00
< / span > < span id = "L-169" > < a href = "#L-169" > < span class = "linenos" > 169< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " Convert explode/posexplode into unnest." " " < / span >
2025-02-13 21:15:38 +01:00
< / span > < span id = "L-170" > < a href = "#L-170" > < span class = "linenos" > 170< / span > < / a >
< / span > < span id = "L-171" > < a href = "#L-171" > < span class = "linenos" > 171< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > _explode_to_unnest< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "L-172" > < a href = "#L-172" > < span class = "linenos" > 172< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Select< / span > < span class = "p" > ):< / span >
< / span > < span id = "L-173" > < a href = "#L-173" > < span class = "linenos" > 173< / span > < / a > < span class = "kn" > from< / span > < span class = "nn" > sqlglot.optimizer.scope< / span > < span class = "kn" > import< / span > < span class = "n" > Scope< / span >
2025-02-13 21:03:05 +01:00
< / span > < span id = "L-174" > < a href = "#L-174" > < span class = "linenos" > 174< / span > < / a >
2025-02-13 21:15:38 +01:00
< / span > < span id = "L-175" > < a href = "#L-175" > < span class = "linenos" > 175< / span > < / a > < span class = "n" > taken_select_names< / span > < span class = "o" > =< / span > < span class = "nb" > set< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > named_selects< / span > < span class = "p" > )< / span >
< / span > < span id = "L-176" > < a href = "#L-176" > < span class = "linenos" > 176< / span > < / a > < span class = "n" > taken_source_names< / span > < span class = "o" > =< / span > < span class = "p" > {< / span > < span class = "n" > name< / span > < span class = "k" > for< / span > < span class = "n" > name< / span > < span class = "p" > ,< / span > < span class = "n" > _< / span > < span class = "ow" > in< / span > < span class = "n" > Scope< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > references< / span > < span class = "p" > }< / span >
< / span > < span id = "L-177" > < a href = "#L-177" > < span class = "linenos" > 177< / span > < / a >
< / span > < span id = "L-178" > < a href = "#L-178" > < span class = "linenos" > 178< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > new_name< / span > < span class = "p" > (< / span > < span class = "n" > names< / span > < span class = "p" > :< / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > Set< / span > < span class = "p" > [< / span > < span class = "nb" > str< / span > < span class = "p" > ],< / span > < span class = "n" > name< / span > < span class = "p" > :< / span > < span class = "nb" > str< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "nb" > str< / span > < span class = "p" > :< / span >
< / span > < span id = "L-179" > < a href = "#L-179" > < span class = "linenos" > 179< / span > < / a > < span class = "n" > name< / span > < span class = "o" > =< / span > < span class = "n" > find_new_name< / span > < span class = "p" > (< / span > < span class = "n" > names< / span > < span class = "p" > ,< / span > < span class = "n" > name< / span > < span class = "p" > )< / span >
< / span > < span id = "L-180" > < a href = "#L-180" > < span class = "linenos" > 180< / span > < / a > < span class = "n" > names< / span > < span class = "o" > .< / span > < span class = "n" > add< / span > < span class = "p" > (< / span > < span class = "n" > name< / span > < span class = "p" > )< / span >
< / span > < span id = "L-181" > < a href = "#L-181" > < span class = "linenos" > 181< / span > < / a > < span class = "k" > return< / span > < span class = "n" > name< / span >
< / span > < span id = "L-182" > < a href = "#L-182" > < span class = "linenos" > 182< / span > < / a >
< / span > < span id = "L-183" > < a href = "#L-183" > < span class = "linenos" > 183< / span > < / a > < span class = "n" > arrays< / span > < span class = "p" > :< / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > List< / span > < span class = "p" > [< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Condition< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< / span > < span id = "L-184" > < a href = "#L-184" > < span class = "linenos" > 184< / span > < / a > < span class = "n" > series_alias< / span > < span class = "o" > =< / span > < span class = "n" > new_name< / span > < span class = "p" > (< / span > < span class = "n" > taken_select_names< / span > < span class = "p" > ,< / span > < span class = "s2" > " pos" < / span > < span class = "p" > )< / span >
< / span > < span id = "L-185" > < a href = "#L-185" > < span class = "linenos" > 185< / span > < / a > < span class = "n" > series< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > alias_< / span > < span class = "p" > (< / span >
< / span > < span id = "L-186" > < a href = "#L-186" > < span class = "linenos" > 186< / span > < / a > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Unnest< / span > < span class = "p" > (< / span >
< / span > < span id = "L-187" > < a href = "#L-187" > < span class = "linenos" > 187< / span > < / a > < span class = "n" > expressions< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > GenerateSeries< / span > < span class = "p" > (< / span > < span class = "n" > start< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Literal< / span > < span class = "o" > .< / span > < span class = "n" > number< / span > < span class = "p" > (< / span > < span class = "n" > index_offset< / span > < span class = "p" > ))]< / span >
< / span > < span id = "L-188" > < a href = "#L-188" > < span class = "linenos" > 188< / span > < / a > < span class = "p" > ),< / span >
< / span > < span id = "L-189" > < a href = "#L-189" > < span class = "linenos" > 189< / span > < / a > < span class = "n" > new_name< / span > < span class = "p" > (< / span > < span class = "n" > taken_source_names< / span > < span class = "p" > ,< / span > < span class = "s2" > " _u" < / span > < span class = "p" > ),< / span >
< / span > < span id = "L-190" > < a href = "#L-190" > < span class = "linenos" > 190< / span > < / a > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "n" > series_alias< / span > < span class = "p" > ],< / span >
< / span > < span id = "L-191" > < a href = "#L-191" > < span class = "linenos" > 191< / span > < / a > < span class = "p" > )< / span >
< / span > < span id = "L-192" > < a href = "#L-192" > < span class = "linenos" > 192< / span > < / a >
< / span > < span id = "L-193" > < a href = "#L-193" > < span class = "linenos" > 193< / span > < / a > < span class = "c1" > # we use list here because expression.selects is mutated inside the loop< / span >
< / span > < span id = "L-194" > < a href = "#L-194" > < span class = "linenos" > 194< / span > < / a > < span class = "k" > for< / span > < span class = "n" > select< / span > < span class = "ow" > in< / span > < span class = "nb" > list< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > selects< / span > < span class = "p" > ):< / span >
< / span > < span id = "L-195" > < a href = "#L-195" > < span class = "linenos" > 195< / span > < / a > < span class = "n" > explode< / span > < span class = "o" > =< / span > < span class = "n" > select< / span > < span class = "o" > .< / span > < span class = "n" > find< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Explode< / span > < span class = "p" > )< / span >
< / span > < span id = "L-196" > < a href = "#L-196" > < span class = "linenos" > 196< / span > < / a >
< / span > < span id = "L-197" > < a href = "#L-197" > < span class = "linenos" > 197< / span > < / a > < span class = "k" > if< / span > < span class = "n" > explode< / span > < span class = "p" > :< / span >
< / span > < span id = "L-198" > < a href = "#L-198" > < span class = "linenos" > 198< / span > < / a > < span class = "n" > pos_alias< / span > < span class = "o" > =< / span > < span class = "s2" > " " < / span >
< / span > < span id = "L-199" > < a href = "#L-199" > < span class = "linenos" > 199< / span > < / a > < span class = "n" > explode_alias< / span > < span class = "o" > =< / span > < span class = "s2" > " " < / span >
< / span > < span id = "L-200" > < a href = "#L-200" > < span class = "linenos" > 200< / span > < / a >
< / span > < span id = "L-201" > < a href = "#L-201" > < span class = "linenos" > 201< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > select< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Alias< / span > < span class = "p" > ):< / span >
2025-02-13 21:16:46 +01:00
< / span > < span id = "L-202" > < a href = "#L-202" > < span class = "linenos" > 202< / span > < / a > < span class = "n" > explode_alias< / span > < span class = "o" > =< / span > < span class = "n" > select< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " alias" < / span > < span class = "p" > ]< / span >
2025-02-13 21:15:38 +01:00
< / span > < span id = "L-203" > < a href = "#L-203" > < span class = "linenos" > 203< / span > < / a > < span class = "n" > alias< / span > < span class = "o" > =< / span > < span class = "n" > select< / span >
< / span > < span id = "L-204" > < a href = "#L-204" > < span class = "linenos" > 204< / span > < / a > < span class = "k" > elif< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > select< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Aliases< / span > < span class = "p" > ):< / span >
2025-02-13 21:16:46 +01:00
< / span > < span id = "L-205" > < a href = "#L-205" > < span class = "linenos" > 205< / span > < / a > < span class = "n" > pos_alias< / span > < span class = "o" > =< / span > < span class = "n" > select< / span > < span class = "o" > .< / span > < span class = "n" > aliases< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span >
< / span > < span id = "L-206" > < a href = "#L-206" > < span class = "linenos" > 206< / span > < / a > < span class = "n" > explode_alias< / span > < span class = "o" > =< / span > < span class = "n" > select< / span > < span class = "o" > .< / span > < span class = "n" > aliases< / span > < span class = "p" > [< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span >
2025-02-13 21:15:38 +01:00
< / span > < span id = "L-207" > < a href = "#L-207" > < span class = "linenos" > 207< / span > < / a > < span class = "n" > alias< / span > < span class = "o" > =< / span > < span class = "n" > select< / span > < span class = "o" > .< / span > < span class = "n" > replace< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > alias_< / span > < span class = "p" > (< / span > < span class = "n" > select< / span > < span class = "o" > .< / span > < span class = "n" > this< / span > < span class = "p" > ,< / span > < span class = "s2" > " " < / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ))< / span >
< / span > < span id = "L-208" > < a href = "#L-208" > < span class = "linenos" > 208< / span > < / a > < span class = "k" > else< / span > < span class = "p" > :< / span >
< / span > < span id = "L-209" > < a href = "#L-209" > < span class = "linenos" > 209< / span > < / a > < span class = "n" > alias< / span > < span class = "o" > =< / span > < span class = "n" > select< / span > < span class = "o" > .< / span > < span class = "n" > replace< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > alias_< / span > < span class = "p" > (< / span > < span class = "n" > select< / span > < span class = "p" > ,< / span > < span class = "s2" > " " < / span > < span class = "p" > ))< / span >
< / span > < span id = "L-210" > < a href = "#L-210" > < span class = "linenos" > 210< / span > < / a > < span class = "n" > explode< / span > < span class = "o" > =< / span > < span class = "n" > alias< / span > < span class = "o" > .< / span > < span class = "n" > find< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Explode< / span > < span class = "p" > )< / span >
< / span > < span id = "L-211" > < a href = "#L-211" > < span class = "linenos" > 211< / span > < / a > < span class = "k" > assert< / span > < span class = "n" > explode< / span >
2025-02-13 21:04:14 +01:00
< / span > < span id = "L-212" > < a href = "#L-212" > < span class = "linenos" > 212< / span > < / a >
2025-02-13 21:15:38 +01:00
< / span > < span id = "L-213" > < a href = "#L-213" > < span class = "linenos" > 213< / span > < / a > < span class = "n" > is_posexplode< / span > < span class = "o" > =< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > explode< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Posexplode< / span > < span class = "p" > )< / span >
< / span > < span id = "L-214" > < a href = "#L-214" > < span class = "linenos" > 214< / span > < / a > < span class = "n" > explode_arg< / span > < span class = "o" > =< / span > < span class = "n" > explode< / span > < span class = "o" > .< / span > < span class = "n" > this< / span >
< / span > < span id = "L-215" > < a href = "#L-215" > < span class = "linenos" > 215< / span > < / a >
< / span > < span id = "L-216" > < a href = "#L-216" > < span class = "linenos" > 216< / span > < / a > < span class = "c1" > # This ensures that we won' t use [POS]EXPLODE' s argument as a new selection< / span >
< / span > < span id = "L-217" > < a href = "#L-217" > < span class = "linenos" > 217< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > explode_arg< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Column< / span > < span class = "p" > ):< / span >
< / span > < span id = "L-218" > < a href = "#L-218" > < span class = "linenos" > 218< / span > < / a > < span class = "n" > taken_select_names< / span > < span class = "o" > .< / span > < span class = "n" > add< / span > < span class = "p" > (< / span > < span class = "n" > explode_arg< / span > < span class = "o" > .< / span > < span class = "n" > output_name< / span > < span class = "p" > )< / span >
< / span > < span id = "L-219" > < a href = "#L-219" > < span class = "linenos" > 219< / span > < / a >
< / span > < span id = "L-220" > < a href = "#L-220" > < span class = "linenos" > 220< / span > < / a > < span class = "n" > unnest_source_alias< / span > < span class = "o" > =< / span > < span class = "n" > new_name< / span > < span class = "p" > (< / span > < span class = "n" > taken_source_names< / span > < span class = "p" > ,< / span > < span class = "s2" > " _u" < / span > < span class = "p" > )< / span >
2025-02-13 21:04:14 +01:00
< / span > < span id = "L-221" > < a href = "#L-221" > < span class = "linenos" > 221< / span > < / a >
2025-02-13 21:15:38 +01:00
< / span > < span id = "L-222" > < a href = "#L-222" > < span class = "linenos" > 222< / span > < / a > < span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > explode_alias< / span > < span class = "p" > :< / span >
< / span > < span id = "L-223" > < a href = "#L-223" > < span class = "linenos" > 223< / span > < / a > < span class = "n" > explode_alias< / span > < span class = "o" > =< / span > < span class = "n" > new_name< / span > < span class = "p" > (< / span > < span class = "n" > taken_select_names< / span > < span class = "p" > ,< / span > < span class = "s2" > " col" < / span > < span class = "p" > )< / span >
2025-02-13 21:04:14 +01:00
< / span > < span id = "L-224" > < a href = "#L-224" > < span class = "linenos" > 224< / span > < / a >
2025-02-13 21:15:38 +01:00
< / span > < span id = "L-225" > < a href = "#L-225" > < span class = "linenos" > 225< / span > < / a > < span class = "k" > if< / span > < span class = "n" > is_posexplode< / span > < span class = "p" > :< / span >
< / span > < span id = "L-226" > < a href = "#L-226" > < span class = "linenos" > 226< / span > < / a > < span class = "n" > pos_alias< / span > < span class = "o" > =< / span > < span class = "n" > new_name< / span > < span class = "p" > (< / span > < span class = "n" > taken_select_names< / span > < span class = "p" > ,< / span > < span class = "s2" > " pos" < / span > < span class = "p" > )< / span >
2025-02-13 21:03:05 +01:00
< / span > < span id = "L-227" > < a href = "#L-227" > < span class = "linenos" > 227< / span > < / a >
2025-02-13 21:15:38 +01:00
< / span > < span id = "L-228" > < a href = "#L-228" > < span class = "linenos" > 228< / span > < / a > < span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > pos_alias< / span > < span class = "p" > :< / span >
< / span > < span id = "L-229" > < a href = "#L-229" > < span class = "linenos" > 229< / span > < / a > < span class = "n" > pos_alias< / span > < span class = "o" > =< / span > < span class = "n" > new_name< / span > < span class = "p" > (< / span > < span class = "n" > taken_select_names< / span > < span class = "p" > ,< / span > < span class = "s2" > " pos" < / span > < span class = "p" > )< / span >
< / span > < span id = "L-230" > < a href = "#L-230" > < span class = "linenos" > 230< / span > < / a >
< / span > < span id = "L-231" > < a href = "#L-231" > < span class = "linenos" > 231< / span > < / a > < span class = "n" > alias< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span > < span class = "s2" > " alias" < / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > to_identifier< / span > < span class = "p" > (< / span > < span class = "n" > explode_alias< / span > < span class = "p" > ))< / span >
< / span > < span id = "L-232" > < a href = "#L-232" > < span class = "linenos" > 232< / span > < / a >
2025-02-13 21:16:46 +01:00
< / span > < span id = "L-233" > < a href = "#L-233" > < span class = "linenos" > 233< / span > < / a > < span class = "n" > series_table_alias< / span > < span class = "o" > =< / span > < span class = "n" > series< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " alias" < / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > this< / span >
< / span > < span id = "L-234" > < a href = "#L-234" > < span class = "linenos" > 234< / span > < / a > < span class = "n" > column< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > If< / span > < span class = "p" > (< / span >
< / span > < span id = "L-235" > < a href = "#L-235" > < span class = "linenos" > 235< / span > < / a > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > series_alias< / span > < span class = "p" > ,< / span > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "n" > series_table_alias< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > eq< / span > < span class = "p" > (< / span >
< / span > < span id = "L-236" > < a href = "#L-236" > < span class = "linenos" > 236< / span > < / a > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > pos_alias< / span > < span class = "p" > ,< / span > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "n" > unnest_source_alias< / span > < span class = "p" > )< / span >
< / span > < span id = "L-237" > < a href = "#L-237" > < span class = "linenos" > 237< / span > < / a > < span class = "p" > ),< / span >
< / span > < span id = "L-238" > < a href = "#L-238" > < span class = "linenos" > 238< / span > < / a > < span class = "n" > true< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > explode_alias< / span > < span class = "p" > ,< / span > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "n" > unnest_source_alias< / span > < span class = "p" > ),< / span >
< / span > < span id = "L-239" > < a href = "#L-239" > < span class = "linenos" > 239< / span > < / a > < span class = "p" > )< / span >
< / span > < span id = "L-240" > < a href = "#L-240" > < span class = "linenos" > 240< / span > < / a >
< / span > < span id = "L-241" > < a href = "#L-241" > < span class = "linenos" > 241< / span > < / a > < span class = "n" > explode< / span > < span class = "o" > .< / span > < span class = "n" > replace< / span > < span class = "p" > (< / span > < span class = "n" > column< / span > < span class = "p" > )< / span >
< / span > < span id = "L-242" > < a href = "#L-242" > < span class = "linenos" > 242< / span > < / a >
< / span > < span id = "L-243" > < a href = "#L-243" > < span class = "linenos" > 243< / span > < / a > < span class = "k" > if< / span > < span class = "n" > is_posexplode< / span > < span class = "p" > :< / span >
< / span > < span id = "L-244" > < a href = "#L-244" > < span class = "linenos" > 244< / span > < / a > < span class = "n" > expressions< / span > < span class = "o" > =< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > expressions< / span >
< / span > < span id = "L-245" > < a href = "#L-245" > < span class = "linenos" > 245< / span > < / a > < span class = "n" > expressions< / span > < span class = "o" > .< / span > < span class = "n" > insert< / span > < span class = "p" > (< / span >
< / span > < span id = "L-246" > < a href = "#L-246" > < span class = "linenos" > 246< / span > < / a > < span class = "n" > expressions< / span > < span class = "o" > .< / span > < span class = "n" > index< / span > < span class = "p" > (< / span > < span class = "n" > alias< / span > < span class = "p" > )< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span > < span class = "p" > ,< / span >
< / span > < span id = "L-247" > < a href = "#L-247" > < span class = "linenos" > 247< / span > < / a > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > If< / span > < span class = "p" > (< / span >
< / span > < span id = "L-248" > < a href = "#L-248" > < span class = "linenos" > 248< / span > < / a > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > series_alias< / span > < span class = "p" > ,< / span > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "n" > series_table_alias< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > eq< / span > < span class = "p" > (< / span >
< / span > < span id = "L-249" > < a href = "#L-249" > < span class = "linenos" > 249< / span > < / a > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > pos_alias< / span > < span class = "p" > ,< / span > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "n" > unnest_source_alias< / span > < span class = "p" > )< / span >
< / span > < span id = "L-250" > < a href = "#L-250" > < span class = "linenos" > 250< / span > < / a > < span class = "p" > ),< / span >
< / span > < span id = "L-251" > < a href = "#L-251" > < span class = "linenos" > 251< / span > < / a > < span class = "n" > true< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > pos_alias< / span > < span class = "p" > ,< / span > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "n" > unnest_source_alias< / span > < span class = "p" > ),< / span >
< / span > < span id = "L-252" > < a href = "#L-252" > < span class = "linenos" > 252< / span > < / a > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > as_< / span > < span class = "p" > (< / span > < span class = "n" > pos_alias< / span > < span class = "p" > ),< / span >
< / span > < span id = "L-253" > < a href = "#L-253" > < span class = "linenos" > 253< / span > < / a > < span class = "p" > )< / span >
< / span > < span id = "L-254" > < a href = "#L-254" > < span class = "linenos" > 254< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span > < span class = "s2" > " expressions" < / span > < span class = "p" > ,< / span > < span class = "n" > expressions< / span > < span class = "p" > )< / span >
< / span > < span id = "L-255" > < a href = "#L-255" > < span class = "linenos" > 255< / span > < / a >
< / span > < span id = "L-256" > < a href = "#L-256" > < span class = "linenos" > 256< / span > < / a > < span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > arrays< / span > < span class = "p" > :< / span >
< / span > < span id = "L-257" > < a href = "#L-257" > < span class = "linenos" > 257< / span > < / a > < span class = "k" > if< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " from" < / span > < span class = "p" > ):< / span >
2025-02-13 21:18:57 +01:00
< / span > < span id = "L-258" > < a href = "#L-258" > < span class = "linenos" > 258< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > (< / span > < span class = "n" > series< / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ,< / span > < span class = "n" > join_type< / span > < span class = "o" > =< / span > < span class = "s2" > " CROSS" < / span > < span class = "p" > )< / span >
2025-02-13 21:16:46 +01:00
< / span > < span id = "L-259" > < a href = "#L-259" > < span class = "linenos" > 259< / span > < / a > < span class = "k" > else< / span > < span class = "p" > :< / span >
< / span > < span id = "L-260" > < a href = "#L-260" > < span class = "linenos" > 260< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > from_< / span > < span class = "p" > (< / span > < span class = "n" > series< / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< / span > < span id = "L-261" > < a href = "#L-261" > < span class = "linenos" > 261< / span > < / a >
< / span > < span id = "L-262" > < a href = "#L-262" > < span class = "linenos" > 262< / span > < / a > < span class = "n" > size< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Condition< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > ArraySize< / span > < span class = "p" > (< / span > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > explode_arg< / span > < span class = "o" > .< / span > < span class = "n" > copy< / span > < span class = "p" > ())< / span >
< / span > < span id = "L-263" > < a href = "#L-263" > < span class = "linenos" > 263< / span > < / a > < span class = "n" > arrays< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > size< / span > < span class = "p" > )< / span >
< / span > < span id = "L-264" > < a href = "#L-264" > < span class = "linenos" > 264< / span > < / a >
< / span > < span id = "L-265" > < a href = "#L-265" > < span class = "linenos" > 265< / span > < / a > < span class = "c1" > # trino doesn' t support left join unnest with on conditions< / span >
< / span > < span id = "L-266" > < a href = "#L-266" > < span class = "linenos" > 266< / span > < / a > < span class = "c1" > # if it did, this would be much simpler< / span >
< / span > < span id = "L-267" > < a href = "#L-267" > < span class = "linenos" > 267< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > (< / span >
< / span > < span id = "L-268" > < a href = "#L-268" > < span class = "linenos" > 268< / span > < / a > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > alias_< / span > < span class = "p" > (< / span >
< / span > < span id = "L-269" > < a href = "#L-269" > < span class = "linenos" > 269< / span > < / a > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Unnest< / span > < span class = "p" > (< / span >
< / span > < span id = "L-270" > < a href = "#L-270" > < span class = "linenos" > 270< / span > < / a > < span class = "n" > expressions< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "n" > explode_arg< / span > < span class = "o" > .< / span > < span class = "n" > copy< / span > < span class = "p" > ()],< / span >
< / span > < span id = "L-271" > < a href = "#L-271" > < span class = "linenos" > 271< / span > < / a > < span class = "n" > offset< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > to_identifier< / span > < span class = "p" > (< / span > < span class = "n" > pos_alias< / span > < span class = "p" > ),< / span >
< / span > < span id = "L-272" > < a href = "#L-272" > < span class = "linenos" > 272< / span > < / a > < span class = "p" > ),< / span >
< / span > < span id = "L-273" > < a href = "#L-273" > < span class = "linenos" > 273< / span > < / a > < span class = "n" > unnest_source_alias< / span > < span class = "p" > ,< / span >
< / span > < span id = "L-274" > < a href = "#L-274" > < span class = "linenos" > 274< / span > < / a > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "n" > explode_alias< / span > < span class = "p" > ],< / span >
< / span > < span id = "L-275" > < a href = "#L-275" > < span class = "linenos" > 275< / span > < / a > < span class = "p" > ),< / span >
< / span > < span id = "L-276" > < a href = "#L-276" > < span class = "linenos" > 276< / span > < / a > < span class = "n" > join_type< / span > < span class = "o" > =< / span > < span class = "s2" > " CROSS" < / span > < span class = "p" > ,< / span >
< / span > < span id = "L-277" > < a href = "#L-277" > < span class = "linenos" > 277< / span > < / a > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ,< / span >
< / span > < span id = "L-278" > < a href = "#L-278" > < span class = "linenos" > 278< / span > < / a > < span class = "p" > )< / span >
< / span > < span id = "L-279" > < a href = "#L-279" > < span class = "linenos" > 279< / span > < / a >
< / span > < span id = "L-280" > < a href = "#L-280" > < span class = "linenos" > 280< / span > < / a > < span class = "k" > if< / span > < span class = "n" > index_offset< / span > < span class = "o" > !=< / span > < span class = "mi" > 1< / span > < span class = "p" > :< / span >
< / span > < span id = "L-281" > < a href = "#L-281" > < span class = "linenos" > 281< / span > < / a > < span class = "n" > size< / span > < span class = "o" > =< / span > < span class = "n" > size< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span >
< / span > < span id = "L-282" > < a href = "#L-282" > < span class = "linenos" > 282< / span > < / a >
< / span > < span id = "L-283" > < a href = "#L-283" > < span class = "linenos" > 283< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > where< / span > < span class = "p" > (< / span >
< / span > < span id = "L-284" > < a href = "#L-284" > < span class = "linenos" > 284< / span > < / a > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > series_alias< / span > < span class = "p" > ,< / span > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "n" > series_table_alias< / span > < span class = "p" > )< / span >
< / span > < span id = "L-285" > < a href = "#L-285" > < span class = "linenos" > 285< / span > < / a > < span class = "o" > .< / span > < span class = "n" > eq< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > pos_alias< / span > < span class = "p" > ,< / span > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "n" > unnest_source_alias< / span > < span class = "p" > ))< / span >
< / span > < span id = "L-286" > < a href = "#L-286" > < span class = "linenos" > 286< / span > < / a > < span class = "o" > .< / span > < span class = "n" > or_< / span > < span class = "p" > (< / span >
< / span > < span id = "L-287" > < a href = "#L-287" > < span class = "linenos" > 287< / span > < / a > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > series_alias< / span > < span class = "p" > ,< / span > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "n" > series_table_alias< / span > < span class = "p" > )< / span > < span class = "o" > > < / span > < span class = "n" > size< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > and_< / span > < span class = "p" > (< / span >
< / span > < span id = "L-288" > < a href = "#L-288" > < span class = "linenos" > 288< / span > < / a > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > pos_alias< / span > < span class = "p" > ,< / span > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "n" > unnest_source_alias< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > eq< / span > < span class = "p" > (< / span > < span class = "n" > size< / span > < span class = "p" > )< / span >
< / span > < span id = "L-289" > < a href = "#L-289" > < span class = "linenos" > 289< / span > < / a > < span class = "p" > )< / span >
< / span > < span id = "L-290" > < a href = "#L-290" > < span class = "linenos" > 290< / span > < / a > < span class = "p" > ),< / span >
< / span > < span id = "L-291" > < a href = "#L-291" > < span class = "linenos" > 291< / span > < / a > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ,< / span >
< / span > < span id = "L-292" > < a href = "#L-292" > < span class = "linenos" > 292< / span > < / a > < span class = "p" > )< / span >
2025-02-13 21:15:38 +01:00
< / span > < span id = "L-293" > < a href = "#L-293" > < span class = "linenos" > 293< / span > < / a >
2025-02-13 21:16:46 +01:00
< / span > < span id = "L-294" > < a href = "#L-294" > < span class = "linenos" > 294< / span > < / a > < span class = "k" > if< / span > < span class = "n" > arrays< / span > < span class = "p" > :< / span >
< / span > < span id = "L-295" > < a href = "#L-295" > < span class = "linenos" > 295< / span > < / a > < span class = "n" > end< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Condition< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Greatest< / span > < span class = "p" > (< / span > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > arrays< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ],< / span > < span class = "n" > expressions< / span > < span class = "o" > =< / span > < span class = "n" > arrays< / span > < span class = "p" > [< / span > < span class = "mi" > 1< / span > < span class = "p" > :])< / span >
< / span > < span id = "L-296" > < a href = "#L-296" > < span class = "linenos" > 296< / span > < / a >
< / span > < span id = "L-297" > < a href = "#L-297" > < span class = "linenos" > 297< / span > < / a > < span class = "k" > if< / span > < span class = "n" > index_offset< / span > < span class = "o" > !=< / span > < span class = "mi" > 1< / span > < span class = "p" > :< / span >
< / span > < span id = "L-298" > < a href = "#L-298" > < span class = "linenos" > 298< / span > < / a > < span class = "n" > end< / span > < span class = "o" > =< / span > < span class = "n" > end< / span > < span class = "o" > -< / span > < span class = "p" > (< / span > < span class = "mi" > 1< / span > < span class = "o" > -< / span > < span class = "n" > index_offset< / span > < span class = "p" > )< / span >
< / span > < span id = "L-299" > < a href = "#L-299" > < span class = "linenos" > 299< / span > < / a > < span class = "n" > series< / span > < span class = "o" > .< / span > < span class = "n" > expressions< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span > < span class = "s2" > " end" < / span > < span class = "p" > ,< / span > < span class = "n" > end< / span > < span class = "p" > )< / span >
2025-02-13 21:15:38 +01:00
< / span > < span id = "L-300" > < a href = "#L-300" > < span class = "linenos" > 300< / span > < / a >
2025-02-13 21:16:46 +01:00
< / span > < span id = "L-301" > < a href = "#L-301" > < span class = "linenos" > 301< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
< / span > < span id = "L-302" > < a href = "#L-302" > < span class = "linenos" > 302< / span > < / a >
< / span > < span id = "L-303" > < a href = "#L-303" > < span class = "linenos" > 303< / span > < / a > < span class = "k" > return< / span > < span class = "n" > _explode_to_unnest< / span >
< / span > < span id = "L-304" > < a href = "#L-304" > < span class = "linenos" > 304< / span > < / a >
< / span > < span id = "L-305" > < a href = "#L-305" > < span class = "linenos" > 305< / span > < / a >
< / span > < span id = "L-306" > < a href = "#L-306" > < span class = "linenos" > 306< / span > < / a > < span class = "n" > PERCENTILES< / span > < span class = "o" > =< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > PercentileCont< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > PercentileDisc< / span > < span class = "p" > )< / span >
< / span > < span id = "L-307" > < a href = "#L-307" > < span class = "linenos" > 307< / span > < / a >
< / span > < span id = "L-308" > < a href = "#L-308" > < span class = "linenos" > 308< / span > < / a >
< / span > < span id = "L-309" > < a href = "#L-309" > < span class = "linenos" > 309< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > add_within_group_for_percentiles< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "L-310" > < a href = "#L-310" > < span class = "linenos" > 310< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " Transforms percentiles by adding a WITHIN GROUP clause to them." " " < / span >
< / span > < span id = "L-311" > < a href = "#L-311" > < span class = "linenos" > 311< / span > < / a > < span class = "k" > if< / span > < span class = "p" > (< / span >
< / span > < span id = "L-312" > < a href = "#L-312" > < span class = "linenos" > 312< / span > < / a > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > PERCENTILES< / span > < span class = "p" > )< / span >
< / span > < span id = "L-313" > < a href = "#L-313" > < span class = "linenos" > 313< / span > < / a > < span class = "ow" > and< / span > < span class = "ow" > not< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > parent< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > WithinGroup< / span > < span class = "p" > )< / span >
< / span > < span id = "L-314" > < a href = "#L-314" > < span class = "linenos" > 314< / span > < / a > < span class = "ow" > and< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > expression< / span >
< / span > < span id = "L-315" > < a href = "#L-315" > < span class = "linenos" > 315< / span > < / a > < span class = "p" > ):< / span >
< / span > < span id = "L-316" > < a href = "#L-316" > < span class = "linenos" > 316< / span > < / a > < span class = "n" > column< / span > < span class = "o" > =< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > this< / span > < span class = "o" > .< / span > < span class = "n" > pop< / span > < span class = "p" > ()< / span >
< / span > < span id = "L-317" > < a href = "#L-317" > < span class = "linenos" > 317< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span > < span class = "s2" > " this" < / span > < span class = "p" > ,< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > pop< / span > < span class = "p" > ())< / span >
< / span > < span id = "L-318" > < a href = "#L-318" > < span class = "linenos" > 318< / span > < / a > < span class = "n" > order< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Order< / span > < span class = "p" > (< / span > < span class = "n" > expressions< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Ordered< / span > < span class = "p" > (< / span > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > column< / span > < span class = "p" > )])< / span >
< / span > < span id = "L-319" > < a href = "#L-319" > < span class = "linenos" > 319< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > WithinGroup< / span > < span class = "p" > (< / span > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > expression< / span > < span class = "o" > =< / span > < span class = "n" > order< / span > < span class = "p" > )< / span >
< / span > < span id = "L-320" > < a href = "#L-320" > < span class = "linenos" > 320< / span > < / a >
< / span > < span id = "L-321" > < a href = "#L-321" > < span class = "linenos" > 321< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
< / span > < span id = "L-322" > < a href = "#L-322" > < span class = "linenos" > 322< / span > < / a >
< / span > < span id = "L-323" > < a href = "#L-323" > < span class = "linenos" > 323< / span > < / a >
< / span > < span id = "L-324" > < a href = "#L-324" > < span class = "linenos" > 324< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > remove_within_group_for_percentiles< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "L-325" > < a href = "#L-325" > < span class = "linenos" > 325< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " Transforms percentiles by getting rid of their corresponding WITHIN GROUP clause." " " < / span >
< / span > < span id = "L-326" > < a href = "#L-326" > < span class = "linenos" > 326< / span > < / a > < span class = "k" > if< / span > < span class = "p" > (< / span >
< / span > < span id = "L-327" > < a href = "#L-327" > < span class = "linenos" > 327< / span > < / a > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > WithinGroup< / span > < span class = "p" > )< / span >
< / span > < span id = "L-328" > < a href = "#L-328" > < span class = "linenos" > 328< / span > < / a > < span class = "ow" > and< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > this< / span > < span class = "p" > ,< / span > < span class = "n" > PERCENTILES< / span > < span class = "p" > )< / span >
< / span > < span id = "L-329" > < a href = "#L-329" > < span class = "linenos" > 329< / span > < / a > < span class = "ow" > and< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Order< / span > < span class = "p" > )< / span >
< / span > < span id = "L-330" > < a href = "#L-330" > < span class = "linenos" > 330< / span > < / a > < span class = "p" > ):< / span >
< / span > < span id = "L-331" > < a href = "#L-331" > < span class = "linenos" > 331< / span > < / a > < span class = "n" > quantile< / span > < span class = "o" > =< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > this< / span > < span class = "o" > .< / span > < span class = "n" > this< / span >
< / span > < span id = "L-332" > < a href = "#L-332" > < span class = "linenos" > 332< / span > < / a > < span class = "n" > input_value< / span > < span class = "o" > =< / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > cast< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Ordered< / span > < span class = "p" > ,< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > find< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Ordered< / span > < span class = "p" > ))< / span > < span class = "o" > .< / span > < span class = "n" > this< / span >
< / span > < span id = "L-333" > < a href = "#L-333" > < span class = "linenos" > 333< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > replace< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > ApproxQuantile< / span > < span class = "p" > (< / span > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > input_value< / span > < span class = "p" > ,< / span > < span class = "n" > quantile< / span > < span class = "o" > =< / span > < span class = "n" > quantile< / span > < span class = "p" > ))< / span >
< / span > < span id = "L-334" > < a href = "#L-334" > < span class = "linenos" > 334< / span > < / a >
< / span > < span id = "L-335" > < a href = "#L-335" > < span class = "linenos" > 335< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
< / span > < span id = "L-336" > < a href = "#L-336" > < span class = "linenos" > 336< / span > < / a >
< / span > < span id = "L-337" > < a href = "#L-337" > < span class = "linenos" > 337< / span > < / a >
< / span > < span id = "L-338" > < a href = "#L-338" > < span class = "linenos" > 338< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > add_recursive_cte_column_names< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "L-339" > < a href = "#L-339" > < span class = "linenos" > 339< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " Uses projection output names in recursive CTE definitions to define the CTEs' columns." " " < / span >
< / span > < span id = "L-340" > < a href = "#L-340" > < span class = "linenos" > 340< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > With< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > recursive< / span > < span class = "p" > :< / span >
< / span > < span id = "L-341" > < a href = "#L-341" > < span class = "linenos" > 341< / span > < / a > < span class = "n" > next_name< / span > < span class = "o" > =< / span > < span class = "n" > name_sequence< / span > < span class = "p" > (< / span > < span class = "s2" > " _c_" < / span > < span class = "p" > )< / span >
< / span > < span id = "L-342" > < a href = "#L-342" > < span class = "linenos" > 342< / span > < / a >
< / span > < span id = "L-343" > < a href = "#L-343" > < span class = "linenos" > 343< / span > < / a > < span class = "k" > for< / span > < span class = "n" > cte< / span > < span class = "ow" > in< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > expressions< / span > < span class = "p" > :< / span >
< / span > < span id = "L-344" > < a href = "#L-344" > < span class = "linenos" > 344< / span > < / a > < span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > cte< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " alias" < / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > columns< / span > < span class = "p" > :< / span >
< / span > < span id = "L-345" > < a href = "#L-345" > < span class = "linenos" > 345< / span > < / a > < span class = "n" > query< / span > < span class = "o" > =< / span > < span class = "n" > cte< / span > < span class = "o" > .< / span > < span class = "n" > this< / span >
< / span > < span id = "L-346" > < a href = "#L-346" > < span class = "linenos" > 346< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > query< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Union< / span > < span class = "p" > ):< / span >
< / span > < span id = "L-347" > < a href = "#L-347" > < span class = "linenos" > 347< / span > < / a > < span class = "n" > query< / span > < span class = "o" > =< / span > < span class = "n" > query< / span > < span class = "o" > .< / span > < span class = "n" > this< / span >
2025-02-13 21:15:38 +01:00
< / span > < span id = "L-348" > < a href = "#L-348" > < span class = "linenos" > 348< / span > < / a >
2025-02-13 21:16:46 +01:00
< / span > < span id = "L-349" > < a href = "#L-349" > < span class = "linenos" > 349< / span > < / a > < span class = "n" > cte< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " alias" < / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span >
< / span > < span id = "L-350" > < a href = "#L-350" > < span class = "linenos" > 350< / span > < / a > < span class = "s2" > " columns" < / span > < span class = "p" > ,< / span >
< / span > < span id = "L-351" > < a href = "#L-351" > < span class = "linenos" > 351< / span > < / a > < span class = "p" > [< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > to_identifier< / span > < span class = "p" > (< / span > < span class = "n" > s< / span > < span class = "o" > .< / span > < span class = "n" > alias_or_name< / span > < span class = "ow" > or< / span > < span class = "n" > next_name< / span > < span class = "p" > ())< / span > < span class = "k" > for< / span > < span class = "n" > s< / span > < span class = "ow" > in< / span > < span class = "n" > query< / span > < span class = "o" > .< / span > < span class = "n" > selects< / span > < span class = "p" > ],< / span >
< / span > < span id = "L-352" > < a href = "#L-352" > < span class = "linenos" > 352< / span > < / a > < span class = "p" > )< / span >
< / span > < span id = "L-353" > < a href = "#L-353" > < span class = "linenos" > 353< / span > < / a >
< / span > < span id = "L-354" > < a href = "#L-354" > < span class = "linenos" > 354< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
< / span > < span id = "L-355" > < a href = "#L-355" > < span class = "linenos" > 355< / span > < / a >
< / span > < span id = "L-356" > < a href = "#L-356" > < span class = "linenos" > 356< / span > < / a >
< / span > < span id = "L-357" > < a href = "#L-357" > < span class = "linenos" > 357< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > epoch_cast_to_ts< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "L-358" > < a href = "#L-358" > < span class = "linenos" > 358< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " Replace ' epoch' in casts by the equivalent date literal." " " < / span >
< / span > < span id = "L-359" > < a href = "#L-359" > < span class = "linenos" > 359< / span > < / a > < span class = "k" > if< / span > < span class = "p" > (< / span >
< / span > < span id = "L-360" > < a href = "#L-360" > < span class = "linenos" > 360< / span > < / a > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Cast< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > TryCast< / span > < span class = "p" > ))< / span >
< / span > < span id = "L-361" > < a href = "#L-361" > < span class = "linenos" > 361< / span > < / a > < span class = "ow" > and< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "o" > .< / span > < span class = "n" > lower< / span > < span class = "p" > ()< / span > < span class = "o" > ==< / span > < span class = "s2" > " epoch" < / span >
< / span > < span id = "L-362" > < a href = "#L-362" > < span class = "linenos" > 362< / span > < / a > < span class = "ow" > and< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > to< / span > < span class = "o" > .< / span > < span class = "n" > this< / span > < span class = "ow" > in< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > DataType< / span > < span class = "o" > .< / span > < span class = "n" > TEMPORAL_TYPES< / span >
< / span > < span id = "L-363" > < a href = "#L-363" > < span class = "linenos" > 363< / span > < / a > < span class = "p" > ):< / span >
< / span > < span id = "L-364" > < a href = "#L-364" > < span class = "linenos" > 364< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > this< / span > < span class = "o" > .< / span > < span class = "n" > replace< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Literal< / span > < span class = "o" > .< / span > < span class = "n" > string< / span > < span class = "p" > (< / span > < span class = "s2" > " 1970-01-01 00:00:00" < / span > < span class = "p" > ))< / span >
< / span > < span id = "L-365" > < a href = "#L-365" > < span class = "linenos" > 365< / span > < / a >
< / span > < span id = "L-366" > < a href = "#L-366" > < span class = "linenos" > 366< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
< / span > < span id = "L-367" > < a href = "#L-367" > < span class = "linenos" > 367< / span > < / a >
< / span > < span id = "L-368" > < a href = "#L-368" > < span class = "linenos" > 368< / span > < / a >
< / span > < span id = "L-369" > < a href = "#L-369" > < span class = "linenos" > 369< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > eliminate_semi_and_anti_joins< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "L-370" > < a href = "#L-370" > < span class = "linenos" > 370< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " Convert SEMI and ANTI joins into equivalent forms that use EXIST instead." " " < / span >
< / span > < span id = "L-371" > < a href = "#L-371" > < span class = "linenos" > 371< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Select< / span > < span class = "p" > ):< / span >
< / span > < span id = "L-372" > < a href = "#L-372" > < span class = "linenos" > 372< / span > < / a > < span class = "k" > for< / span > < span class = "n" > join< / span > < span class = "ow" > in< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " joins" < / span > < span class = "p" > )< / span > < span class = "ow" > or< / span > < span class = "p" > []:< / span >
< / span > < span id = "L-373" > < a href = "#L-373" > < span class = "linenos" > 373< / span > < / a > < span class = "n" > on< / span > < span class = "o" > =< / span > < span class = "n" > join< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " on" < / span > < span class = "p" > )< / span >
< / span > < span id = "L-374" > < a href = "#L-374" > < span class = "linenos" > 374< / span > < / a > < span class = "k" > if< / span > < span class = "n" > on< / span > < span class = "ow" > and< / span > < span class = "n" > join< / span > < span class = "o" > .< / span > < span class = "n" > kind< / span > < span class = "ow" > in< / span > < span class = "p" > (< / span > < span class = "s2" > " SEMI" < / span > < span class = "p" > ,< / span > < span class = "s2" > " ANTI" < / span > < span class = "p" > ):< / span >
< / span > < span id = "L-375" > < a href = "#L-375" > < span class = "linenos" > 375< / span > < / a > < span class = "n" > subquery< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > select< / span > < span class = "p" > (< / span > < span class = "s2" > " 1" < / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > from_< / span > < span class = "p" > (< / span > < span class = "n" > join< / span > < span class = "o" > .< / span > < span class = "n" > this< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > where< / span > < span class = "p" > (< / span > < span class = "n" > on< / span > < span class = "p" > )< / span >
< / span > < span id = "L-376" > < a href = "#L-376" > < span class = "linenos" > 376< / span > < / a > < span class = "n" > exists< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Exists< / span > < span class = "p" > (< / span > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > subquery< / span > < span class = "p" > )< / span >
< / span > < span id = "L-377" > < a href = "#L-377" > < span class = "linenos" > 377< / span > < / a > < span class = "k" > if< / span > < span class = "n" > join< / span > < span class = "o" > .< / span > < span class = "n" > kind< / span > < span class = "o" > ==< / span > < span class = "s2" > " ANTI" < / span > < span class = "p" > :< / span >
< / span > < span id = "L-378" > < a href = "#L-378" > < span class = "linenos" > 378< / span > < / a > < span class = "n" > exists< / span > < span class = "o" > =< / span > < span class = "n" > exists< / span > < span class = "o" > .< / span > < span class = "n" > not_< / span > < span class = "p" > (< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< / span > < span id = "L-379" > < a href = "#L-379" > < span class = "linenos" > 379< / span > < / a >
< / span > < span id = "L-380" > < a href = "#L-380" > < span class = "linenos" > 380< / span > < / a > < span class = "n" > join< / span > < span class = "o" > .< / span > < span class = "n" > pop< / span > < span class = "p" > ()< / span >
< / span > < span id = "L-381" > < a href = "#L-381" > < span class = "linenos" > 381< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > where< / span > < span class = "p" > (< / span > < span class = "n" > exists< / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< / span > < span id = "L-382" > < a href = "#L-382" > < span class = "linenos" > 382< / span > < / a >
< / span > < span id = "L-383" > < a href = "#L-383" > < span class = "linenos" > 383< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
< / span > < span id = "L-384" > < a href = "#L-384" > < span class = "linenos" > 384< / span > < / a >
< / span > < span id = "L-385" > < a href = "#L-385" > < span class = "linenos" > 385< / span > < / a >
< / span > < span id = "L-386" > < a href = "#L-386" > < span class = "linenos" > 386< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > eliminate_full_outer_join< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "L-387" > < a href = "#L-387" > < span class = "linenos" > 387< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " < / span >
< / span > < span id = "L-388" > < a href = "#L-388" > < span class = "linenos" > 388< / span > < / a > < span class = "sd" > Converts a query with a FULL OUTER join to a union of identical queries that< / span >
< / span > < span id = "L-389" > < a href = "#L-389" > < span class = "linenos" > 389< / span > < / a > < span class = "sd" > use LEFT/RIGHT OUTER joins instead. This transformation currently only works< / span >
< / span > < span id = "L-390" > < a href = "#L-390" > < span class = "linenos" > 390< / span > < / a > < span class = "sd" > for queries that have a single FULL OUTER join.< / span >
< / span > < span id = "L-391" > < a href = "#L-391" > < span class = "linenos" > 391< / span > < / a > < span class = "sd" > " " " < / span >
< / span > < span id = "L-392" > < a href = "#L-392" > < span class = "linenos" > 392< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Select< / span > < span class = "p" > ):< / span >
< / span > < span id = "L-393" > < a href = "#L-393" > < span class = "linenos" > 393< / span > < / a > < span class = "n" > full_outer_joins< / span > < span class = "o" > =< / span > < span class = "p" > [< / span >
< / span > < span id = "L-394" > < a href = "#L-394" > < span class = "linenos" > 394< / span > < / a > < span class = "p" > (< / span > < span class = "n" > index< / span > < span class = "p" > ,< / span > < span class = "n" > join< / span > < span class = "p" > )< / span >
< / span > < span id = "L-395" > < a href = "#L-395" > < span class = "linenos" > 395< / span > < / a > < span class = "k" > for< / span > < span class = "n" > index< / span > < span class = "p" > ,< / span > < span class = "n" > join< / span > < span class = "ow" > in< / span > < span class = "nb" > enumerate< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " joins" < / span > < span class = "p" > )< / span > < span class = "ow" > or< / span > < span class = "p" > [])< / span >
< / span > < span id = "L-396" > < a href = "#L-396" > < span class = "linenos" > 396< / span > < / a > < span class = "k" > if< / span > < span class = "n" > join< / span > < span class = "o" > .< / span > < span class = "n" > side< / span > < span class = "o" > ==< / span > < span class = "s2" > " FULL" < / span >
< / span > < span id = "L-397" > < a href = "#L-397" > < span class = "linenos" > 397< / span > < / a > < span class = "p" > ]< / span >
< / span > < span id = "L-398" > < a href = "#L-398" > < span class = "linenos" > 398< / span > < / a >
< / span > < span id = "L-399" > < a href = "#L-399" > < span class = "linenos" > 399< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > full_outer_joins< / span > < span class = "p" > )< / span > < span class = "o" > ==< / span > < span class = "mi" > 1< / span > < span class = "p" > :< / span >
< / span > < span id = "L-400" > < a href = "#L-400" > < span class = "linenos" > 400< / span > < / a > < span class = "n" > expression_copy< / span > < span class = "o" > =< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > copy< / span > < span class = "p" > ()< / span >
< / span > < span id = "L-401" > < a href = "#L-401" > < span class = "linenos" > 401< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span > < span class = "s2" > " limit" < / span > < span class = "p" > ,< / span > < span class = "kc" > None< / span > < span class = "p" > )< / span >
< / span > < span id = "L-402" > < a href = "#L-402" > < span class = "linenos" > 402< / span > < / a > < span class = "n" > index< / span > < span class = "p" > ,< / span > < span class = "n" > full_outer_join< / span > < span class = "o" > =< / span > < span class = "n" > full_outer_joins< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span >
< / span > < span id = "L-403" > < a href = "#L-403" > < span class = "linenos" > 403< / span > < / a > < span class = "n" > full_outer_join< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span > < span class = "s2" > " side" < / span > < span class = "p" > ,< / span > < span class = "s2" > " left" < / span > < span class = "p" > )< / span >
< / span > < span id = "L-404" > < a href = "#L-404" > < span class = "linenos" > 404< / span > < / a > < span class = "n" > expression_copy< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " joins" < / span > < span class = "p" > ][< / span > < span class = "n" > index< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span > < span class = "s2" > " side" < / span > < span class = "p" > ,< / span > < span class = "s2" > " right" < / span > < span class = "p" > )< / span >
< / span > < span id = "L-405" > < a href = "#L-405" > < span class = "linenos" > 405< / span > < / a > < span class = "n" > expression_copy< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > pop< / span > < span class = "p" > (< / span > < span class = "s2" > " with" < / span > < span class = "p" > ,< / span > < span class = "kc" > None< / span > < span class = "p" > )< / span > < span class = "c1" > # remove CTEs from RIGHT side< / span >
< / span > < span id = "L-406" > < a href = "#L-406" > < span class = "linenos" > 406< / span > < / a >
< / span > < span id = "L-407" > < a href = "#L-407" > < span class = "linenos" > 407< / span > < / a > < span class = "k" > return< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > union< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > expression_copy< / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< / span > < span id = "L-408" > < a href = "#L-408" > < span class = "linenos" > 408< / span > < / a >
< / span > < span id = "L-409" > < a href = "#L-409" > < span class = "linenos" > 409< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
< / span > < span id = "L-410" > < a href = "#L-410" > < span class = "linenos" > 410< / span > < / a >
< / span > < span id = "L-411" > < a href = "#L-411" > < span class = "linenos" > 411< / span > < / a >
< / span > < span id = "L-412" > < a href = "#L-412" > < span class = "linenos" > 412< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > move_ctes_to_top_level< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "L-413" > < a href = "#L-413" > < span class = "linenos" > 413< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " < / span >
< / span > < span id = "L-414" > < a href = "#L-414" > < span class = "linenos" > 414< / span > < / a > < span class = "sd" > Some dialects (e.g. Hive, T-SQL, Spark prior to version 3) only allow CTEs to be< / span >
< / span > < span id = "L-415" > < a href = "#L-415" > < span class = "linenos" > 415< / span > < / a > < span class = "sd" > defined at the top-level, so for example queries like:< / span >
< / span > < span id = "L-416" > < a href = "#L-416" > < span class = "linenos" > 416< / span > < / a >
< / span > < span id = "L-417" > < a href = "#L-417" > < span class = "linenos" > 417< / span > < / a > < span class = "sd" > SELECT * FROM (WITH t(c) AS (SELECT 1) SELECT * FROM t) AS subq< / span >
< / span > < span id = "L-418" > < a href = "#L-418" > < span class = "linenos" > 418< / span > < / a >
< / span > < span id = "L-419" > < a href = "#L-419" > < span class = "linenos" > 419< / span > < / a > < span class = "sd" > are invalid in those dialects. This transformation can be used to ensure all CTEs are< / span >
< / span > < span id = "L-420" > < a href = "#L-420" > < span class = "linenos" > 420< / span > < / a > < span class = "sd" > moved to the top level so that the final SQL code is valid from a syntax standpoint.< / span >
< / span > < span id = "L-421" > < a href = "#L-421" > < span class = "linenos" > 421< / span > < / a >
< / span > < span id = "L-422" > < a href = "#L-422" > < span class = "linenos" > 422< / span > < / a > < span class = "sd" > TODO: handle name clashes whilst moving CTEs (it can get quite tricky & costly).< / span >
< / span > < span id = "L-423" > < a href = "#L-423" > < span class = "linenos" > 423< / span > < / a > < span class = "sd" > " " " < / span >
< / span > < span id = "L-424" > < a href = "#L-424" > < span class = "linenos" > 424< / span > < / a > < span class = "n" > top_level_with< / span > < span class = "o" > =< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " with" < / span > < span class = "p" > )< / span >
< / span > < span id = "L-425" > < a href = "#L-425" > < span class = "linenos" > 425< / span > < / a > < span class = "k" > for< / span > < span class = "n" > node< / span > < span class = "ow" > in< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > find_all< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > With< / span > < span class = "p" > ):< / span >
< / span > < span id = "L-426" > < a href = "#L-426" > < span class = "linenos" > 426< / span > < / a > < span class = "k" > if< / span > < span class = "n" > node< / span > < span class = "o" > .< / span > < span class = "n" > parent< / span > < span class = "ow" > is< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span >
< / span > < span id = "L-427" > < a href = "#L-427" > < span class = "linenos" > 427< / span > < / a > < span class = "k" > continue< / span >
< / span > < span id = "L-428" > < a href = "#L-428" > < span class = "linenos" > 428< / span > < / a >
< / span > < span id = "L-429" > < a href = "#L-429" > < span class = "linenos" > 429< / span > < / a > < span class = "n" > inner_with< / span > < span class = "o" > =< / span > < span class = "n" > node< / span > < span class = "o" > .< / span > < span class = "n" > pop< / span > < span class = "p" > ()< / span >
< / span > < span id = "L-430" > < a href = "#L-430" > < span class = "linenos" > 430< / span > < / a > < span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > top_level_with< / span > < span class = "p" > :< / span >
< / span > < span id = "L-431" > < a href = "#L-431" > < span class = "linenos" > 431< / span > < / a > < span class = "n" > top_level_with< / span > < span class = "o" > =< / span > < span class = "n" > inner_with< / span >
< / span > < span id = "L-432" > < a href = "#L-432" > < span class = "linenos" > 432< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span > < span class = "s2" > " with" < / span > < span class = "p" > ,< / span > < span class = "n" > top_level_with< / span > < span class = "p" > )< / span >
< / span > < span id = "L-433" > < a href = "#L-433" > < span class = "linenos" > 433< / span > < / a > < span class = "k" > else< / span > < span class = "p" > :< / span >
< / span > < span id = "L-434" > < a href = "#L-434" > < span class = "linenos" > 434< / span > < / a > < span class = "k" > if< / span > < span class = "n" > inner_with< / span > < span class = "o" > .< / span > < span class = "n" > recursive< / span > < span class = "p" > :< / span >
< / span > < span id = "L-435" > < a href = "#L-435" > < span class = "linenos" > 435< / span > < / a > < span class = "n" > top_level_with< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span > < span class = "s2" > " recursive" < / span > < span class = "p" > ,< / span > < span class = "kc" > True< / span > < span class = "p" > )< / span >
< / span > < span id = "L-436" > < a href = "#L-436" > < span class = "linenos" > 436< / span > < / a >
< / span > < span id = "L-437" > < a href = "#L-437" > < span class = "linenos" > 437< / span > < / a > < span class = "n" > top_level_with< / span > < span class = "o" > .< / span > < span class = "n" > expressions< / span > < span class = "o" > .< / span > < span class = "n" > extend< / span > < span class = "p" > (< / span > < span class = "n" > inner_with< / span > < span class = "o" > .< / span > < span class = "n" > expressions< / span > < span class = "p" > )< / span >
< / span > < span id = "L-438" > < a href = "#L-438" > < span class = "linenos" > 438< / span > < / a >
< / span > < span id = "L-439" > < a href = "#L-439" > < span class = "linenos" > 439< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
2025-02-13 21:15:38 +01:00
< / span > < span id = "L-440" > < a href = "#L-440" > < span class = "linenos" > 440< / span > < / a >
2025-02-13 21:16:46 +01:00
< / span > < span id = "L-441" > < a href = "#L-441" > < span class = "linenos" > 441< / span > < / a >
< / span > < span id = "L-442" > < a href = "#L-442" > < span class = "linenos" > 442< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > ensure_bools< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "L-443" > < a href = "#L-443" > < span class = "linenos" > 443< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " Converts numeric values used in conditions into explicit boolean expressions." " " < / span >
< / span > < span id = "L-444" > < a href = "#L-444" > < span class = "linenos" > 444< / span > < / a > < span class = "kn" > from< / span > < span class = "nn" > sqlglot.optimizer.canonicalize< / span > < span class = "kn" > import< / span > < span class = "n" > ensure_bools< / span >
< / span > < span id = "L-445" > < a href = "#L-445" > < span class = "linenos" > 445< / span > < / a >
< / span > < span id = "L-446" > < a href = "#L-446" > < span class = "linenos" > 446< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > _ensure_bool< / span > < span class = "p" > (< / span > < span class = "n" > node< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< / span > < span id = "L-447" > < a href = "#L-447" > < span class = "linenos" > 447< / span > < / a > < span class = "k" > if< / span > < span class = "p" > (< / span >
< / span > < span id = "L-448" > < a href = "#L-448" > < span class = "linenos" > 448< / span > < / a > < span class = "n" > node< / span > < span class = "o" > .< / span > < span class = "n" > is_number< / span >
< / span > < span id = "L-449" > < a href = "#L-449" > < span class = "linenos" > 449< / span > < / a > < span class = "ow" > or< / span > < span class = "n" > node< / span > < span class = "o" > .< / span > < span class = "n" > is_type< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > DataType< / span > < span class = "o" > .< / span > < span class = "n" > Type< / span > < span class = "o" > .< / span > < span class = "n" > UNKNOWN< / span > < span class = "p" > ,< / span > < span class = "o" > *< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > DataType< / span > < span class = "o" > .< / span > < span class = "n" > NUMERIC_TYPES< / span > < span class = "p" > )< / span >
< / span > < span id = "L-450" > < a href = "#L-450" > < span class = "linenos" > 450< / span > < / a > < span class = "ow" > or< / span > < span class = "p" > (< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > node< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Column< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span > < span class = "ow" > not< / span > < span class = "n" > node< / span > < span class = "o" > .< / span > < span class = "n" > type< / span > < span class = "p" > )< / span >
< / span > < span id = "L-451" > < a href = "#L-451" > < span class = "linenos" > 451< / span > < / a > < span class = "p" > ):< / span >
< / span > < span id = "L-452" > < a href = "#L-452" > < span class = "linenos" > 452< / span > < / a > < span class = "n" > node< / span > < span class = "o" > .< / span > < span class = "n" > replace< / span > < span class = "p" > (< / span > < span class = "n" > node< / span > < span class = "o" > .< / span > < span class = "n" > neq< / span > < span class = "p" > (< / span > < span class = "mi" > 0< / span > < span class = "p" > ))< / span >
< / span > < span id = "L-453" > < a href = "#L-453" > < span class = "linenos" > 453< / span > < / a >
< / span > < span id = "L-454" > < a href = "#L-454" > < span class = "linenos" > 454< / span > < / a > < span class = "k" > for< / span > < span class = "n" > node< / span > < span class = "p" > ,< / span > < span class = "o" > *< / span > < span class = "n" > _< / span > < span class = "ow" > in< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > walk< / span > < span class = "p" > ():< / span >
< / span > < span id = "L-455" > < a href = "#L-455" > < span class = "linenos" > 455< / span > < / a > < span class = "n" > ensure_bools< / span > < span class = "p" > (< / span > < span class = "n" > node< / span > < span class = "p" > ,< / span > < span class = "n" > _ensure_bool< / span > < span class = "p" > )< / span >
< / span > < span id = "L-456" > < a href = "#L-456" > < span class = "linenos" > 456< / span > < / a >
< / span > < span id = "L-457" > < a href = "#L-457" > < span class = "linenos" > 457< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
2025-02-13 21:15:38 +01:00
< / span > < span id = "L-458" > < a href = "#L-458" > < span class = "linenos" > 458< / span > < / a >
2025-02-13 21:16:46 +01:00
< / span > < span id = "L-459" > < a href = "#L-459" > < span class = "linenos" > 459< / span > < / a >
< / span > < span id = "L-460" > < a href = "#L-460" > < span class = "linenos" > 460< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > unqualify_columns< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "L-461" > < a href = "#L-461" > < span class = "linenos" > 461< / span > < / a > < span class = "k" > for< / span > < span class = "n" > column< / span > < span class = "ow" > in< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > find_all< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Column< / span > < span class = "p" > ):< / span >
< / span > < span id = "L-462" > < a href = "#L-462" > < span class = "linenos" > 462< / span > < / a > < span class = "c1" > # We only wanna pop off the table, db, catalog args< / span >
< / span > < span id = "L-463" > < a href = "#L-463" > < span class = "linenos" > 463< / span > < / a > < span class = "k" > for< / span > < span class = "n" > part< / span > < span class = "ow" > in< / span > < span class = "n" > column< / span > < span class = "o" > .< / span > < span class = "n" > parts< / span > < span class = "p" > [:< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ]:< / span >
< / span > < span id = "L-464" > < a href = "#L-464" > < span class = "linenos" > 464< / span > < / a > < span class = "n" > part< / span > < span class = "o" > .< / span > < span class = "n" > pop< / span > < span class = "p" > ()< / span >
< / span > < span id = "L-465" > < a href = "#L-465" > < span class = "linenos" > 465< / span > < / a >
< / span > < span id = "L-466" > < a href = "#L-466" > < span class = "linenos" > 466< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
< / span > < span id = "L-467" > < a href = "#L-467" > < span class = "linenos" > 467< / span > < / a >
< / span > < span id = "L-468" > < a href = "#L-468" > < span class = "linenos" > 468< / span > < / a >
< / span > < span id = "L-469" > < a href = "#L-469" > < span class = "linenos" > 469< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > preprocess< / span > < span class = "p" > (< / span >
< / span > < span id = "L-470" > < a href = "#L-470" > < span class = "linenos" > 470< / span > < / a > < span class = "n" > transforms< / span > < span class = "p" > :< / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > List< / span > < span class = "p" > [< / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > Callable< / span > < span class = "p" > [[< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > ],< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > ]],< / span >
< / span > < span id = "L-471" > < a href = "#L-471" > < span class = "linenos" > 471< / span > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > Callable< / span > < span class = "p" > [[< / span > < span class = "n" > Generator< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > ],< / span > < span class = "nb" > str< / span > < span class = "p" > ]:< / span >
< / span > < span id = "L-472" > < a href = "#L-472" > < span class = "linenos" > 472< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " < / span >
< / span > < span id = "L-473" > < a href = "#L-473" > < span class = "linenos" > 473< / span > < / a > < span class = "sd" > Creates a new transform by chaining a sequence of transformations and converts the resulting< / span >
< / span > < span id = "L-474" > < a href = "#L-474" > < span class = "linenos" > 474< / span > < / a > < span class = "sd" > expression to SQL, using either the " _sql" method corresponding to the resulting expression,< / span >
< / span > < span id = "L-475" > < a href = "#L-475" > < span class = "linenos" > 475< / span > < / a > < span class = "sd" > or the appropriate `Generator.TRANSFORMS` function (when applicable -- see below).< / span >
< / span > < span id = "L-476" > < a href = "#L-476" > < span class = "linenos" > 476< / span > < / a >
< / span > < span id = "L-477" > < a href = "#L-477" > < span class = "linenos" > 477< / span > < / a > < span class = "sd" > Args:< / span >
< / span > < span id = "L-478" > < a href = "#L-478" > < span class = "linenos" > 478< / span > < / a > < span class = "sd" > transforms: sequence of transform functions. These will be called in order.< / span >
< / span > < span id = "L-479" > < a href = "#L-479" > < span class = "linenos" > 479< / span > < / a >
< / span > < span id = "L-480" > < a href = "#L-480" > < span class = "linenos" > 480< / span > < / a > < span class = "sd" > Returns:< / span >
< / span > < span id = "L-481" > < a href = "#L-481" > < span class = "linenos" > 481< / span > < / a > < span class = "sd" > Function that can be used as a generator transform.< / span >
< / span > < span id = "L-482" > < a href = "#L-482" > < span class = "linenos" > 482< / span > < / a > < span class = "sd" > " " " < / span >
< / span > < span id = "L-483" > < a href = "#L-483" > < span class = "linenos" > 483< / span > < / a >
< / span > < span id = "L-484" > < a href = "#L-484" > < span class = "linenos" > 484< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > _to_sql< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "nb" > str< / span > < span class = "p" > :< / span >
< / span > < span id = "L-485" > < a href = "#L-485" > < span class = "linenos" > 485< / span > < / a > < span class = "n" > expression_type< / span > < span class = "o" > =< / span > < span class = "nb" > type< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > )< / span >
< / span > < span id = "L-486" > < a href = "#L-486" > < span class = "linenos" > 486< / span > < / a >
< / span > < span id = "L-487" > < a href = "#L-487" > < span class = "linenos" > 487< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > =< / span > < span class = "n" > transforms< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ](< / span > < span class = "n" > expression< / span > < span class = "p" > )< / span >
< / span > < span id = "L-488" > < a href = "#L-488" > < span class = "linenos" > 488< / span > < / a > < span class = "k" > for< / span > < span class = "n" > t< / span > < span class = "ow" > in< / span > < span class = "n" > transforms< / span > < span class = "p" > [< / span > < span class = "mi" > 1< / span > < span class = "p" > :]:< / span >
< / span > < span id = "L-489" > < a href = "#L-489" > < span class = "linenos" > 489< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > =< / span > < span class = "n" > t< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > )< / span >
< / span > < span id = "L-490" > < a href = "#L-490" > < span class = "linenos" > 490< / span > < / a >
< / span > < span id = "L-491" > < a href = "#L-491" > < span class = "linenos" > 491< / span > < / a > < span class = "n" > _sql_handler< / span > < span class = "o" > =< / span > < span class = "nb" > getattr< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > key< / span > < span class = "o" > +< / span > < span class = "s2" > " _sql" < / span > < span class = "p" > ,< / span > < span class = "kc" > None< / span > < span class = "p" > )< / span >
< / span > < span id = "L-492" > < a href = "#L-492" > < span class = "linenos" > 492< / span > < / a > < span class = "k" > if< / span > < span class = "n" > _sql_handler< / span > < span class = "p" > :< / span >
< / span > < span id = "L-493" > < a href = "#L-493" > < span class = "linenos" > 493< / span > < / a > < span class = "k" > return< / span > < span class = "n" > _sql_handler< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > )< / span >
< / span > < span id = "L-494" > < a href = "#L-494" > < span class = "linenos" > 494< / span > < / a >
< / span > < span id = "L-495" > < a href = "#L-495" > < span class = "linenos" > 495< / span > < / a > < span class = "n" > transforms_handler< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > TRANSFORMS< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "nb" > type< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ))< / span >
< / span > < span id = "L-496" > < a href = "#L-496" > < span class = "linenos" > 496< / span > < / a > < span class = "k" > if< / span > < span class = "n" > transforms_handler< / span > < span class = "p" > :< / span >
< / span > < span id = "L-497" > < a href = "#L-497" > < span class = "linenos" > 497< / span > < / a > < span class = "k" > if< / span > < span class = "n" > expression_type< / span > < span class = "ow" > is< / span > < span class = "nb" > type< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ):< / span >
< / span > < span id = "L-498" > < a href = "#L-498" > < span class = "linenos" > 498< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Func< / span > < span class = "p" > ):< / span >
< / span > < span id = "L-499" > < a href = "#L-499" > < span class = "linenos" > 499< / span > < / a > < span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > function_fallback_sql< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > )< / span >
< / span > < span id = "L-500" > < a href = "#L-500" > < span class = "linenos" > 500< / span > < / a >
< / span > < span id = "L-501" > < a href = "#L-501" > < span class = "linenos" > 501< / span > < / a > < span class = "c1" > # Ensures we don' t enter an infinite loop. This can happen when the original expression< / span >
< / span > < span id = "L-502" > < a href = "#L-502" > < span class = "linenos" > 502< / span > < / a > < span class = "c1" > # has the same type as the final expression and there' s no _sql method available for it,< / span >
< / span > < span id = "L-503" > < a href = "#L-503" > < span class = "linenos" > 503< / span > < / a > < span class = "c1" > # because then it' d re-enter _to_sql.< / span >
< / span > < span id = "L-504" > < a href = "#L-504" > < span class = "linenos" > 504< / span > < / a > < span class = "k" > raise< / span > < span class = "ne" > ValueError< / span > < span class = "p" > (< / span >
< / span > < span id = "L-505" > < a href = "#L-505" > < span class = "linenos" > 505< / span > < / a > < span class = "sa" > f< / span > < span class = "s2" > " Expression type < / span > < span class = "si" > {< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "vm" > __class__< / span > < span class = "o" > .< / span > < span class = "vm" > __name__< / span > < span class = "si" > }< / span > < span class = "s2" > requires a _sql method in order to be transformed." < / span >
< / span > < span id = "L-506" > < a href = "#L-506" > < span class = "linenos" > 506< / span > < / a > < span class = "p" > )< / span >
< / span > < span id = "L-507" > < a href = "#L-507" > < span class = "linenos" > 507< / span > < / a >
< / span > < span id = "L-508" > < a href = "#L-508" > < span class = "linenos" > 508< / span > < / a > < span class = "k" > return< / span > < span class = "n" > transforms_handler< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > expression< / span > < span class = "p" > )< / span >
< / span > < span id = "L-509" > < a href = "#L-509" > < span class = "linenos" > 509< / span > < / a >
< / span > < span id = "L-510" > < a href = "#L-510" > < span class = "linenos" > 510< / span > < / a > < span class = "k" > raise< / span > < span class = "ne" > ValueError< / span > < span class = "p" > (< / span > < span class = "sa" > f< / span > < span class = "s2" > " Unsupported expression type < / span > < span class = "si" > {< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "vm" > __class__< / span > < span class = "o" > .< / span > < span class = "vm" > __name__< / span > < span class = "si" > }< / span > < span class = "s2" > ." < / span > < span class = "p" > )< / span >
< / span > < span id = "L-511" > < a href = "#L-511" > < span class = "linenos" > 511< / span > < / a >
< / span > < span id = "L-512" > < a href = "#L-512" > < span class = "linenos" > 512< / span > < / a > < span class = "k" > return< / span > < span class = "n" > _to_sql< / span >
2025-02-13 15:22:50 +01:00
< / span > < / pre > < / div >
< / section >
< section id = "unalias_group" >
< input id = "unalias_group-view-source" class = "view-source-toggle-state" type = "checkbox" aria-hidden = "true" tabindex = "-1" >
< div class = "attr function" >
< span class = "def" > def< / span >
< span class = "name" > unalias_group< / span > < span class = "signature pdoc-code multiline" > (< span class = "param" > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > < / span > < span class = "return-annotation" > ) -> < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > :< / span > < / span >
< label class = "view-source-button" for = "unalias_group-view-source" > < span > View Source< / span > < / label >
< / div >
< a class = "headerlink" href = "#unalias_group" > < / a >
2025-02-13 15:58:03 +01:00
< div class = "pdoc-code codehilite" > < pre > < span > < / span > < span id = "unalias_group-13" > < a href = "#unalias_group-13" > < span class = "linenos" > 13< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > unalias_group< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "unalias_group-14" > < a href = "#unalias_group-14" > < span class = "linenos" > 14< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " < / span >
< / span > < span id = "unalias_group-15" > < a href = "#unalias_group-15" > < span class = "linenos" > 15< / span > < / a > < span class = "sd" > Replace references to select aliases in GROUP BY clauses.< / span >
< / span > < span id = "unalias_group-16" > < a href = "#unalias_group-16" > < span class = "linenos" > 16< / span > < / a >
< / span > < span id = "unalias_group-17" > < a href = "#unalias_group-17" > < span class = "linenos" > 17< / span > < / a > < span class = "sd" > Example:< / span >
< / span > < span id = "unalias_group-18" > < a href = "#unalias_group-18" > < span class = "linenos" > 18< / span > < / a > < span class = "sd" > > > > import sqlglot< / span >
< / span > < span id = "unalias_group-19" > < a href = "#unalias_group-19" > < span class = "linenos" > 19< / span > < / a > < span class = "sd" > > > > sqlglot.parse_one(" SELECT a AS b FROM x GROUP BY b" ).transform(unalias_group).sql()< / span >
< / span > < span id = "unalias_group-20" > < a href = "#unalias_group-20" > < span class = "linenos" > 20< / span > < / a > < span class = "sd" > ' SELECT a AS b FROM x GROUP BY 1' < / span >
< / span > < span id = "unalias_group-21" > < a href = "#unalias_group-21" > < span class = "linenos" > 21< / span > < / a >
< / span > < span id = "unalias_group-22" > < a href = "#unalias_group-22" > < span class = "linenos" > 22< / span > < / a > < span class = "sd" > Args:< / span >
< / span > < span id = "unalias_group-23" > < a href = "#unalias_group-23" > < span class = "linenos" > 23< / span > < / a > < span class = "sd" > expression: the expression that will be transformed.< / span >
< / span > < span id = "unalias_group-24" > < a href = "#unalias_group-24" > < span class = "linenos" > 24< / span > < / a >
< / span > < span id = "unalias_group-25" > < a href = "#unalias_group-25" > < span class = "linenos" > 25< / span > < / a > < span class = "sd" > Returns:< / span >
< / span > < span id = "unalias_group-26" > < a href = "#unalias_group-26" > < span class = "linenos" > 26< / span > < / a > < span class = "sd" > The transformed expression.< / span >
< / span > < span id = "unalias_group-27" > < a href = "#unalias_group-27" > < span class = "linenos" > 27< / span > < / a > < span class = "sd" > " " " < / span >
< / span > < span id = "unalias_group-28" > < a href = "#unalias_group-28" > < span class = "linenos" > 28< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Group< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > parent< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Select< / span > < span class = "p" > ):< / span >
< / span > < span id = "unalias_group-29" > < a href = "#unalias_group-29" > < span class = "linenos" > 29< / span > < / a > < span class = "n" > aliased_selects< / span > < span class = "o" > =< / span > < span class = "p" > {< / span >
< / span > < span id = "unalias_group-30" > < a href = "#unalias_group-30" > < span class = "linenos" > 30< / span > < / a > < span class = "n" > e< / span > < span class = "o" > .< / span > < span class = "n" > alias< / span > < span class = "p" > :< / span > < span class = "n" > i< / span >
< / span > < span id = "unalias_group-31" > < a href = "#unalias_group-31" > < span class = "linenos" > 31< / span > < / a > < span class = "k" > for< / span > < span class = "n" > i< / span > < span class = "p" > ,< / span > < span class = "n" > e< / span > < span class = "ow" > in< / span > < span class = "nb" > enumerate< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > parent< / span > < span class = "o" > .< / span > < span class = "n" > expressions< / span > < span class = "p" > ,< / span > < span class = "n" > start< / span > < span class = "o" > =< / span > < span class = "mi" > 1< / span > < span class = "p" > )< / span >
< / span > < span id = "unalias_group-32" > < a href = "#unalias_group-32" > < span class = "linenos" > 32< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > e< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Alias< / span > < span class = "p" > )< / span >
< / span > < span id = "unalias_group-33" > < a href = "#unalias_group-33" > < span class = "linenos" > 33< / span > < / a > < span class = "p" > }< / span >
< / span > < span id = "unalias_group-34" > < a href = "#unalias_group-34" > < span class = "linenos" > 34< / span > < / a >
< / span > < span id = "unalias_group-35" > < a href = "#unalias_group-35" > < span class = "linenos" > 35< / span > < / a > < span class = "k" > for< / span > < span class = "n" > group_by< / span > < span class = "ow" > in< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > expressions< / span > < span class = "p" > :< / span >
< / span > < span id = "unalias_group-36" > < a href = "#unalias_group-36" > < span class = "linenos" > 36< / span > < / a > < span class = "k" > if< / span > < span class = "p" > (< / span >
< / span > < span id = "unalias_group-37" > < a href = "#unalias_group-37" > < span class = "linenos" > 37< / span > < / a > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > group_by< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Column< / span > < span class = "p" > )< / span >
< / span > < span id = "unalias_group-38" > < a href = "#unalias_group-38" > < span class = "linenos" > 38< / span > < / a > < span class = "ow" > and< / span > < span class = "ow" > not< / span > < span class = "n" > group_by< / span > < span class = "o" > .< / span > < span class = "n" > table< / span >
< / span > < span id = "unalias_group-39" > < a href = "#unalias_group-39" > < span class = "linenos" > 39< / span > < / a > < span class = "ow" > and< / span > < span class = "n" > group_by< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "ow" > in< / span > < span class = "n" > aliased_selects< / span >
< / span > < span id = "unalias_group-40" > < a href = "#unalias_group-40" > < span class = "linenos" > 40< / span > < / a > < span class = "p" > ):< / span >
< / span > < span id = "unalias_group-41" > < a href = "#unalias_group-41" > < span class = "linenos" > 41< / span > < / a > < span class = "n" > group_by< / span > < span class = "o" > .< / span > < span class = "n" > replace< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Literal< / span > < span class = "o" > .< / span > < span class = "n" > number< / span > < span class = "p" > (< / span > < span class = "n" > aliased_selects< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "n" > group_by< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "p" > )))< / span >
< / span > < span id = "unalias_group-42" > < a href = "#unalias_group-42" > < span class = "linenos" > 42< / span > < / a >
< / span > < span id = "unalias_group-43" > < a href = "#unalias_group-43" > < span class = "linenos" > 43< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
2025-02-13 15:22:50 +01:00
< / span > < / pre > < / div >
< div class = "docstring" > < p > Replace references to select aliases in GROUP BY clauses.< / p >
< h6 id = "example" > Example:< / h6 >
< blockquote >
< div class = "pdoc-code codehilite" >
< pre > < span > < / span > < code > < span class = "gp" > > > > < / span > < span class = "kn" > import< / span > < span class = "nn" > sqlglot< / span >
< span class = "gp" > > > > < / span > < span class = "n" > < a href = "../sqlglot.html#parse_one" > sqlglot.parse_one< / a > < / span > < span class = "p" > (< / span > < span class = "s2" > " SELECT a AS b FROM x GROUP BY b" < / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > transform< / span > < span class = "p" > (< / span > < span class = "n" > unalias_group< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > sql< / span > < span class = "p" > ()< / span >
< span class = "go" > ' SELECT a AS b FROM x GROUP BY 1' < / span >
< / code > < / pre >
< / div >
< / blockquote >
< h6 id = "arguments" > Arguments:< / h6 >
< ul >
< li > < strong > expression:< / strong > the expression that will be transformed.< / li >
< / ul >
< h6 id = "returns" > Returns:< / h6 >
< blockquote >
< p > The transformed expression.< / p >
< / blockquote >
< / div >
< / section >
< section id = "eliminate_distinct_on" >
< input id = "eliminate_distinct_on-view-source" class = "view-source-toggle-state" type = "checkbox" aria-hidden = "true" tabindex = "-1" >
< div class = "attr function" >
< span class = "def" > def< / span >
< span class = "name" > eliminate_distinct_on< / span > < span class = "signature pdoc-code multiline" > (< span class = "param" > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > < / span > < span class = "return-annotation" > ) -> < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > :< / span > < / span >
< label class = "view-source-button" for = "eliminate_distinct_on-view-source" > < span > View Source< / span > < / label >
< / div >
< a class = "headerlink" href = "#eliminate_distinct_on" > < / a >
2025-02-13 15:58:03 +01:00
< div class = "pdoc-code codehilite" > < pre > < span > < / span > < span id = "eliminate_distinct_on-46" > < a href = "#eliminate_distinct_on-46" > < span class = "linenos" > 46< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > eliminate_distinct_on< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "eliminate_distinct_on-47" > < a href = "#eliminate_distinct_on-47" > < span class = "linenos" > 47< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " < / span >
< / span > < span id = "eliminate_distinct_on-48" > < a href = "#eliminate_distinct_on-48" > < span class = "linenos" > 48< / span > < / a > < span class = "sd" > Convert SELECT DISTINCT ON statements to a subquery with a window function.< / span >
< / span > < span id = "eliminate_distinct_on-49" > < a href = "#eliminate_distinct_on-49" > < span class = "linenos" > 49< / span > < / a >
< / span > < span id = "eliminate_distinct_on-50" > < a href = "#eliminate_distinct_on-50" > < span class = "linenos" > 50< / span > < / a > < span class = "sd" > This is useful for dialects that don' t support SELECT DISTINCT ON but support window functions.< / span >
< / span > < span id = "eliminate_distinct_on-51" > < a href = "#eliminate_distinct_on-51" > < span class = "linenos" > 51< / span > < / a >
< / span > < span id = "eliminate_distinct_on-52" > < a href = "#eliminate_distinct_on-52" > < span class = "linenos" > 52< / span > < / a > < span class = "sd" > Args:< / span >
< / span > < span id = "eliminate_distinct_on-53" > < a href = "#eliminate_distinct_on-53" > < span class = "linenos" > 53< / span > < / a > < span class = "sd" > expression: the expression that will be transformed.< / span >
< / span > < span id = "eliminate_distinct_on-54" > < a href = "#eliminate_distinct_on-54" > < span class = "linenos" > 54< / span > < / a >
< / span > < span id = "eliminate_distinct_on-55" > < a href = "#eliminate_distinct_on-55" > < span class = "linenos" > 55< / span > < / a > < span class = "sd" > Returns:< / span >
< / span > < span id = "eliminate_distinct_on-56" > < a href = "#eliminate_distinct_on-56" > < span class = "linenos" > 56< / span > < / a > < span class = "sd" > The transformed expression.< / span >
< / span > < span id = "eliminate_distinct_on-57" > < a href = "#eliminate_distinct_on-57" > < span class = "linenos" > 57< / span > < / a > < span class = "sd" > " " " < / span >
< / span > < span id = "eliminate_distinct_on-58" > < a href = "#eliminate_distinct_on-58" > < span class = "linenos" > 58< / span > < / a > < span class = "k" > if< / span > < span class = "p" > (< / span >
< / span > < span id = "eliminate_distinct_on-59" > < a href = "#eliminate_distinct_on-59" > < span class = "linenos" > 59< / span > < / a > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Select< / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_distinct_on-60" > < a href = "#eliminate_distinct_on-60" > < span class = "linenos" > 60< / span > < / a > < span class = "ow" > and< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " distinct" < / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_distinct_on-61" > < a href = "#eliminate_distinct_on-61" > < span class = "linenos" > 61< / span > < / a > < span class = "ow" > and< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " distinct" < / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " on" < / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_distinct_on-62" > < a href = "#eliminate_distinct_on-62" > < span class = "linenos" > 62< / span > < / a > < span class = "ow" > and< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " distinct" < / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " on" < / span > < span class = "p" > ],< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Tuple< / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_distinct_on-63" > < a href = "#eliminate_distinct_on-63" > < span class = "linenos" > 63< / span > < / a > < span class = "p" > ):< / span >
< / span > < span id = "eliminate_distinct_on-64" > < a href = "#eliminate_distinct_on-64" > < span class = "linenos" > 64< / span > < / a > < span class = "n" > distinct_cols< / span > < span class = "o" > =< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " distinct" < / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > pop< / span > < span class = "p" > ()< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " on" < / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > expressions< / span >
< / span > < span id = "eliminate_distinct_on-65" > < a href = "#eliminate_distinct_on-65" > < span class = "linenos" > 65< / span > < / a > < span class = "n" > outer_selects< / span > < span class = "o" > =< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > selects< / span >
< / span > < span id = "eliminate_distinct_on-66" > < a href = "#eliminate_distinct_on-66" > < span class = "linenos" > 66< / span > < / a > < span class = "n" > row_number< / span > < span class = "o" > =< / span > < span class = "n" > find_new_name< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > named_selects< / span > < span class = "p" > ,< / span > < span class = "s2" > " _row_number" < / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_distinct_on-67" > < a href = "#eliminate_distinct_on-67" > < span class = "linenos" > 67< / span > < / a > < span class = "n" > window< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Window< / span > < span class = "p" > (< / span > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > RowNumber< / span > < span class = "p" > (),< / span > < span class = "n" > partition_by< / span > < span class = "o" > =< / span > < span class = "n" > distinct_cols< / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_distinct_on-68" > < a href = "#eliminate_distinct_on-68" > < span class = "linenos" > 68< / span > < / a > < span class = "n" > order< / span > < span class = "o" > =< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " order" < / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_distinct_on-69" > < a href = "#eliminate_distinct_on-69" > < span class = "linenos" > 69< / span > < / a >
< / span > < span id = "eliminate_distinct_on-70" > < a href = "#eliminate_distinct_on-70" > < span class = "linenos" > 70< / span > < / a > < span class = "k" > if< / span > < span class = "n" > order< / span > < span class = "p" > :< / span >
2025-02-13 21:15:38 +01:00
< / span > < span id = "eliminate_distinct_on-71" > < a href = "#eliminate_distinct_on-71" > < span class = "linenos" > 71< / span > < / a > < span class = "n" > window< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span > < span class = "s2" > " order" < / span > < span class = "p" > ,< / span > < span class = "n" > order< / span > < span class = "o" > .< / span > < span class = "n" > pop< / span > < span class = "p" > ())< / span >
2025-02-13 20:56:33 +01:00
< / span > < span id = "eliminate_distinct_on-72" > < a href = "#eliminate_distinct_on-72" > < span class = "linenos" > 72< / span > < / a > < span class = "k" > else< / span > < span class = "p" > :< / span >
< / span > < span id = "eliminate_distinct_on-73" > < a href = "#eliminate_distinct_on-73" > < span class = "linenos" > 73< / span > < / a > < span class = "n" > window< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span > < span class = "s2" > " order" < / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Order< / span > < span class = "p" > (< / span > < span class = "n" > expressions< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "n" > c< / span > < span class = "o" > .< / span > < span class = "n" > copy< / span > < span class = "p" > ()< / span > < span class = "k" > for< / span > < span class = "n" > c< / span > < span class = "ow" > in< / span > < span class = "n" > distinct_cols< / span > < span class = "p" > ]))< / span >
< / span > < span id = "eliminate_distinct_on-74" > < a href = "#eliminate_distinct_on-74" > < span class = "linenos" > 74< / span > < / a >
< / span > < span id = "eliminate_distinct_on-75" > < a href = "#eliminate_distinct_on-75" > < span class = "linenos" > 75< / span > < / a > < span class = "n" > window< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > alias_< / span > < span class = "p" > (< / span > < span class = "n" > window< / span > < span class = "p" > ,< / span > < span class = "n" > row_number< / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_distinct_on-76" > < a href = "#eliminate_distinct_on-76" > < span class = "linenos" > 76< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > select< / span > < span class = "p" > (< / span > < span class = "n" > window< / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
2025-02-13 15:58:03 +01:00
< / span > < span id = "eliminate_distinct_on-77" > < a href = "#eliminate_distinct_on-77" > < span class = "linenos" > 77< / span > < / a >
2025-02-13 20:59:23 +01:00
< / span > < span id = "eliminate_distinct_on-78" > < a href = "#eliminate_distinct_on-78" > < span class = "linenos" > 78< / span > < / a > < span class = "k" > return< / span > < span class = "p" > (< / span >
2025-02-13 21:15:38 +01:00
< / span > < span id = "eliminate_distinct_on-79" > < a href = "#eliminate_distinct_on-79" > < span class = "linenos" > 79< / span > < / a > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > select< / span > < span class = "p" > (< / span > < span class = "o" > *< / span > < span class = "n" > outer_selects< / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_distinct_on-80" > < a href = "#eliminate_distinct_on-80" > < span class = "linenos" > 80< / span > < / a > < span class = "o" > .< / span > < span class = "n" > from_< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > subquery< / span > < span class = "p" > (< / span > < span class = "s2" > " _t" < / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ),< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_distinct_on-81" > < a href = "#eliminate_distinct_on-81" > < span class = "linenos" > 81< / span > < / a > < span class = "o" > .< / span > < span class = "n" > where< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > row_number< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > eq< / span > < span class = "p" > (< / span > < span class = "mi" > 1< / span > < span class = "p" > ),< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
2025-02-13 20:59:23 +01:00
< / span > < span id = "eliminate_distinct_on-82" > < a href = "#eliminate_distinct_on-82" > < span class = "linenos" > 82< / span > < / a > < span class = "p" > )< / span >
< / span > < span id = "eliminate_distinct_on-83" > < a href = "#eliminate_distinct_on-83" > < span class = "linenos" > 83< / span > < / a >
< / span > < span id = "eliminate_distinct_on-84" > < a href = "#eliminate_distinct_on-84" > < span class = "linenos" > 84< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
2025-02-13 15:22:50 +01:00
< / span > < / pre > < / div >
< div class = "docstring" > < p > Convert SELECT DISTINCT ON statements to a subquery with a window function.< / p >
< p > This is useful for dialects that don't support SELECT DISTINCT ON but support window functions.< / p >
< h6 id = "arguments" > Arguments:< / h6 >
< ul >
< li > < strong > expression:< / strong > the expression that will be transformed.< / li >
< / ul >
< h6 id = "returns" > Returns:< / h6 >
< blockquote >
< p > The transformed expression.< / p >
< / blockquote >
< / div >
2025-02-13 15:45:33 +01:00
< / section >
< section id = "eliminate_qualify" >
< input id = "eliminate_qualify-view-source" class = "view-source-toggle-state" type = "checkbox" aria-hidden = "true" tabindex = "-1" >
< div class = "attr function" >
< span class = "def" > def< / span >
< span class = "name" > eliminate_qualify< / span > < span class = "signature pdoc-code multiline" > (< span class = "param" > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > < / span > < span class = "return-annotation" > ) -> < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > :< / span > < / span >
< label class = "view-source-button" for = "eliminate_qualify-view-source" > < span > View Source< / span > < / label >
< / div >
< a class = "headerlink" href = "#eliminate_qualify" > < / a >
2025-02-13 20:59:23 +01:00
< div class = "pdoc-code codehilite" > < pre > < span > < / span > < span id = "eliminate_qualify-87" > < a href = "#eliminate_qualify-87" > < span class = "linenos" > 87< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > eliminate_qualify< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "eliminate_qualify-88" > < a href = "#eliminate_qualify-88" > < span class = "linenos" > 88< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " < / span >
< / span > < span id = "eliminate_qualify-89" > < a href = "#eliminate_qualify-89" > < span class = "linenos" > 89< / span > < / a > < span class = "sd" > Convert SELECT statements that contain the QUALIFY clause into subqueries, filtered equivalently.< / span >
< / span > < span id = "eliminate_qualify-90" > < a href = "#eliminate_qualify-90" > < span class = "linenos" > 90< / span > < / a >
< / span > < span id = "eliminate_qualify-91" > < a href = "#eliminate_qualify-91" > < span class = "linenos" > 91< / span > < / a > < span class = "sd" > The idea behind this transformation can be seen in Snowflake' s documentation for QUALIFY:< / span >
< / span > < span id = "eliminate_qualify-92" > < a href = "#eliminate_qualify-92" > < span class = "linenos" > 92< / span > < / a > < span class = "sd" > https://docs.snowflake.com/en/sql-reference/constructs/qualify< / span >
< / span > < span id = "eliminate_qualify-93" > < a href = "#eliminate_qualify-93" > < span class = "linenos" > 93< / span > < / a >
< / span > < span id = "eliminate_qualify-94" > < a href = "#eliminate_qualify-94" > < span class = "linenos" > 94< / span > < / a > < span class = "sd" > Some dialects don' t support window functions in the WHERE clause, so we need to include them as< / span >
< / span > < span id = "eliminate_qualify-95" > < a href = "#eliminate_qualify-95" > < span class = "linenos" > 95< / span > < / a > < span class = "sd" > projections in the subquery, in order to refer to them in the outer filter using aliases. Also,< / span >
< / span > < span id = "eliminate_qualify-96" > < a href = "#eliminate_qualify-96" > < span class = "linenos" > 96< / span > < / a > < span class = "sd" > if a column is referenced in the QUALIFY clause but is not selected, we need to include it too,< / span >
< / span > < span id = "eliminate_qualify-97" > < a href = "#eliminate_qualify-97" > < span class = "linenos" > 97< / span > < / a > < span class = "sd" > otherwise we won' t be able to refer to it in the outer query' s WHERE clause.< / span >
< / span > < span id = "eliminate_qualify-98" > < a href = "#eliminate_qualify-98" > < span class = "linenos" > 98< / span > < / a > < span class = "sd" > " " " < / span >
< / span > < span id = "eliminate_qualify-99" > < a href = "#eliminate_qualify-99" > < span class = "linenos" > 99< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Select< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " qualify" < / span > < span class = "p" > ):< / span >
< / span > < span id = "eliminate_qualify-100" > < a href = "#eliminate_qualify-100" > < span class = "linenos" > 100< / span > < / a > < span class = "n" > taken< / span > < span class = "o" > =< / span > < span class = "nb" > set< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > named_selects< / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_qualify-101" > < a href = "#eliminate_qualify-101" > < span class = "linenos" > 101< / span > < / a > < span class = "k" > for< / span > < span class = "n" > select< / span > < span class = "ow" > in< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > selects< / span > < span class = "p" > :< / span >
< / span > < span id = "eliminate_qualify-102" > < a href = "#eliminate_qualify-102" > < span class = "linenos" > 102< / span > < / a > < span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > select< / span > < span class = "o" > .< / span > < span class = "n" > alias_or_name< / span > < span class = "p" > :< / span >
< / span > < span id = "eliminate_qualify-103" > < a href = "#eliminate_qualify-103" > < span class = "linenos" > 103< / span > < / a > < span class = "n" > alias< / span > < span class = "o" > =< / span > < span class = "n" > find_new_name< / span > < span class = "p" > (< / span > < span class = "n" > taken< / span > < span class = "p" > ,< / span > < span class = "s2" > " _c" < / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_qualify-104" > < a href = "#eliminate_qualify-104" > < span class = "linenos" > 104< / span > < / a > < span class = "n" > select< / span > < span class = "o" > .< / span > < span class = "n" > replace< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > alias_< / span > < span class = "p" > (< / span > < span class = "n" > select< / span > < span class = "p" > ,< / span > < span class = "n" > alias< / span > < span class = "p" > ))< / span >
< / span > < span id = "eliminate_qualify-105" > < a href = "#eliminate_qualify-105" > < span class = "linenos" > 105< / span > < / a > < span class = "n" > taken< / span > < span class = "o" > .< / span > < span class = "n" > add< / span > < span class = "p" > (< / span > < span class = "n" > alias< / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_qualify-106" > < a href = "#eliminate_qualify-106" > < span class = "linenos" > 106< / span > < / a >
< / span > < span id = "eliminate_qualify-107" > < a href = "#eliminate_qualify-107" > < span class = "linenos" > 107< / span > < / a > < span class = "n" > outer_selects< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > select< / span > < span class = "p" > (< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > select< / span > < span class = "o" > .< / span > < span class = "n" > alias_or_name< / span > < span class = "k" > for< / span > < span class = "n" > select< / span > < span class = "ow" > in< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > selects< / span > < span class = "p" > ])< / span >
< / span > < span id = "eliminate_qualify-108" > < a href = "#eliminate_qualify-108" > < span class = "linenos" > 108< / span > < / a > < span class = "n" > qualify_filters< / span > < span class = "o" > =< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " qualify" < / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > pop< / span > < span class = "p" > ()< / span > < span class = "o" > .< / span > < span class = "n" > this< / span >
< / span > < span id = "eliminate_qualify-109" > < a href = "#eliminate_qualify-109" > < span class = "linenos" > 109< / span > < / a >
< / span > < span id = "eliminate_qualify-110" > < a href = "#eliminate_qualify-110" > < span class = "linenos" > 110< / span > < / a > < span class = "n" > select_candidates< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Window< / span > < span class = "k" > if< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > is_star< / span > < span class = "k" > else< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Window< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Column< / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_qualify-111" > < a href = "#eliminate_qualify-111" > < span class = "linenos" > 111< / span > < / a > < span class = "k" > for< / span > < span class = "n" > expr< / span > < span class = "ow" > in< / span > < span class = "n" > qualify_filters< / span > < span class = "o" > .< / span > < span class = "n" > find_all< / span > < span class = "p" > (< / span > < span class = "n" > select_candidates< / span > < span class = "p" > ):< / span >
< / span > < span id = "eliminate_qualify-112" > < a href = "#eliminate_qualify-112" > < span class = "linenos" > 112< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expr< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Window< / span > < span class = "p" > ):< / span >
< / span > < span id = "eliminate_qualify-113" > < a href = "#eliminate_qualify-113" > < span class = "linenos" > 113< / span > < / a > < span class = "n" > alias< / span > < span class = "o" > =< / span > < span class = "n" > find_new_name< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > named_selects< / span > < span class = "p" > ,< / span > < span class = "s2" > " _w" < / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_qualify-114" > < a href = "#eliminate_qualify-114" > < span class = "linenos" > 114< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > select< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > alias_< / span > < span class = "p" > (< / span > < span class = "n" > expr< / span > < span class = "p" > ,< / span > < span class = "n" > alias< / span > < span class = "p" > ),< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_qualify-115" > < a href = "#eliminate_qualify-115" > < span class = "linenos" > 115< / span > < / a > < span class = "n" > column< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > alias< / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_qualify-116" > < a href = "#eliminate_qualify-116" > < span class = "linenos" > 116< / span > < / a >
< / span > < span id = "eliminate_qualify-117" > < a href = "#eliminate_qualify-117" > < span class = "linenos" > 117< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expr< / span > < span class = "o" > .< / span > < span class = "n" > parent< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Qualify< / span > < span class = "p" > ):< / span >
< / span > < span id = "eliminate_qualify-118" > < a href = "#eliminate_qualify-118" > < span class = "linenos" > 118< / span > < / a > < span class = "n" > qualify_filters< / span > < span class = "o" > =< / span > < span class = "n" > column< / span >
< / span > < span id = "eliminate_qualify-119" > < a href = "#eliminate_qualify-119" > < span class = "linenos" > 119< / span > < / a > < span class = "k" > else< / span > < span class = "p" > :< / span >
< / span > < span id = "eliminate_qualify-120" > < a href = "#eliminate_qualify-120" > < span class = "linenos" > 120< / span > < / a > < span class = "n" > expr< / span > < span class = "o" > .< / span > < span class = "n" > replace< / span > < span class = "p" > (< / span > < span class = "n" > column< / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_qualify-121" > < a href = "#eliminate_qualify-121" > < span class = "linenos" > 121< / span > < / a > < span class = "k" > elif< / span > < span class = "n" > expr< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > named_selects< / span > < span class = "p" > :< / span >
< / span > < span id = "eliminate_qualify-122" > < a href = "#eliminate_qualify-122" > < span class = "linenos" > 122< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > select< / span > < span class = "p" > (< / span > < span class = "n" > expr< / span > < span class = "o" > .< / span > < span class = "n" > copy< / span > < span class = "p" > (),< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_qualify-123" > < a href = "#eliminate_qualify-123" > < span class = "linenos" > 123< / span > < / a >
2025-02-13 21:15:38 +01:00
< / span > < span id = "eliminate_qualify-124" > < a href = "#eliminate_qualify-124" > < span class = "linenos" > 124< / span > < / a > < span class = "k" > return< / span > < span class = "n" > outer_selects< / span > < span class = "o" > .< / span > < span class = "n" > from_< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > subquery< / span > < span class = "p" > (< / span > < span class = "n" > alias< / span > < span class = "o" > =< / span > < span class = "s2" > " _t" < / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ),< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > where< / span > < span class = "p" > (< / span >
< / span > < span id = "eliminate_qualify-125" > < a href = "#eliminate_qualify-125" > < span class = "linenos" > 125< / span > < / a > < span class = "n" > qualify_filters< / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span >
< / span > < span id = "eliminate_qualify-126" > < a href = "#eliminate_qualify-126" > < span class = "linenos" > 126< / span > < / a > < span class = "p" > )< / span >
< / span > < span id = "eliminate_qualify-127" > < a href = "#eliminate_qualify-127" > < span class = "linenos" > 127< / span > < / a >
< / span > < span id = "eliminate_qualify-128" > < a href = "#eliminate_qualify-128" > < span class = "linenos" > 128< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
2025-02-13 15:45:33 +01:00
< / span > < / pre > < / div >
< div class = "docstring" > < p > Convert SELECT statements that contain the QUALIFY clause into subqueries, filtered equivalently.< / p >
< p > The idea behind this transformation can be seen in Snowflake's documentation for QUALIFY:
< a href = "https://docs.snowflake.com/en/sql-reference/constructs/qualify" > https://docs.snowflake.com/en/sql-reference/constructs/qualify< / a > < / p >
< p > Some dialects don't support window functions in the WHERE clause, so we need to include them as
projections in the subquery, in order to refer to them in the outer filter using aliases. Also,
if a column is referenced in the QUALIFY clause but is not selected, we need to include it too,
otherwise we won't be able to refer to it in the outer query's WHERE clause.< / p >
< / div >
2025-02-13 15:22:50 +01:00
< / section >
< section id = "remove_precision_parameterized_types" >
< input id = "remove_precision_parameterized_types-view-source" class = "view-source-toggle-state" type = "checkbox" aria-hidden = "true" tabindex = "-1" >
< div class = "attr function" >
< span class = "def" > def< / span >
< span class = "name" > remove_precision_parameterized_types< / span > < span class = "signature pdoc-code multiline" > (< span class = "param" > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > < / span > < span class = "return-annotation" > ) -> < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > :< / span > < / span >
< label class = "view-source-button" for = "remove_precision_parameterized_types-view-source" > < span > View Source< / span > < / label >
< / div >
< a class = "headerlink" href = "#remove_precision_parameterized_types" > < / a >
2025-02-13 21:15:38 +01:00
< div class = "pdoc-code codehilite" > < pre > < span > < / span > < span id = "remove_precision_parameterized_types-131" > < a href = "#remove_precision_parameterized_types-131" > < span class = "linenos" > 131< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > remove_precision_parameterized_types< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "remove_precision_parameterized_types-132" > < a href = "#remove_precision_parameterized_types-132" > < span class = "linenos" > 132< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " < / span >
< / span > < span id = "remove_precision_parameterized_types-133" > < a href = "#remove_precision_parameterized_types-133" > < span class = "linenos" > 133< / span > < / a > < span class = "sd" > Some dialects only allow the precision for parameterized types to be defined in the DDL and not in< / span >
< / span > < span id = "remove_precision_parameterized_types-134" > < a href = "#remove_precision_parameterized_types-134" > < span class = "linenos" > 134< / span > < / a > < span class = "sd" > other expressions. This transforms removes the precision from parameterized types in expressions.< / span >
< / span > < span id = "remove_precision_parameterized_types-135" > < a href = "#remove_precision_parameterized_types-135" > < span class = "linenos" > 135< / span > < / a > < span class = "sd" > " " " < / span >
< / span > < span id = "remove_precision_parameterized_types-136" > < a href = "#remove_precision_parameterized_types-136" > < span class = "linenos" > 136< / span > < / a > < span class = "k" > for< / span > < span class = "n" > node< / span > < span class = "ow" > in< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > find_all< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > DataType< / span > < span class = "p" > ):< / span >
< / span > < span id = "remove_precision_parameterized_types-137" > < a href = "#remove_precision_parameterized_types-137" > < span class = "linenos" > 137< / span > < / a > < span class = "n" > node< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span >
< / span > < span id = "remove_precision_parameterized_types-138" > < a href = "#remove_precision_parameterized_types-138" > < span class = "linenos" > 138< / span > < / a > < span class = "s2" > " expressions" < / span > < span class = "p" > ,< / span > < span class = "p" > [< / span > < span class = "n" > e< / span > < span class = "k" > for< / span > < span class = "n" > e< / span > < span class = "ow" > in< / span > < span class = "n" > node< / span > < span class = "o" > .< / span > < span class = "n" > expressions< / span > < span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > e< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > DataTypeParam< / span > < span class = "p" > )]< / span >
< / span > < span id = "remove_precision_parameterized_types-139" > < a href = "#remove_precision_parameterized_types-139" > < span class = "linenos" > 139< / span > < / a > < span class = "p" > )< / span >
< / span > < span id = "remove_precision_parameterized_types-140" > < a href = "#remove_precision_parameterized_types-140" > < span class = "linenos" > 140< / span > < / a >
< / span > < span id = "remove_precision_parameterized_types-141" > < a href = "#remove_precision_parameterized_types-141" > < span class = "linenos" > 141< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
2025-02-13 15:22:50 +01:00
< / span > < / pre > < / div >
2025-02-13 15:48:55 +01:00
< div class = "docstring" > < p > Some dialects only allow the precision for parameterized types to be defined in the DDL and not in
other expressions. This transforms removes the precision from parameterized types in expressions.< / p >
2025-02-13 15:22:50 +01:00
< / div >
2025-02-13 15:51:35 +01:00
< / section >
< section id = "unnest_to_explode" >
< input id = "unnest_to_explode-view-source" class = "view-source-toggle-state" type = "checkbox" aria-hidden = "true" tabindex = "-1" >
< div class = "attr function" >
< span class = "def" > def< / span >
< span class = "name" > unnest_to_explode< / span > < span class = "signature pdoc-code multiline" > (< span class = "param" > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > < / span > < span class = "return-annotation" > ) -> < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > :< / span > < / span >
< label class = "view-source-button" for = "unnest_to_explode-view-source" > < span > View Source< / span > < / label >
< / div >
< a class = "headerlink" href = "#unnest_to_explode" > < / a >
2025-02-13 21:15:38 +01:00
< div class = "pdoc-code codehilite" > < pre > < span > < / span > < span id = "unnest_to_explode-144" > < a href = "#unnest_to_explode-144" > < span class = "linenos" > 144< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > unnest_to_explode< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
2025-02-13 21:16:46 +01:00
< / span > < span id = "unnest_to_explode-145" > < a href = "#unnest_to_explode-145" > < span class = "linenos" > 145< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " Convert cross join unnest into lateral view explode." " " < / span >
2025-02-13 21:15:38 +01:00
< / span > < span id = "unnest_to_explode-146" > < a href = "#unnest_to_explode-146" > < span class = "linenos" > 146< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Select< / span > < span class = "p" > ):< / span >
< / span > < span id = "unnest_to_explode-147" > < a href = "#unnest_to_explode-147" > < span class = "linenos" > 147< / span > < / a > < span class = "k" > for< / span > < span class = "n" > join< / span > < span class = "ow" > in< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " joins" < / span > < span class = "p" > )< / span > < span class = "ow" > or< / span > < span class = "p" > []:< / span >
< / span > < span id = "unnest_to_explode-148" > < a href = "#unnest_to_explode-148" > < span class = "linenos" > 148< / span > < / a > < span class = "n" > unnest< / span > < span class = "o" > =< / span > < span class = "n" > join< / span > < span class = "o" > .< / span > < span class = "n" > this< / span >
< / span > < span id = "unnest_to_explode-149" > < a href = "#unnest_to_explode-149" > < span class = "linenos" > 149< / span > < / a >
< / span > < span id = "unnest_to_explode-150" > < a href = "#unnest_to_explode-150" > < span class = "linenos" > 150< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > unnest< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Unnest< / span > < span class = "p" > ):< / span >
< / span > < span id = "unnest_to_explode-151" > < a href = "#unnest_to_explode-151" > < span class = "linenos" > 151< / span > < / a > < span class = "n" > alias< / span > < span class = "o" > =< / span > < span class = "n" > unnest< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " alias" < / span > < span class = "p" > )< / span >
< / span > < span id = "unnest_to_explode-152" > < a href = "#unnest_to_explode-152" > < span class = "linenos" > 152< / span > < / a > < span class = "n" > udtf< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Posexplode< / span > < span class = "k" > if< / span > < span class = "n" > unnest< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " offset" < / span > < span class = "p" > )< / span > < span class = "k" > else< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Explode< / span >
2025-02-13 20:59:23 +01:00
< / span > < span id = "unnest_to_explode-153" > < a href = "#unnest_to_explode-153" > < span class = "linenos" > 153< / span > < / a >
2025-02-13 21:15:38 +01:00
< / span > < span id = "unnest_to_explode-154" > < a href = "#unnest_to_explode-154" > < span class = "linenos" > 154< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " joins" < / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > remove< / span > < span class = "p" > (< / span > < span class = "n" > join< / span > < span class = "p" > )< / span >
< / span > < span id = "unnest_to_explode-155" > < a href = "#unnest_to_explode-155" > < span class = "linenos" > 155< / span > < / a >
< / span > < span id = "unnest_to_explode-156" > < a href = "#unnest_to_explode-156" > < span class = "linenos" > 156< / span > < / a > < span class = "k" > for< / span > < span class = "n" > e< / span > < span class = "p" > ,< / span > < span class = "n" > column< / span > < span class = "ow" > in< / span > < span class = "nb" > zip< / span > < span class = "p" > (< / span > < span class = "n" > unnest< / span > < span class = "o" > .< / span > < span class = "n" > expressions< / span > < span class = "p" > ,< / span > < span class = "n" > alias< / span > < span class = "o" > .< / span > < span class = "n" > columns< / span > < span class = "k" > if< / span > < span class = "n" > alias< / span > < span class = "k" > else< / span > < span class = "p" > []):< / span >
< / span > < span id = "unnest_to_explode-157" > < a href = "#unnest_to_explode-157" > < span class = "linenos" > 157< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span >
< / span > < span id = "unnest_to_explode-158" > < a href = "#unnest_to_explode-158" > < span class = "linenos" > 158< / span > < / a > < span class = "s2" > " laterals" < / span > < span class = "p" > ,< / span >
< / span > < span id = "unnest_to_explode-159" > < a href = "#unnest_to_explode-159" > < span class = "linenos" > 159< / span > < / a > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Lateral< / span > < span class = "p" > (< / span >
< / span > < span id = "unnest_to_explode-160" > < a href = "#unnest_to_explode-160" > < span class = "linenos" > 160< / span > < / a > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > udtf< / span > < span class = "p" > (< / span > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > e< / span > < span class = "p" > ),< / span >
< / span > < span id = "unnest_to_explode-161" > < a href = "#unnest_to_explode-161" > < span class = "linenos" > 161< / span > < / a > < span class = "n" > view< / span > < span class = "o" > =< / span > < span class = "kc" > True< / span > < span class = "p" > ,< / span >
< / span > < span id = "unnest_to_explode-162" > < a href = "#unnest_to_explode-162" > < span class = "linenos" > 162< / span > < / a > < span class = "n" > alias< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > TableAlias< / span > < span class = "p" > (< / span > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > alias< / span > < span class = "o" > .< / span > < span class = "n" > this< / span > < span class = "p" > ,< / span > < span class = "n" > columns< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "n" > column< / span > < span class = "p" > ]),< / span > < span class = "c1" > # type: ignore< / span >
< / span > < span id = "unnest_to_explode-163" > < a href = "#unnest_to_explode-163" > < span class = "linenos" > 163< / span > < / a > < span class = "p" > ),< / span >
< / span > < span id = "unnest_to_explode-164" > < a href = "#unnest_to_explode-164" > < span class = "linenos" > 164< / span > < / a > < span class = "p" > )< / span >
< / span > < span id = "unnest_to_explode-165" > < a href = "#unnest_to_explode-165" > < span class = "linenos" > 165< / span > < / a >
< / span > < span id = "unnest_to_explode-166" > < a href = "#unnest_to_explode-166" > < span class = "linenos" > 166< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
2025-02-13 15:51:35 +01:00
< / span > < / pre > < / div >
2025-02-13 21:16:46 +01:00
< div class = "docstring" > < p > Convert cross join unnest into lateral view explode.< / p >
2025-02-13 15:51:35 +01:00
< / div >
< / section >
< section id = "explode_to_unnest" >
< input id = "explode_to_unnest-view-source" class = "view-source-toggle-state" type = "checkbox" aria-hidden = "true" tabindex = "-1" >
< div class = "attr function" >
< span class = "def" > def< / span >
2025-02-13 21:03:05 +01:00
< span class = "name" > explode_to_unnest< / span > < span class = "signature pdoc-code multiline" > (< span class = "param" > < span class = "n" > index_offset< / span > < span class = "p" > :< / span > < span class = "nb" > int< / span > < span class = "o" > =< / span > < span class = "mi" > 0< / span > < / span > < span class = "return-annotation" > ) -> < span class = "n" > Callable< / span > < span class = "p" > [[< / span > < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > < span class = "p" > ],< / span > < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > < span class = "p" > ]< / span > :< / span > < / span >
2025-02-13 15:51:35 +01:00
< label class = "view-source-button" for = "explode_to_unnest-view-source" > < span > View Source< / span > < / label >
< / div >
< a class = "headerlink" href = "#explode_to_unnest" > < / a >
2025-02-13 21:15:38 +01:00
< div class = "pdoc-code codehilite" > < pre > < span > < / span > < span id = "explode_to_unnest-169" > < a href = "#explode_to_unnest-169" > < span class = "linenos" > 169< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > explode_to_unnest< / span > < span class = "p" > (< / span > < span class = "n" > index_offset< / span > < span class = "p" > :< / span > < span class = "nb" > int< / span > < span class = "o" > =< / span > < span class = "mi" > 0< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > Callable< / span > < span class = "p" > [[< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > ],< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > ]:< / span >
2025-02-13 21:16:46 +01:00
< / span > < span id = "explode_to_unnest-170" > < a href = "#explode_to_unnest-170" > < span class = "linenos" > 170< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " Convert explode/posexplode into unnest." " " < / span >
2025-02-13 21:15:38 +01:00
< / span > < span id = "explode_to_unnest-171" > < a href = "#explode_to_unnest-171" > < span class = "linenos" > 171< / span > < / a >
< / span > < span id = "explode_to_unnest-172" > < a href = "#explode_to_unnest-172" > < span class = "linenos" > 172< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > _explode_to_unnest< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "explode_to_unnest-173" > < a href = "#explode_to_unnest-173" > < span class = "linenos" > 173< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Select< / span > < span class = "p" > ):< / span >
< / span > < span id = "explode_to_unnest-174" > < a href = "#explode_to_unnest-174" > < span class = "linenos" > 174< / span > < / a > < span class = "kn" > from< / span > < span class = "nn" > sqlglot.optimizer.scope< / span > < span class = "kn" > import< / span > < span class = "n" > Scope< / span >
2025-02-13 21:03:05 +01:00
< / span > < span id = "explode_to_unnest-175" > < a href = "#explode_to_unnest-175" > < span class = "linenos" > 175< / span > < / a >
2025-02-13 21:15:38 +01:00
< / span > < span id = "explode_to_unnest-176" > < a href = "#explode_to_unnest-176" > < span class = "linenos" > 176< / span > < / a > < span class = "n" > taken_select_names< / span > < span class = "o" > =< / span > < span class = "nb" > set< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > named_selects< / span > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-177" > < a href = "#explode_to_unnest-177" > < span class = "linenos" > 177< / span > < / a > < span class = "n" > taken_source_names< / span > < span class = "o" > =< / span > < span class = "p" > {< / span > < span class = "n" > name< / span > < span class = "k" > for< / span > < span class = "n" > name< / span > < span class = "p" > ,< / span > < span class = "n" > _< / span > < span class = "ow" > in< / span > < span class = "n" > Scope< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > references< / span > < span class = "p" > }< / span >
< / span > < span id = "explode_to_unnest-178" > < a href = "#explode_to_unnest-178" > < span class = "linenos" > 178< / span > < / a >
< / span > < span id = "explode_to_unnest-179" > < a href = "#explode_to_unnest-179" > < span class = "linenos" > 179< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > new_name< / span > < span class = "p" > (< / span > < span class = "n" > names< / span > < span class = "p" > :< / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > Set< / span > < span class = "p" > [< / span > < span class = "nb" > str< / span > < span class = "p" > ],< / span > < span class = "n" > name< / span > < span class = "p" > :< / span > < span class = "nb" > str< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "nb" > str< / span > < span class = "p" > :< / span >
< / span > < span id = "explode_to_unnest-180" > < a href = "#explode_to_unnest-180" > < span class = "linenos" > 180< / span > < / a > < span class = "n" > name< / span > < span class = "o" > =< / span > < span class = "n" > find_new_name< / span > < span class = "p" > (< / span > < span class = "n" > names< / span > < span class = "p" > ,< / span > < span class = "n" > name< / span > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-181" > < a href = "#explode_to_unnest-181" > < span class = "linenos" > 181< / span > < / a > < span class = "n" > names< / span > < span class = "o" > .< / span > < span class = "n" > add< / span > < span class = "p" > (< / span > < span class = "n" > name< / span > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-182" > < a href = "#explode_to_unnest-182" > < span class = "linenos" > 182< / span > < / a > < span class = "k" > return< / span > < span class = "n" > name< / span >
< / span > < span id = "explode_to_unnest-183" > < a href = "#explode_to_unnest-183" > < span class = "linenos" > 183< / span > < / a >
< / span > < span id = "explode_to_unnest-184" > < a href = "#explode_to_unnest-184" > < span class = "linenos" > 184< / span > < / a > < span class = "n" > arrays< / span > < span class = "p" > :< / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > List< / span > < span class = "p" > [< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Condition< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< / span > < span id = "explode_to_unnest-185" > < a href = "#explode_to_unnest-185" > < span class = "linenos" > 185< / span > < / a > < span class = "n" > series_alias< / span > < span class = "o" > =< / span > < span class = "n" > new_name< / span > < span class = "p" > (< / span > < span class = "n" > taken_select_names< / span > < span class = "p" > ,< / span > < span class = "s2" > " pos" < / span > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-186" > < a href = "#explode_to_unnest-186" > < span class = "linenos" > 186< / span > < / a > < span class = "n" > series< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > alias_< / span > < span class = "p" > (< / span >
< / span > < span id = "explode_to_unnest-187" > < a href = "#explode_to_unnest-187" > < span class = "linenos" > 187< / span > < / a > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Unnest< / span > < span class = "p" > (< / span >
< / span > < span id = "explode_to_unnest-188" > < a href = "#explode_to_unnest-188" > < span class = "linenos" > 188< / span > < / a > < span class = "n" > expressions< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > GenerateSeries< / span > < span class = "p" > (< / span > < span class = "n" > start< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Literal< / span > < span class = "o" > .< / span > < span class = "n" > number< / span > < span class = "p" > (< / span > < span class = "n" > index_offset< / span > < span class = "p" > ))]< / span >
< / span > < span id = "explode_to_unnest-189" > < a href = "#explode_to_unnest-189" > < span class = "linenos" > 189< / span > < / a > < span class = "p" > ),< / span >
< / span > < span id = "explode_to_unnest-190" > < a href = "#explode_to_unnest-190" > < span class = "linenos" > 190< / span > < / a > < span class = "n" > new_name< / span > < span class = "p" > (< / span > < span class = "n" > taken_source_names< / span > < span class = "p" > ,< / span > < span class = "s2" > " _u" < / span > < span class = "p" > ),< / span >
< / span > < span id = "explode_to_unnest-191" > < a href = "#explode_to_unnest-191" > < span class = "linenos" > 191< / span > < / a > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "n" > series_alias< / span > < span class = "p" > ],< / span >
< / span > < span id = "explode_to_unnest-192" > < a href = "#explode_to_unnest-192" > < span class = "linenos" > 192< / span > < / a > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-193" > < a href = "#explode_to_unnest-193" > < span class = "linenos" > 193< / span > < / a >
< / span > < span id = "explode_to_unnest-194" > < a href = "#explode_to_unnest-194" > < span class = "linenos" > 194< / span > < / a > < span class = "c1" > # we use list here because expression.selects is mutated inside the loop< / span >
< / span > < span id = "explode_to_unnest-195" > < a href = "#explode_to_unnest-195" > < span class = "linenos" > 195< / span > < / a > < span class = "k" > for< / span > < span class = "n" > select< / span > < span class = "ow" > in< / span > < span class = "nb" > list< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > selects< / span > < span class = "p" > ):< / span >
< / span > < span id = "explode_to_unnest-196" > < a href = "#explode_to_unnest-196" > < span class = "linenos" > 196< / span > < / a > < span class = "n" > explode< / span > < span class = "o" > =< / span > < span class = "n" > select< / span > < span class = "o" > .< / span > < span class = "n" > find< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Explode< / span > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-197" > < a href = "#explode_to_unnest-197" > < span class = "linenos" > 197< / span > < / a >
< / span > < span id = "explode_to_unnest-198" > < a href = "#explode_to_unnest-198" > < span class = "linenos" > 198< / span > < / a > < span class = "k" > if< / span > < span class = "n" > explode< / span > < span class = "p" > :< / span >
< / span > < span id = "explode_to_unnest-199" > < a href = "#explode_to_unnest-199" > < span class = "linenos" > 199< / span > < / a > < span class = "n" > pos_alias< / span > < span class = "o" > =< / span > < span class = "s2" > " " < / span >
< / span > < span id = "explode_to_unnest-200" > < a href = "#explode_to_unnest-200" > < span class = "linenos" > 200< / span > < / a > < span class = "n" > explode_alias< / span > < span class = "o" > =< / span > < span class = "s2" > " " < / span >
< / span > < span id = "explode_to_unnest-201" > < a href = "#explode_to_unnest-201" > < span class = "linenos" > 201< / span > < / a >
< / span > < span id = "explode_to_unnest-202" > < a href = "#explode_to_unnest-202" > < span class = "linenos" > 202< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > select< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Alias< / span > < span class = "p" > ):< / span >
2025-02-13 21:16:46 +01:00
< / span > < span id = "explode_to_unnest-203" > < a href = "#explode_to_unnest-203" > < span class = "linenos" > 203< / span > < / a > < span class = "n" > explode_alias< / span > < span class = "o" > =< / span > < span class = "n" > select< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " alias" < / span > < span class = "p" > ]< / span >
2025-02-13 21:15:38 +01:00
< / span > < span id = "explode_to_unnest-204" > < a href = "#explode_to_unnest-204" > < span class = "linenos" > 204< / span > < / a > < span class = "n" > alias< / span > < span class = "o" > =< / span > < span class = "n" > select< / span >
< / span > < span id = "explode_to_unnest-205" > < a href = "#explode_to_unnest-205" > < span class = "linenos" > 205< / span > < / a > < span class = "k" > elif< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > select< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Aliases< / span > < span class = "p" > ):< / span >
2025-02-13 21:16:46 +01:00
< / span > < span id = "explode_to_unnest-206" > < a href = "#explode_to_unnest-206" > < span class = "linenos" > 206< / span > < / a > < span class = "n" > pos_alias< / span > < span class = "o" > =< / span > < span class = "n" > select< / span > < span class = "o" > .< / span > < span class = "n" > aliases< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span >
< / span > < span id = "explode_to_unnest-207" > < a href = "#explode_to_unnest-207" > < span class = "linenos" > 207< / span > < / a > < span class = "n" > explode_alias< / span > < span class = "o" > =< / span > < span class = "n" > select< / span > < span class = "o" > .< / span > < span class = "n" > aliases< / span > < span class = "p" > [< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span >
2025-02-13 21:15:38 +01:00
< / span > < span id = "explode_to_unnest-208" > < a href = "#explode_to_unnest-208" > < span class = "linenos" > 208< / span > < / a > < span class = "n" > alias< / span > < span class = "o" > =< / span > < span class = "n" > select< / span > < span class = "o" > .< / span > < span class = "n" > replace< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > alias_< / span > < span class = "p" > (< / span > < span class = "n" > select< / span > < span class = "o" > .< / span > < span class = "n" > this< / span > < span class = "p" > ,< / span > < span class = "s2" > " " < / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ))< / span >
< / span > < span id = "explode_to_unnest-209" > < a href = "#explode_to_unnest-209" > < span class = "linenos" > 209< / span > < / a > < span class = "k" > else< / span > < span class = "p" > :< / span >
< / span > < span id = "explode_to_unnest-210" > < a href = "#explode_to_unnest-210" > < span class = "linenos" > 210< / span > < / a > < span class = "n" > alias< / span > < span class = "o" > =< / span > < span class = "n" > select< / span > < span class = "o" > .< / span > < span class = "n" > replace< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > alias_< / span > < span class = "p" > (< / span > < span class = "n" > select< / span > < span class = "p" > ,< / span > < span class = "s2" > " " < / span > < span class = "p" > ))< / span >
< / span > < span id = "explode_to_unnest-211" > < a href = "#explode_to_unnest-211" > < span class = "linenos" > 211< / span > < / a > < span class = "n" > explode< / span > < span class = "o" > =< / span > < span class = "n" > alias< / span > < span class = "o" > .< / span > < span class = "n" > find< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Explode< / span > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-212" > < a href = "#explode_to_unnest-212" > < span class = "linenos" > 212< / span > < / a > < span class = "k" > assert< / span > < span class = "n" > explode< / span >
2025-02-13 21:04:14 +01:00
< / span > < span id = "explode_to_unnest-213" > < a href = "#explode_to_unnest-213" > < span class = "linenos" > 213< / span > < / a >
2025-02-13 21:15:38 +01:00
< / span > < span id = "explode_to_unnest-214" > < a href = "#explode_to_unnest-214" > < span class = "linenos" > 214< / span > < / a > < span class = "n" > is_posexplode< / span > < span class = "o" > =< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > explode< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Posexplode< / span > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-215" > < a href = "#explode_to_unnest-215" > < span class = "linenos" > 215< / span > < / a > < span class = "n" > explode_arg< / span > < span class = "o" > =< / span > < span class = "n" > explode< / span > < span class = "o" > .< / span > < span class = "n" > this< / span >
< / span > < span id = "explode_to_unnest-216" > < a href = "#explode_to_unnest-216" > < span class = "linenos" > 216< / span > < / a >
< / span > < span id = "explode_to_unnest-217" > < a href = "#explode_to_unnest-217" > < span class = "linenos" > 217< / span > < / a > < span class = "c1" > # This ensures that we won' t use [POS]EXPLODE' s argument as a new selection< / span >
< / span > < span id = "explode_to_unnest-218" > < a href = "#explode_to_unnest-218" > < span class = "linenos" > 218< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > explode_arg< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Column< / span > < span class = "p" > ):< / span >
< / span > < span id = "explode_to_unnest-219" > < a href = "#explode_to_unnest-219" > < span class = "linenos" > 219< / span > < / a > < span class = "n" > taken_select_names< / span > < span class = "o" > .< / span > < span class = "n" > add< / span > < span class = "p" > (< / span > < span class = "n" > explode_arg< / span > < span class = "o" > .< / span > < span class = "n" > output_name< / span > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-220" > < a href = "#explode_to_unnest-220" > < span class = "linenos" > 220< / span > < / a >
< / span > < span id = "explode_to_unnest-221" > < a href = "#explode_to_unnest-221" > < span class = "linenos" > 221< / span > < / a > < span class = "n" > unnest_source_alias< / span > < span class = "o" > =< / span > < span class = "n" > new_name< / span > < span class = "p" > (< / span > < span class = "n" > taken_source_names< / span > < span class = "p" > ,< / span > < span class = "s2" > " _u" < / span > < span class = "p" > )< / span >
2025-02-13 21:04:14 +01:00
< / span > < span id = "explode_to_unnest-222" > < a href = "#explode_to_unnest-222" > < span class = "linenos" > 222< / span > < / a >
2025-02-13 21:15:38 +01:00
< / span > < span id = "explode_to_unnest-223" > < a href = "#explode_to_unnest-223" > < span class = "linenos" > 223< / span > < / a > < span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > explode_alias< / span > < span class = "p" > :< / span >
< / span > < span id = "explode_to_unnest-224" > < a href = "#explode_to_unnest-224" > < span class = "linenos" > 224< / span > < / a > < span class = "n" > explode_alias< / span > < span class = "o" > =< / span > < span class = "n" > new_name< / span > < span class = "p" > (< / span > < span class = "n" > taken_select_names< / span > < span class = "p" > ,< / span > < span class = "s2" > " col" < / span > < span class = "p" > )< / span >
2025-02-13 21:04:14 +01:00
< / span > < span id = "explode_to_unnest-225" > < a href = "#explode_to_unnest-225" > < span class = "linenos" > 225< / span > < / a >
2025-02-13 21:15:38 +01:00
< / span > < span id = "explode_to_unnest-226" > < a href = "#explode_to_unnest-226" > < span class = "linenos" > 226< / span > < / a > < span class = "k" > if< / span > < span class = "n" > is_posexplode< / span > < span class = "p" > :< / span >
< / span > < span id = "explode_to_unnest-227" > < a href = "#explode_to_unnest-227" > < span class = "linenos" > 227< / span > < / a > < span class = "n" > pos_alias< / span > < span class = "o" > =< / span > < span class = "n" > new_name< / span > < span class = "p" > (< / span > < span class = "n" > taken_select_names< / span > < span class = "p" > ,< / span > < span class = "s2" > " pos" < / span > < span class = "p" > )< / span >
2025-02-13 21:03:05 +01:00
< / span > < span id = "explode_to_unnest-228" > < a href = "#explode_to_unnest-228" > < span class = "linenos" > 228< / span > < / a >
2025-02-13 21:15:38 +01:00
< / span > < span id = "explode_to_unnest-229" > < a href = "#explode_to_unnest-229" > < span class = "linenos" > 229< / span > < / a > < span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > pos_alias< / span > < span class = "p" > :< / span >
< / span > < span id = "explode_to_unnest-230" > < a href = "#explode_to_unnest-230" > < span class = "linenos" > 230< / span > < / a > < span class = "n" > pos_alias< / span > < span class = "o" > =< / span > < span class = "n" > new_name< / span > < span class = "p" > (< / span > < span class = "n" > taken_select_names< / span > < span class = "p" > ,< / span > < span class = "s2" > " pos" < / span > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-231" > < a href = "#explode_to_unnest-231" > < span class = "linenos" > 231< / span > < / a >
< / span > < span id = "explode_to_unnest-232" > < a href = "#explode_to_unnest-232" > < span class = "linenos" > 232< / span > < / a > < span class = "n" > alias< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span > < span class = "s2" > " alias" < / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > to_identifier< / span > < span class = "p" > (< / span > < span class = "n" > explode_alias< / span > < span class = "p" > ))< / span >
< / span > < span id = "explode_to_unnest-233" > < a href = "#explode_to_unnest-233" > < span class = "linenos" > 233< / span > < / a >
2025-02-13 21:16:46 +01:00
< / span > < span id = "explode_to_unnest-234" > < a href = "#explode_to_unnest-234" > < span class = "linenos" > 234< / span > < / a > < span class = "n" > series_table_alias< / span > < span class = "o" > =< / span > < span class = "n" > series< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " alias" < / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > this< / span >
< / span > < span id = "explode_to_unnest-235" > < a href = "#explode_to_unnest-235" > < span class = "linenos" > 235< / span > < / a > < span class = "n" > column< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > If< / span > < span class = "p" > (< / span >
< / span > < span id = "explode_to_unnest-236" > < a href = "#explode_to_unnest-236" > < span class = "linenos" > 236< / span > < / a > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > series_alias< / span > < span class = "p" > ,< / span > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "n" > series_table_alias< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > eq< / span > < span class = "p" > (< / span >
< / span > < span id = "explode_to_unnest-237" > < a href = "#explode_to_unnest-237" > < span class = "linenos" > 237< / span > < / a > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > pos_alias< / span > < span class = "p" > ,< / span > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "n" > unnest_source_alias< / span > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-238" > < a href = "#explode_to_unnest-238" > < span class = "linenos" > 238< / span > < / a > < span class = "p" > ),< / span >
< / span > < span id = "explode_to_unnest-239" > < a href = "#explode_to_unnest-239" > < span class = "linenos" > 239< / span > < / a > < span class = "n" > true< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > explode_alias< / span > < span class = "p" > ,< / span > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "n" > unnest_source_alias< / span > < span class = "p" > ),< / span >
< / span > < span id = "explode_to_unnest-240" > < a href = "#explode_to_unnest-240" > < span class = "linenos" > 240< / span > < / a > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-241" > < a href = "#explode_to_unnest-241" > < span class = "linenos" > 241< / span > < / a >
< / span > < span id = "explode_to_unnest-242" > < a href = "#explode_to_unnest-242" > < span class = "linenos" > 242< / span > < / a > < span class = "n" > explode< / span > < span class = "o" > .< / span > < span class = "n" > replace< / span > < span class = "p" > (< / span > < span class = "n" > column< / span > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-243" > < a href = "#explode_to_unnest-243" > < span class = "linenos" > 243< / span > < / a >
< / span > < span id = "explode_to_unnest-244" > < a href = "#explode_to_unnest-244" > < span class = "linenos" > 244< / span > < / a > < span class = "k" > if< / span > < span class = "n" > is_posexplode< / span > < span class = "p" > :< / span >
< / span > < span id = "explode_to_unnest-245" > < a href = "#explode_to_unnest-245" > < span class = "linenos" > 245< / span > < / a > < span class = "n" > expressions< / span > < span class = "o" > =< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > expressions< / span >
< / span > < span id = "explode_to_unnest-246" > < a href = "#explode_to_unnest-246" > < span class = "linenos" > 246< / span > < / a > < span class = "n" > expressions< / span > < span class = "o" > .< / span > < span class = "n" > insert< / span > < span class = "p" > (< / span >
< / span > < span id = "explode_to_unnest-247" > < a href = "#explode_to_unnest-247" > < span class = "linenos" > 247< / span > < / a > < span class = "n" > expressions< / span > < span class = "o" > .< / span > < span class = "n" > index< / span > < span class = "p" > (< / span > < span class = "n" > alias< / span > < span class = "p" > )< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span > < span class = "p" > ,< / span >
< / span > < span id = "explode_to_unnest-248" > < a href = "#explode_to_unnest-248" > < span class = "linenos" > 248< / span > < / a > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > If< / span > < span class = "p" > (< / span >
< / span > < span id = "explode_to_unnest-249" > < a href = "#explode_to_unnest-249" > < span class = "linenos" > 249< / span > < / a > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > series_alias< / span > < span class = "p" > ,< / span > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "n" > series_table_alias< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > eq< / span > < span class = "p" > (< / span >
< / span > < span id = "explode_to_unnest-250" > < a href = "#explode_to_unnest-250" > < span class = "linenos" > 250< / span > < / a > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > pos_alias< / span > < span class = "p" > ,< / span > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "n" > unnest_source_alias< / span > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-251" > < a href = "#explode_to_unnest-251" > < span class = "linenos" > 251< / span > < / a > < span class = "p" > ),< / span >
< / span > < span id = "explode_to_unnest-252" > < a href = "#explode_to_unnest-252" > < span class = "linenos" > 252< / span > < / a > < span class = "n" > true< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > pos_alias< / span > < span class = "p" > ,< / span > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "n" > unnest_source_alias< / span > < span class = "p" > ),< / span >
< / span > < span id = "explode_to_unnest-253" > < a href = "#explode_to_unnest-253" > < span class = "linenos" > 253< / span > < / a > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > as_< / span > < span class = "p" > (< / span > < span class = "n" > pos_alias< / span > < span class = "p" > ),< / span >
< / span > < span id = "explode_to_unnest-254" > < a href = "#explode_to_unnest-254" > < span class = "linenos" > 254< / span > < / a > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-255" > < a href = "#explode_to_unnest-255" > < span class = "linenos" > 255< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span > < span class = "s2" > " expressions" < / span > < span class = "p" > ,< / span > < span class = "n" > expressions< / span > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-256" > < a href = "#explode_to_unnest-256" > < span class = "linenos" > 256< / span > < / a >
< / span > < span id = "explode_to_unnest-257" > < a href = "#explode_to_unnest-257" > < span class = "linenos" > 257< / span > < / a > < span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > arrays< / span > < span class = "p" > :< / span >
< / span > < span id = "explode_to_unnest-258" > < a href = "#explode_to_unnest-258" > < span class = "linenos" > 258< / span > < / a > < span class = "k" > if< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " from" < / span > < span class = "p" > ):< / span >
2025-02-13 21:18:57 +01:00
< / span > < span id = "explode_to_unnest-259" > < a href = "#explode_to_unnest-259" > < span class = "linenos" > 259< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > (< / span > < span class = "n" > series< / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ,< / span > < span class = "n" > join_type< / span > < span class = "o" > =< / span > < span class = "s2" > " CROSS" < / span > < span class = "p" > )< / span >
2025-02-13 21:16:46 +01:00
< / span > < span id = "explode_to_unnest-260" > < a href = "#explode_to_unnest-260" > < span class = "linenos" > 260< / span > < / a > < span class = "k" > else< / span > < span class = "p" > :< / span >
< / span > < span id = "explode_to_unnest-261" > < a href = "#explode_to_unnest-261" > < span class = "linenos" > 261< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > from_< / span > < span class = "p" > (< / span > < span class = "n" > series< / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-262" > < a href = "#explode_to_unnest-262" > < span class = "linenos" > 262< / span > < / a >
< / span > < span id = "explode_to_unnest-263" > < a href = "#explode_to_unnest-263" > < span class = "linenos" > 263< / span > < / a > < span class = "n" > size< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Condition< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > ArraySize< / span > < span class = "p" > (< / span > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > explode_arg< / span > < span class = "o" > .< / span > < span class = "n" > copy< / span > < span class = "p" > ())< / span >
< / span > < span id = "explode_to_unnest-264" > < a href = "#explode_to_unnest-264" > < span class = "linenos" > 264< / span > < / a > < span class = "n" > arrays< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > size< / span > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-265" > < a href = "#explode_to_unnest-265" > < span class = "linenos" > 265< / span > < / a >
< / span > < span id = "explode_to_unnest-266" > < a href = "#explode_to_unnest-266" > < span class = "linenos" > 266< / span > < / a > < span class = "c1" > # trino doesn' t support left join unnest with on conditions< / span >
< / span > < span id = "explode_to_unnest-267" > < a href = "#explode_to_unnest-267" > < span class = "linenos" > 267< / span > < / a > < span class = "c1" > # if it did, this would be much simpler< / span >
< / span > < span id = "explode_to_unnest-268" > < a href = "#explode_to_unnest-268" > < span class = "linenos" > 268< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > (< / span >
< / span > < span id = "explode_to_unnest-269" > < a href = "#explode_to_unnest-269" > < span class = "linenos" > 269< / span > < / a > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > alias_< / span > < span class = "p" > (< / span >
< / span > < span id = "explode_to_unnest-270" > < a href = "#explode_to_unnest-270" > < span class = "linenos" > 270< / span > < / a > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Unnest< / span > < span class = "p" > (< / span >
< / span > < span id = "explode_to_unnest-271" > < a href = "#explode_to_unnest-271" > < span class = "linenos" > 271< / span > < / a > < span class = "n" > expressions< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "n" > explode_arg< / span > < span class = "o" > .< / span > < span class = "n" > copy< / span > < span class = "p" > ()],< / span >
< / span > < span id = "explode_to_unnest-272" > < a href = "#explode_to_unnest-272" > < span class = "linenos" > 272< / span > < / a > < span class = "n" > offset< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > to_identifier< / span > < span class = "p" > (< / span > < span class = "n" > pos_alias< / span > < span class = "p" > ),< / span >
< / span > < span id = "explode_to_unnest-273" > < a href = "#explode_to_unnest-273" > < span class = "linenos" > 273< / span > < / a > < span class = "p" > ),< / span >
< / span > < span id = "explode_to_unnest-274" > < a href = "#explode_to_unnest-274" > < span class = "linenos" > 274< / span > < / a > < span class = "n" > unnest_source_alias< / span > < span class = "p" > ,< / span >
< / span > < span id = "explode_to_unnest-275" > < a href = "#explode_to_unnest-275" > < span class = "linenos" > 275< / span > < / a > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "n" > explode_alias< / span > < span class = "p" > ],< / span >
< / span > < span id = "explode_to_unnest-276" > < a href = "#explode_to_unnest-276" > < span class = "linenos" > 276< / span > < / a > < span class = "p" > ),< / span >
< / span > < span id = "explode_to_unnest-277" > < a href = "#explode_to_unnest-277" > < span class = "linenos" > 277< / span > < / a > < span class = "n" > join_type< / span > < span class = "o" > =< / span > < span class = "s2" > " CROSS" < / span > < span class = "p" > ,< / span >
< / span > < span id = "explode_to_unnest-278" > < a href = "#explode_to_unnest-278" > < span class = "linenos" > 278< / span > < / a > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ,< / span >
< / span > < span id = "explode_to_unnest-279" > < a href = "#explode_to_unnest-279" > < span class = "linenos" > 279< / span > < / a > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-280" > < a href = "#explode_to_unnest-280" > < span class = "linenos" > 280< / span > < / a >
< / span > < span id = "explode_to_unnest-281" > < a href = "#explode_to_unnest-281" > < span class = "linenos" > 281< / span > < / a > < span class = "k" > if< / span > < span class = "n" > index_offset< / span > < span class = "o" > !=< / span > < span class = "mi" > 1< / span > < span class = "p" > :< / span >
< / span > < span id = "explode_to_unnest-282" > < a href = "#explode_to_unnest-282" > < span class = "linenos" > 282< / span > < / a > < span class = "n" > size< / span > < span class = "o" > =< / span > < span class = "n" > size< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span >
< / span > < span id = "explode_to_unnest-283" > < a href = "#explode_to_unnest-283" > < span class = "linenos" > 283< / span > < / a >
< / span > < span id = "explode_to_unnest-284" > < a href = "#explode_to_unnest-284" > < span class = "linenos" > 284< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > where< / span > < span class = "p" > (< / span >
< / span > < span id = "explode_to_unnest-285" > < a href = "#explode_to_unnest-285" > < span class = "linenos" > 285< / span > < / a > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > series_alias< / span > < span class = "p" > ,< / span > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "n" > series_table_alias< / span > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-286" > < a href = "#explode_to_unnest-286" > < span class = "linenos" > 286< / span > < / a > < span class = "o" > .< / span > < span class = "n" > eq< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > pos_alias< / span > < span class = "p" > ,< / span > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "n" > unnest_source_alias< / span > < span class = "p" > ))< / span >
< / span > < span id = "explode_to_unnest-287" > < a href = "#explode_to_unnest-287" > < span class = "linenos" > 287< / span > < / a > < span class = "o" > .< / span > < span class = "n" > or_< / span > < span class = "p" > (< / span >
< / span > < span id = "explode_to_unnest-288" > < a href = "#explode_to_unnest-288" > < span class = "linenos" > 288< / span > < / a > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > series_alias< / span > < span class = "p" > ,< / span > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "n" > series_table_alias< / span > < span class = "p" > )< / span > < span class = "o" > > < / span > < span class = "n" > size< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > and_< / span > < span class = "p" > (< / span >
< / span > < span id = "explode_to_unnest-289" > < a href = "#explode_to_unnest-289" > < span class = "linenos" > 289< / span > < / a > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > column< / span > < span class = "p" > (< / span > < span class = "n" > pos_alias< / span > < span class = "p" > ,< / span > < span class = "n" > table< / span > < span class = "o" > =< / span > < span class = "n" > unnest_source_alias< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > eq< / span > < span class = "p" > (< / span > < span class = "n" > size< / span > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-290" > < a href = "#explode_to_unnest-290" > < span class = "linenos" > 290< / span > < / a > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-291" > < a href = "#explode_to_unnest-291" > < span class = "linenos" > 291< / span > < / a > < span class = "p" > ),< / span >
< / span > < span id = "explode_to_unnest-292" > < a href = "#explode_to_unnest-292" > < span class = "linenos" > 292< / span > < / a > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ,< / span >
< / span > < span id = "explode_to_unnest-293" > < a href = "#explode_to_unnest-293" > < span class = "linenos" > 293< / span > < / a > < span class = "p" > )< / span >
2025-02-13 21:15:38 +01:00
< / span > < span id = "explode_to_unnest-294" > < a href = "#explode_to_unnest-294" > < span class = "linenos" > 294< / span > < / a >
2025-02-13 21:16:46 +01:00
< / span > < span id = "explode_to_unnest-295" > < a href = "#explode_to_unnest-295" > < span class = "linenos" > 295< / span > < / a > < span class = "k" > if< / span > < span class = "n" > arrays< / span > < span class = "p" > :< / span >
< / span > < span id = "explode_to_unnest-296" > < a href = "#explode_to_unnest-296" > < span class = "linenos" > 296< / span > < / a > < span class = "n" > end< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Condition< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Greatest< / span > < span class = "p" > (< / span > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > arrays< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ],< / span > < span class = "n" > expressions< / span > < span class = "o" > =< / span > < span class = "n" > arrays< / span > < span class = "p" > [< / span > < span class = "mi" > 1< / span > < span class = "p" > :])< / span >
< / span > < span id = "explode_to_unnest-297" > < a href = "#explode_to_unnest-297" > < span class = "linenos" > 297< / span > < / a >
< / span > < span id = "explode_to_unnest-298" > < a href = "#explode_to_unnest-298" > < span class = "linenos" > 298< / span > < / a > < span class = "k" > if< / span > < span class = "n" > index_offset< / span > < span class = "o" > !=< / span > < span class = "mi" > 1< / span > < span class = "p" > :< / span >
< / span > < span id = "explode_to_unnest-299" > < a href = "#explode_to_unnest-299" > < span class = "linenos" > 299< / span > < / a > < span class = "n" > end< / span > < span class = "o" > =< / span > < span class = "n" > end< / span > < span class = "o" > -< / span > < span class = "p" > (< / span > < span class = "mi" > 1< / span > < span class = "o" > -< / span > < span class = "n" > index_offset< / span > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-300" > < a href = "#explode_to_unnest-300" > < span class = "linenos" > 300< / span > < / a > < span class = "n" > series< / span > < span class = "o" > .< / span > < span class = "n" > expressions< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span > < span class = "s2" > " end" < / span > < span class = "p" > ,< / span > < span class = "n" > end< / span > < span class = "p" > )< / span >
< / span > < span id = "explode_to_unnest-301" > < a href = "#explode_to_unnest-301" > < span class = "linenos" > 301< / span > < / a >
< / span > < span id = "explode_to_unnest-302" > < a href = "#explode_to_unnest-302" > < span class = "linenos" > 302< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
< / span > < span id = "explode_to_unnest-303" > < a href = "#explode_to_unnest-303" > < span class = "linenos" > 303< / span > < / a >
< / span > < span id = "explode_to_unnest-304" > < a href = "#explode_to_unnest-304" > < span class = "linenos" > 304< / span > < / a > < span class = "k" > return< / span > < span class = "n" > _explode_to_unnest< / span >
2025-02-13 15:51:35 +01:00
< / span > < / pre > < / div >
2025-02-13 21:16:46 +01:00
< div class = "docstring" > < p > Convert explode/posexplode into unnest.< / p >
2025-02-13 21:15:38 +01:00
< / div >
2025-02-13 15:51:35 +01:00
2025-02-13 21:03:05 +01:00
< / section >
< section id = "PERCENTILES" >
< div class = "attr variable" >
< span class = "name" > PERCENTILES< / span > =
< span class = "default_value" > (< class ' < a href = "expressions.html#PercentileCont" > sqlglot.expressions.PercentileCont< / a > ' > , < class ' < a href = "expressions.html#PercentileDisc" > sqlglot.expressions.PercentileDisc< / a > ' > )< / span >
< / div >
< a class = "headerlink" href = "#PERCENTILES" > < / a >
< / section >
< section id = "add_within_group_for_percentiles" >
< input id = "add_within_group_for_percentiles-view-source" class = "view-source-toggle-state" type = "checkbox" aria-hidden = "true" tabindex = "-1" >
< div class = "attr function" >
< span class = "def" > def< / span >
< span class = "name" > add_within_group_for_percentiles< / span > < span class = "signature pdoc-code multiline" > (< span class = "param" > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > < / span > < span class = "return-annotation" > ) -> < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > :< / span > < / span >
< label class = "view-source-button" for = "add_within_group_for_percentiles-view-source" > < span > View Source< / span > < / label >
< / div >
< a class = "headerlink" href = "#add_within_group_for_percentiles" > < / a >
2025-02-13 21:16:46 +01:00
< div class = "pdoc-code codehilite" > < pre > < span > < / span > < span id = "add_within_group_for_percentiles-310" > < a href = "#add_within_group_for_percentiles-310" > < span class = "linenos" > 310< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > add_within_group_for_percentiles< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "add_within_group_for_percentiles-311" > < a href = "#add_within_group_for_percentiles-311" > < span class = "linenos" > 311< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " Transforms percentiles by adding a WITHIN GROUP clause to them." " " < / span >
< / span > < span id = "add_within_group_for_percentiles-312" > < a href = "#add_within_group_for_percentiles-312" > < span class = "linenos" > 312< / span > < / a > < span class = "k" > if< / span > < span class = "p" > (< / span >
< / span > < span id = "add_within_group_for_percentiles-313" > < a href = "#add_within_group_for_percentiles-313" > < span class = "linenos" > 313< / span > < / a > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > PERCENTILES< / span > < span class = "p" > )< / span >
< / span > < span id = "add_within_group_for_percentiles-314" > < a href = "#add_within_group_for_percentiles-314" > < span class = "linenos" > 314< / span > < / a > < span class = "ow" > and< / span > < span class = "ow" > not< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > parent< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > WithinGroup< / span > < span class = "p" > )< / span >
< / span > < span id = "add_within_group_for_percentiles-315" > < a href = "#add_within_group_for_percentiles-315" > < span class = "linenos" > 315< / span > < / a > < span class = "ow" > and< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > expression< / span >
< / span > < span id = "add_within_group_for_percentiles-316" > < a href = "#add_within_group_for_percentiles-316" > < span class = "linenos" > 316< / span > < / a > < span class = "p" > ):< / span >
< / span > < span id = "add_within_group_for_percentiles-317" > < a href = "#add_within_group_for_percentiles-317" > < span class = "linenos" > 317< / span > < / a > < span class = "n" > column< / span > < span class = "o" > =< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > this< / span > < span class = "o" > .< / span > < span class = "n" > pop< / span > < span class = "p" > ()< / span >
< / span > < span id = "add_within_group_for_percentiles-318" > < a href = "#add_within_group_for_percentiles-318" > < span class = "linenos" > 318< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span > < span class = "s2" > " this" < / span > < span class = "p" > ,< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > pop< / span > < span class = "p" > ())< / span >
< / span > < span id = "add_within_group_for_percentiles-319" > < a href = "#add_within_group_for_percentiles-319" > < span class = "linenos" > 319< / span > < / a > < span class = "n" > order< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Order< / span > < span class = "p" > (< / span > < span class = "n" > expressions< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Ordered< / span > < span class = "p" > (< / span > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > column< / span > < span class = "p" > )])< / span >
< / span > < span id = "add_within_group_for_percentiles-320" > < a href = "#add_within_group_for_percentiles-320" > < span class = "linenos" > 320< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > WithinGroup< / span > < span class = "p" > (< / span > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > expression< / span > < span class = "o" > =< / span > < span class = "n" > order< / span > < span class = "p" > )< / span >
< / span > < span id = "add_within_group_for_percentiles-321" > < a href = "#add_within_group_for_percentiles-321" > < span class = "linenos" > 321< / span > < / a >
< / span > < span id = "add_within_group_for_percentiles-322" > < a href = "#add_within_group_for_percentiles-322" > < span class = "linenos" > 322< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
2025-02-13 21:03:05 +01:00
< / span > < / pre > < / div >
2025-02-13 21:15:38 +01:00
< div class = "docstring" > < p > Transforms percentiles by adding a WITHIN GROUP clause to them.< / p >
< / div >
2025-02-13 15:51:35 +01:00
2025-02-13 15:56:32 +01:00
< / section >
< section id = "remove_within_group_for_percentiles" >
< input id = "remove_within_group_for_percentiles-view-source" class = "view-source-toggle-state" type = "checkbox" aria-hidden = "true" tabindex = "-1" >
< div class = "attr function" >
< span class = "def" > def< / span >
< span class = "name" > remove_within_group_for_percentiles< / span > < span class = "signature pdoc-code multiline" > (< span class = "param" > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > < / span > < span class = "return-annotation" > ) -> < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > :< / span > < / span >
< label class = "view-source-button" for = "remove_within_group_for_percentiles-view-source" > < span > View Source< / span > < / label >
< / div >
< a class = "headerlink" href = "#remove_within_group_for_percentiles" > < / a >
2025-02-13 21:16:46 +01:00
< div class = "pdoc-code codehilite" > < pre > < span > < / span > < span id = "remove_within_group_for_percentiles-325" > < a href = "#remove_within_group_for_percentiles-325" > < span class = "linenos" > 325< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > remove_within_group_for_percentiles< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "remove_within_group_for_percentiles-326" > < a href = "#remove_within_group_for_percentiles-326" > < span class = "linenos" > 326< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " Transforms percentiles by getting rid of their corresponding WITHIN GROUP clause." " " < / span >
< / span > < span id = "remove_within_group_for_percentiles-327" > < a href = "#remove_within_group_for_percentiles-327" > < span class = "linenos" > 327< / span > < / a > < span class = "k" > if< / span > < span class = "p" > (< / span >
< / span > < span id = "remove_within_group_for_percentiles-328" > < a href = "#remove_within_group_for_percentiles-328" > < span class = "linenos" > 328< / span > < / a > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > WithinGroup< / span > < span class = "p" > )< / span >
< / span > < span id = "remove_within_group_for_percentiles-329" > < a href = "#remove_within_group_for_percentiles-329" > < span class = "linenos" > 329< / span > < / a > < span class = "ow" > and< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > this< / span > < span class = "p" > ,< / span > < span class = "n" > PERCENTILES< / span > < span class = "p" > )< / span >
< / span > < span id = "remove_within_group_for_percentiles-330" > < a href = "#remove_within_group_for_percentiles-330" > < span class = "linenos" > 330< / span > < / a > < span class = "ow" > and< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Order< / span > < span class = "p" > )< / span >
< / span > < span id = "remove_within_group_for_percentiles-331" > < a href = "#remove_within_group_for_percentiles-331" > < span class = "linenos" > 331< / span > < / a > < span class = "p" > ):< / span >
< / span > < span id = "remove_within_group_for_percentiles-332" > < a href = "#remove_within_group_for_percentiles-332" > < span class = "linenos" > 332< / span > < / a > < span class = "n" > quantile< / span > < span class = "o" > =< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > this< / span > < span class = "o" > .< / span > < span class = "n" > this< / span >
< / span > < span id = "remove_within_group_for_percentiles-333" > < a href = "#remove_within_group_for_percentiles-333" > < span class = "linenos" > 333< / span > < / a > < span class = "n" > input_value< / span > < span class = "o" > =< / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > cast< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Ordered< / span > < span class = "p" > ,< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > find< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Ordered< / span > < span class = "p" > ))< / span > < span class = "o" > .< / span > < span class = "n" > this< / span >
< / span > < span id = "remove_within_group_for_percentiles-334" > < a href = "#remove_within_group_for_percentiles-334" > < span class = "linenos" > 334< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > replace< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > ApproxQuantile< / span > < span class = "p" > (< / span > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > input_value< / span > < span class = "p" > ,< / span > < span class = "n" > quantile< / span > < span class = "o" > =< / span > < span class = "n" > quantile< / span > < span class = "p" > ))< / span >
< / span > < span id = "remove_within_group_for_percentiles-335" > < a href = "#remove_within_group_for_percentiles-335" > < span class = "linenos" > 335< / span > < / a >
< / span > < span id = "remove_within_group_for_percentiles-336" > < a href = "#remove_within_group_for_percentiles-336" > < span class = "linenos" > 336< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
2025-02-13 15:56:32 +01:00
< / span > < / pre > < / div >
2025-02-13 21:15:38 +01:00
< div class = "docstring" > < p > Transforms percentiles by getting rid of their corresponding WITHIN GROUP clause.< / p >
< / div >
2025-02-13 15:56:32 +01:00
< / section >
< section id = "add_recursive_cte_column_names" >
< input id = "add_recursive_cte_column_names-view-source" class = "view-source-toggle-state" type = "checkbox" aria-hidden = "true" tabindex = "-1" >
< div class = "attr function" >
< span class = "def" > def< / span >
< span class = "name" > add_recursive_cte_column_names< / span > < span class = "signature pdoc-code multiline" > (< span class = "param" > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > < / span > < span class = "return-annotation" > ) -> < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > :< / span > < / span >
< label class = "view-source-button" for = "add_recursive_cte_column_names-view-source" > < span > View Source< / span > < / label >
< / div >
< a class = "headerlink" href = "#add_recursive_cte_column_names" > < / a >
2025-02-13 21:16:46 +01:00
< div class = "pdoc-code codehilite" > < pre > < span > < / span > < span id = "add_recursive_cte_column_names-339" > < a href = "#add_recursive_cte_column_names-339" > < span class = "linenos" > 339< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > add_recursive_cte_column_names< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "add_recursive_cte_column_names-340" > < a href = "#add_recursive_cte_column_names-340" > < span class = "linenos" > 340< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " Uses projection output names in recursive CTE definitions to define the CTEs' columns." " " < / span >
< / span > < span id = "add_recursive_cte_column_names-341" > < a href = "#add_recursive_cte_column_names-341" > < span class = "linenos" > 341< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > With< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > recursive< / span > < span class = "p" > :< / span >
< / span > < span id = "add_recursive_cte_column_names-342" > < a href = "#add_recursive_cte_column_names-342" > < span class = "linenos" > 342< / span > < / a > < span class = "n" > next_name< / span > < span class = "o" > =< / span > < span class = "n" > name_sequence< / span > < span class = "p" > (< / span > < span class = "s2" > " _c_" < / span > < span class = "p" > )< / span >
< / span > < span id = "add_recursive_cte_column_names-343" > < a href = "#add_recursive_cte_column_names-343" > < span class = "linenos" > 343< / span > < / a >
< / span > < span id = "add_recursive_cte_column_names-344" > < a href = "#add_recursive_cte_column_names-344" > < span class = "linenos" > 344< / span > < / a > < span class = "k" > for< / span > < span class = "n" > cte< / span > < span class = "ow" > in< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > expressions< / span > < span class = "p" > :< / span >
< / span > < span id = "add_recursive_cte_column_names-345" > < a href = "#add_recursive_cte_column_names-345" > < span class = "linenos" > 345< / span > < / a > < span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > cte< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " alias" < / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > columns< / span > < span class = "p" > :< / span >
< / span > < span id = "add_recursive_cte_column_names-346" > < a href = "#add_recursive_cte_column_names-346" > < span class = "linenos" > 346< / span > < / a > < span class = "n" > query< / span > < span class = "o" > =< / span > < span class = "n" > cte< / span > < span class = "o" > .< / span > < span class = "n" > this< / span >
< / span > < span id = "add_recursive_cte_column_names-347" > < a href = "#add_recursive_cte_column_names-347" > < span class = "linenos" > 347< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > query< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Union< / span > < span class = "p" > ):< / span >
< / span > < span id = "add_recursive_cte_column_names-348" > < a href = "#add_recursive_cte_column_names-348" > < span class = "linenos" > 348< / span > < / a > < span class = "n" > query< / span > < span class = "o" > =< / span > < span class = "n" > query< / span > < span class = "o" > .< / span > < span class = "n" > this< / span >
< / span > < span id = "add_recursive_cte_column_names-349" > < a href = "#add_recursive_cte_column_names-349" > < span class = "linenos" > 349< / span > < / a >
< / span > < span id = "add_recursive_cte_column_names-350" > < a href = "#add_recursive_cte_column_names-350" > < span class = "linenos" > 350< / span > < / a > < span class = "n" > cte< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " alias" < / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span >
< / span > < span id = "add_recursive_cte_column_names-351" > < a href = "#add_recursive_cte_column_names-351" > < span class = "linenos" > 351< / span > < / a > < span class = "s2" > " columns" < / span > < span class = "p" > ,< / span >
< / span > < span id = "add_recursive_cte_column_names-352" > < a href = "#add_recursive_cte_column_names-352" > < span class = "linenos" > 352< / span > < / a > < span class = "p" > [< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > to_identifier< / span > < span class = "p" > (< / span > < span class = "n" > s< / span > < span class = "o" > .< / span > < span class = "n" > alias_or_name< / span > < span class = "ow" > or< / span > < span class = "n" > next_name< / span > < span class = "p" > ())< / span > < span class = "k" > for< / span > < span class = "n" > s< / span > < span class = "ow" > in< / span > < span class = "n" > query< / span > < span class = "o" > .< / span > < span class = "n" > selects< / span > < span class = "p" > ],< / span >
< / span > < span id = "add_recursive_cte_column_names-353" > < a href = "#add_recursive_cte_column_names-353" > < span class = "linenos" > 353< / span > < / a > < span class = "p" > )< / span >
< / span > < span id = "add_recursive_cte_column_names-354" > < a href = "#add_recursive_cte_column_names-354" > < span class = "linenos" > 354< / span > < / a >
< / span > < span id = "add_recursive_cte_column_names-355" > < a href = "#add_recursive_cte_column_names-355" > < span class = "linenos" > 355< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
2025-02-13 15:58:03 +01:00
< / span > < / pre > < / div >
2025-02-13 21:15:38 +01:00
< div class = "docstring" > < p > Uses projection output names in recursive CTE definitions to define the CTEs' columns.< / p >
< / div >
2025-02-13 15:58:03 +01:00
< / section >
< section id = "epoch_cast_to_ts" >
< input id = "epoch_cast_to_ts-view-source" class = "view-source-toggle-state" type = "checkbox" aria-hidden = "true" tabindex = "-1" >
< div class = "attr function" >
< span class = "def" > def< / span >
< span class = "name" > epoch_cast_to_ts< / span > < span class = "signature pdoc-code multiline" > (< span class = "param" > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > < / span > < span class = "return-annotation" > ) -> < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > :< / span > < / span >
< label class = "view-source-button" for = "epoch_cast_to_ts-view-source" > < span > View Source< / span > < / label >
< / div >
< a class = "headerlink" href = "#epoch_cast_to_ts" > < / a >
2025-02-13 21:16:46 +01:00
< div class = "pdoc-code codehilite" > < pre > < span > < / span > < span id = "epoch_cast_to_ts-358" > < a href = "#epoch_cast_to_ts-358" > < span class = "linenos" > 358< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > epoch_cast_to_ts< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "epoch_cast_to_ts-359" > < a href = "#epoch_cast_to_ts-359" > < span class = "linenos" > 359< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " Replace ' epoch' in casts by the equivalent date literal." " " < / span >
< / span > < span id = "epoch_cast_to_ts-360" > < a href = "#epoch_cast_to_ts-360" > < span class = "linenos" > 360< / span > < / a > < span class = "k" > if< / span > < span class = "p" > (< / span >
< / span > < span id = "epoch_cast_to_ts-361" > < a href = "#epoch_cast_to_ts-361" > < span class = "linenos" > 361< / span > < / a > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Cast< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > TryCast< / span > < span class = "p" > ))< / span >
< / span > < span id = "epoch_cast_to_ts-362" > < a href = "#epoch_cast_to_ts-362" > < span class = "linenos" > 362< / span > < / a > < span class = "ow" > and< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "o" > .< / span > < span class = "n" > lower< / span > < span class = "p" > ()< / span > < span class = "o" > ==< / span > < span class = "s2" > " epoch" < / span >
< / span > < span id = "epoch_cast_to_ts-363" > < a href = "#epoch_cast_to_ts-363" > < span class = "linenos" > 363< / span > < / a > < span class = "ow" > and< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > to< / span > < span class = "o" > .< / span > < span class = "n" > this< / span > < span class = "ow" > in< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > DataType< / span > < span class = "o" > .< / span > < span class = "n" > TEMPORAL_TYPES< / span >
< / span > < span id = "epoch_cast_to_ts-364" > < a href = "#epoch_cast_to_ts-364" > < span class = "linenos" > 364< / span > < / a > < span class = "p" > ):< / span >
< / span > < span id = "epoch_cast_to_ts-365" > < a href = "#epoch_cast_to_ts-365" > < span class = "linenos" > 365< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > this< / span > < span class = "o" > .< / span > < span class = "n" > replace< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Literal< / span > < span class = "o" > .< / span > < span class = "n" > string< / span > < span class = "p" > (< / span > < span class = "s2" > " 1970-01-01 00:00:00" < / span > < span class = "p" > ))< / span >
< / span > < span id = "epoch_cast_to_ts-366" > < a href = "#epoch_cast_to_ts-366" > < span class = "linenos" > 366< / span > < / a >
< / span > < span id = "epoch_cast_to_ts-367" > < a href = "#epoch_cast_to_ts-367" > < span class = "linenos" > 367< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
2025-02-13 21:03:05 +01:00
< / span > < / pre > < / div >
2025-02-13 21:15:38 +01:00
< div class = "docstring" > < p > Replace 'epoch' in casts by the equivalent date literal.< / p >
< / div >
2025-02-13 21:03:05 +01:00
< / section >
< section id = "eliminate_semi_and_anti_joins" >
< input id = "eliminate_semi_and_anti_joins-view-source" class = "view-source-toggle-state" type = "checkbox" aria-hidden = "true" tabindex = "-1" >
< div class = "attr function" >
< span class = "def" > def< / span >
< span class = "name" > eliminate_semi_and_anti_joins< / span > < span class = "signature pdoc-code multiline" > (< span class = "param" > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > < / span > < span class = "return-annotation" > ) -> < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > :< / span > < / span >
< label class = "view-source-button" for = "eliminate_semi_and_anti_joins-view-source" > < span > View Source< / span > < / label >
< / div >
< a class = "headerlink" href = "#eliminate_semi_and_anti_joins" > < / a >
2025-02-13 21:16:46 +01:00
< div class = "pdoc-code codehilite" > < pre > < span > < / span > < span id = "eliminate_semi_and_anti_joins-370" > < a href = "#eliminate_semi_and_anti_joins-370" > < span class = "linenos" > 370< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > eliminate_semi_and_anti_joins< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "eliminate_semi_and_anti_joins-371" > < a href = "#eliminate_semi_and_anti_joins-371" > < span class = "linenos" > 371< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " Convert SEMI and ANTI joins into equivalent forms that use EXIST instead." " " < / span >
< / span > < span id = "eliminate_semi_and_anti_joins-372" > < a href = "#eliminate_semi_and_anti_joins-372" > < span class = "linenos" > 372< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Select< / span > < span class = "p" > ):< / span >
< / span > < span id = "eliminate_semi_and_anti_joins-373" > < a href = "#eliminate_semi_and_anti_joins-373" > < span class = "linenos" > 373< / span > < / a > < span class = "k" > for< / span > < span class = "n" > join< / span > < span class = "ow" > in< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " joins" < / span > < span class = "p" > )< / span > < span class = "ow" > or< / span > < span class = "p" > []:< / span >
< / span > < span id = "eliminate_semi_and_anti_joins-374" > < a href = "#eliminate_semi_and_anti_joins-374" > < span class = "linenos" > 374< / span > < / a > < span class = "n" > on< / span > < span class = "o" > =< / span > < span class = "n" > join< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " on" < / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_semi_and_anti_joins-375" > < a href = "#eliminate_semi_and_anti_joins-375" > < span class = "linenos" > 375< / span > < / a > < span class = "k" > if< / span > < span class = "n" > on< / span > < span class = "ow" > and< / span > < span class = "n" > join< / span > < span class = "o" > .< / span > < span class = "n" > kind< / span > < span class = "ow" > in< / span > < span class = "p" > (< / span > < span class = "s2" > " SEMI" < / span > < span class = "p" > ,< / span > < span class = "s2" > " ANTI" < / span > < span class = "p" > ):< / span >
< / span > < span id = "eliminate_semi_and_anti_joins-376" > < a href = "#eliminate_semi_and_anti_joins-376" > < span class = "linenos" > 376< / span > < / a > < span class = "n" > subquery< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > select< / span > < span class = "p" > (< / span > < span class = "s2" > " 1" < / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > from_< / span > < span class = "p" > (< / span > < span class = "n" > join< / span > < span class = "o" > .< / span > < span class = "n" > this< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > where< / span > < span class = "p" > (< / span > < span class = "n" > on< / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_semi_and_anti_joins-377" > < a href = "#eliminate_semi_and_anti_joins-377" > < span class = "linenos" > 377< / span > < / a > < span class = "n" > exists< / span > < span class = "o" > =< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Exists< / span > < span class = "p" > (< / span > < span class = "n" > this< / span > < span class = "o" > =< / span > < span class = "n" > subquery< / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_semi_and_anti_joins-378" > < a href = "#eliminate_semi_and_anti_joins-378" > < span class = "linenos" > 378< / span > < / a > < span class = "k" > if< / span > < span class = "n" > join< / span > < span class = "o" > .< / span > < span class = "n" > kind< / span > < span class = "o" > ==< / span > < span class = "s2" > " ANTI" < / span > < span class = "p" > :< / span >
< / span > < span id = "eliminate_semi_and_anti_joins-379" > < a href = "#eliminate_semi_and_anti_joins-379" > < span class = "linenos" > 379< / span > < / a > < span class = "n" > exists< / span > < span class = "o" > =< / span > < span class = "n" > exists< / span > < span class = "o" > .< / span > < span class = "n" > not_< / span > < span class = "p" > (< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_semi_and_anti_joins-380" > < a href = "#eliminate_semi_and_anti_joins-380" > < span class = "linenos" > 380< / span > < / a >
< / span > < span id = "eliminate_semi_and_anti_joins-381" > < a href = "#eliminate_semi_and_anti_joins-381" > < span class = "linenos" > 381< / span > < / a > < span class = "n" > join< / span > < span class = "o" > .< / span > < span class = "n" > pop< / span > < span class = "p" > ()< / span >
< / span > < span id = "eliminate_semi_and_anti_joins-382" > < a href = "#eliminate_semi_and_anti_joins-382" > < span class = "linenos" > 382< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > where< / span > < span class = "p" > (< / span > < span class = "n" > exists< / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_semi_and_anti_joins-383" > < a href = "#eliminate_semi_and_anti_joins-383" > < span class = "linenos" > 383< / span > < / a >
< / span > < span id = "eliminate_semi_and_anti_joins-384" > < a href = "#eliminate_semi_and_anti_joins-384" > < span class = "linenos" > 384< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
2025-02-13 15:56:32 +01:00
< / span > < / pre > < / div >
2025-02-13 21:15:38 +01:00
< div class = "docstring" > < p > Convert SEMI and ANTI joins into equivalent forms that use EXIST instead.< / p >
< / div >
< / section >
< section id = "eliminate_full_outer_join" >
< input id = "eliminate_full_outer_join-view-source" class = "view-source-toggle-state" type = "checkbox" aria-hidden = "true" tabindex = "-1" >
< div class = "attr function" >
< span class = "def" > def< / span >
< span class = "name" > eliminate_full_outer_join< / span > < span class = "signature pdoc-code multiline" > (< span class = "param" > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > < / span > < span class = "return-annotation" > ) -> < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > :< / span > < / span >
< label class = "view-source-button" for = "eliminate_full_outer_join-view-source" > < span > View Source< / span > < / label >
< / div >
< a class = "headerlink" href = "#eliminate_full_outer_join" > < / a >
2025-02-13 21:16:46 +01:00
< div class = "pdoc-code codehilite" > < pre > < span > < / span > < span id = "eliminate_full_outer_join-387" > < a href = "#eliminate_full_outer_join-387" > < span class = "linenos" > 387< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > eliminate_full_outer_join< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "eliminate_full_outer_join-388" > < a href = "#eliminate_full_outer_join-388" > < span class = "linenos" > 388< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " < / span >
< / span > < span id = "eliminate_full_outer_join-389" > < a href = "#eliminate_full_outer_join-389" > < span class = "linenos" > 389< / span > < / a > < span class = "sd" > Converts a query with a FULL OUTER join to a union of identical queries that< / span >
< / span > < span id = "eliminate_full_outer_join-390" > < a href = "#eliminate_full_outer_join-390" > < span class = "linenos" > 390< / span > < / a > < span class = "sd" > use LEFT/RIGHT OUTER joins instead. This transformation currently only works< / span >
< / span > < span id = "eliminate_full_outer_join-391" > < a href = "#eliminate_full_outer_join-391" > < span class = "linenos" > 391< / span > < / a > < span class = "sd" > for queries that have a single FULL OUTER join.< / span >
< / span > < span id = "eliminate_full_outer_join-392" > < a href = "#eliminate_full_outer_join-392" > < span class = "linenos" > 392< / span > < / a > < span class = "sd" > " " " < / span >
< / span > < span id = "eliminate_full_outer_join-393" > < a href = "#eliminate_full_outer_join-393" > < span class = "linenos" > 393< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Select< / span > < span class = "p" > ):< / span >
< / span > < span id = "eliminate_full_outer_join-394" > < a href = "#eliminate_full_outer_join-394" > < span class = "linenos" > 394< / span > < / a > < span class = "n" > full_outer_joins< / span > < span class = "o" > =< / span > < span class = "p" > [< / span >
< / span > < span id = "eliminate_full_outer_join-395" > < a href = "#eliminate_full_outer_join-395" > < span class = "linenos" > 395< / span > < / a > < span class = "p" > (< / span > < span class = "n" > index< / span > < span class = "p" > ,< / span > < span class = "n" > join< / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_full_outer_join-396" > < a href = "#eliminate_full_outer_join-396" > < span class = "linenos" > 396< / span > < / a > < span class = "k" > for< / span > < span class = "n" > index< / span > < span class = "p" > ,< / span > < span class = "n" > join< / span > < span class = "ow" > in< / span > < span class = "nb" > enumerate< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " joins" < / span > < span class = "p" > )< / span > < span class = "ow" > or< / span > < span class = "p" > [])< / span >
< / span > < span id = "eliminate_full_outer_join-397" > < a href = "#eliminate_full_outer_join-397" > < span class = "linenos" > 397< / span > < / a > < span class = "k" > if< / span > < span class = "n" > join< / span > < span class = "o" > .< / span > < span class = "n" > side< / span > < span class = "o" > ==< / span > < span class = "s2" > " FULL" < / span >
< / span > < span id = "eliminate_full_outer_join-398" > < a href = "#eliminate_full_outer_join-398" > < span class = "linenos" > 398< / span > < / a > < span class = "p" > ]< / span >
< / span > < span id = "eliminate_full_outer_join-399" > < a href = "#eliminate_full_outer_join-399" > < span class = "linenos" > 399< / span > < / a >
< / span > < span id = "eliminate_full_outer_join-400" > < a href = "#eliminate_full_outer_join-400" > < span class = "linenos" > 400< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > full_outer_joins< / span > < span class = "p" > )< / span > < span class = "o" > ==< / span > < span class = "mi" > 1< / span > < span class = "p" > :< / span >
< / span > < span id = "eliminate_full_outer_join-401" > < a href = "#eliminate_full_outer_join-401" > < span class = "linenos" > 401< / span > < / a > < span class = "n" > expression_copy< / span > < span class = "o" > =< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > copy< / span > < span class = "p" > ()< / span >
< / span > < span id = "eliminate_full_outer_join-402" > < a href = "#eliminate_full_outer_join-402" > < span class = "linenos" > 402< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span > < span class = "s2" > " limit" < / span > < span class = "p" > ,< / span > < span class = "kc" > None< / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_full_outer_join-403" > < a href = "#eliminate_full_outer_join-403" > < span class = "linenos" > 403< / span > < / a > < span class = "n" > index< / span > < span class = "p" > ,< / span > < span class = "n" > full_outer_join< / span > < span class = "o" > =< / span > < span class = "n" > full_outer_joins< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span >
< / span > < span id = "eliminate_full_outer_join-404" > < a href = "#eliminate_full_outer_join-404" > < span class = "linenos" > 404< / span > < / a > < span class = "n" > full_outer_join< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span > < span class = "s2" > " side" < / span > < span class = "p" > ,< / span > < span class = "s2" > " left" < / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_full_outer_join-405" > < a href = "#eliminate_full_outer_join-405" > < span class = "linenos" > 405< / span > < / a > < span class = "n" > expression_copy< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "s2" > " joins" < / span > < span class = "p" > ][< / span > < span class = "n" > index< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span > < span class = "s2" > " side" < / span > < span class = "p" > ,< / span > < span class = "s2" > " right" < / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_full_outer_join-406" > < a href = "#eliminate_full_outer_join-406" > < span class = "linenos" > 406< / span > < / a > < span class = "n" > expression_copy< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > pop< / span > < span class = "p" > (< / span > < span class = "s2" > " with" < / span > < span class = "p" > ,< / span > < span class = "kc" > None< / span > < span class = "p" > )< / span > < span class = "c1" > # remove CTEs from RIGHT side< / span >
< / span > < span id = "eliminate_full_outer_join-407" > < a href = "#eliminate_full_outer_join-407" > < span class = "linenos" > 407< / span > < / a >
< / span > < span id = "eliminate_full_outer_join-408" > < a href = "#eliminate_full_outer_join-408" > < span class = "linenos" > 408< / span > < / a > < span class = "k" > return< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > union< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > expression_copy< / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< / span > < span id = "eliminate_full_outer_join-409" > < a href = "#eliminate_full_outer_join-409" > < span class = "linenos" > 409< / span > < / a >
< / span > < span id = "eliminate_full_outer_join-410" > < a href = "#eliminate_full_outer_join-410" > < span class = "linenos" > 410< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
2025-02-13 21:15:38 +01:00
< / span > < / pre > < / div >
< div class = "docstring" > < p > Converts a query with a FULL OUTER join to a union of identical queries that
use LEFT/RIGHT OUTER joins instead. This transformation currently only works
for queries that have a single FULL OUTER join.< / p >
< / div >
< / section >
< section id = "move_ctes_to_top_level" >
< input id = "move_ctes_to_top_level-view-source" class = "view-source-toggle-state" type = "checkbox" aria-hidden = "true" tabindex = "-1" >
< div class = "attr function" >
< span class = "def" > def< / span >
< span class = "name" > move_ctes_to_top_level< / span > < span class = "signature pdoc-code multiline" > (< span class = "param" > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > < / span > < span class = "return-annotation" > ) -> < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > :< / span > < / span >
< label class = "view-source-button" for = "move_ctes_to_top_level-view-source" > < span > View Source< / span > < / label >
< / div >
< a class = "headerlink" href = "#move_ctes_to_top_level" > < / a >
2025-02-13 21:16:46 +01:00
< div class = "pdoc-code codehilite" > < pre > < span > < / span > < span id = "move_ctes_to_top_level-413" > < a href = "#move_ctes_to_top_level-413" > < span class = "linenos" > 413< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > move_ctes_to_top_level< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "move_ctes_to_top_level-414" > < a href = "#move_ctes_to_top_level-414" > < span class = "linenos" > 414< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " < / span >
< / span > < span id = "move_ctes_to_top_level-415" > < a href = "#move_ctes_to_top_level-415" > < span class = "linenos" > 415< / span > < / a > < span class = "sd" > Some dialects (e.g. Hive, T-SQL, Spark prior to version 3) only allow CTEs to be< / span >
< / span > < span id = "move_ctes_to_top_level-416" > < a href = "#move_ctes_to_top_level-416" > < span class = "linenos" > 416< / span > < / a > < span class = "sd" > defined at the top-level, so for example queries like:< / span >
< / span > < span id = "move_ctes_to_top_level-417" > < a href = "#move_ctes_to_top_level-417" > < span class = "linenos" > 417< / span > < / a >
< / span > < span id = "move_ctes_to_top_level-418" > < a href = "#move_ctes_to_top_level-418" > < span class = "linenos" > 418< / span > < / a > < span class = "sd" > SELECT * FROM (WITH t(c) AS (SELECT 1) SELECT * FROM t) AS subq< / span >
< / span > < span id = "move_ctes_to_top_level-419" > < a href = "#move_ctes_to_top_level-419" > < span class = "linenos" > 419< / span > < / a >
< / span > < span id = "move_ctes_to_top_level-420" > < a href = "#move_ctes_to_top_level-420" > < span class = "linenos" > 420< / span > < / a > < span class = "sd" > are invalid in those dialects. This transformation can be used to ensure all CTEs are< / span >
< / span > < span id = "move_ctes_to_top_level-421" > < a href = "#move_ctes_to_top_level-421" > < span class = "linenos" > 421< / span > < / a > < span class = "sd" > moved to the top level so that the final SQL code is valid from a syntax standpoint.< / span >
< / span > < span id = "move_ctes_to_top_level-422" > < a href = "#move_ctes_to_top_level-422" > < span class = "linenos" > 422< / span > < / a >
< / span > < span id = "move_ctes_to_top_level-423" > < a href = "#move_ctes_to_top_level-423" > < span class = "linenos" > 423< / span > < / a > < span class = "sd" > TODO: handle name clashes whilst moving CTEs (it can get quite tricky & costly).< / span >
< / span > < span id = "move_ctes_to_top_level-424" > < a href = "#move_ctes_to_top_level-424" > < span class = "linenos" > 424< / span > < / a > < span class = "sd" > " " " < / span >
< / span > < span id = "move_ctes_to_top_level-425" > < a href = "#move_ctes_to_top_level-425" > < span class = "linenos" > 425< / span > < / a > < span class = "n" > top_level_with< / span > < span class = "o" > =< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > args< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " with" < / span > < span class = "p" > )< / span >
< / span > < span id = "move_ctes_to_top_level-426" > < a href = "#move_ctes_to_top_level-426" > < span class = "linenos" > 426< / span > < / a > < span class = "k" > for< / span > < span class = "n" > node< / span > < span class = "ow" > in< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > find_all< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > With< / span > < span class = "p" > ):< / span >
< / span > < span id = "move_ctes_to_top_level-427" > < a href = "#move_ctes_to_top_level-427" > < span class = "linenos" > 427< / span > < / a > < span class = "k" > if< / span > < span class = "n" > node< / span > < span class = "o" > .< / span > < span class = "n" > parent< / span > < span class = "ow" > is< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span >
< / span > < span id = "move_ctes_to_top_level-428" > < a href = "#move_ctes_to_top_level-428" > < span class = "linenos" > 428< / span > < / a > < span class = "k" > continue< / span >
< / span > < span id = "move_ctes_to_top_level-429" > < a href = "#move_ctes_to_top_level-429" > < span class = "linenos" > 429< / span > < / a >
< / span > < span id = "move_ctes_to_top_level-430" > < a href = "#move_ctes_to_top_level-430" > < span class = "linenos" > 430< / span > < / a > < span class = "n" > inner_with< / span > < span class = "o" > =< / span > < span class = "n" > node< / span > < span class = "o" > .< / span > < span class = "n" > pop< / span > < span class = "p" > ()< / span >
< / span > < span id = "move_ctes_to_top_level-431" > < a href = "#move_ctes_to_top_level-431" > < span class = "linenos" > 431< / span > < / a > < span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > top_level_with< / span > < span class = "p" > :< / span >
< / span > < span id = "move_ctes_to_top_level-432" > < a href = "#move_ctes_to_top_level-432" > < span class = "linenos" > 432< / span > < / a > < span class = "n" > top_level_with< / span > < span class = "o" > =< / span > < span class = "n" > inner_with< / span >
< / span > < span id = "move_ctes_to_top_level-433" > < a href = "#move_ctes_to_top_level-433" > < span class = "linenos" > 433< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span > < span class = "s2" > " with" < / span > < span class = "p" > ,< / span > < span class = "n" > top_level_with< / span > < span class = "p" > )< / span >
< / span > < span id = "move_ctes_to_top_level-434" > < a href = "#move_ctes_to_top_level-434" > < span class = "linenos" > 434< / span > < / a > < span class = "k" > else< / span > < span class = "p" > :< / span >
< / span > < span id = "move_ctes_to_top_level-435" > < a href = "#move_ctes_to_top_level-435" > < span class = "linenos" > 435< / span > < / a > < span class = "k" > if< / span > < span class = "n" > inner_with< / span > < span class = "o" > .< / span > < span class = "n" > recursive< / span > < span class = "p" > :< / span >
< / span > < span id = "move_ctes_to_top_level-436" > < a href = "#move_ctes_to_top_level-436" > < span class = "linenos" > 436< / span > < / a > < span class = "n" > top_level_with< / span > < span class = "o" > .< / span > < span class = "n" > set< / span > < span class = "p" > (< / span > < span class = "s2" > " recursive" < / span > < span class = "p" > ,< / span > < span class = "kc" > True< / span > < span class = "p" > )< / span >
< / span > < span id = "move_ctes_to_top_level-437" > < a href = "#move_ctes_to_top_level-437" > < span class = "linenos" > 437< / span > < / a >
< / span > < span id = "move_ctes_to_top_level-438" > < a href = "#move_ctes_to_top_level-438" > < span class = "linenos" > 438< / span > < / a > < span class = "n" > top_level_with< / span > < span class = "o" > .< / span > < span class = "n" > expressions< / span > < span class = "o" > .< / span > < span class = "n" > extend< / span > < span class = "p" > (< / span > < span class = "n" > inner_with< / span > < span class = "o" > .< / span > < span class = "n" > expressions< / span > < span class = "p" > )< / span >
< / span > < span id = "move_ctes_to_top_level-439" > < a href = "#move_ctes_to_top_level-439" > < span class = "linenos" > 439< / span > < / a >
< / span > < span id = "move_ctes_to_top_level-440" > < a href = "#move_ctes_to_top_level-440" > < span class = "linenos" > 440< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
2025-02-13 21:15:38 +01:00
< / span > < / pre > < / div >
< div class = "docstring" > < p > Some dialects (e.g. Hive, T-SQL, Spark prior to version 3) only allow CTEs to be
defined at the top-level, so for example queries like:< / p >
< pre > < code > SELECT * FROM (WITH t(c) AS (SELECT 1) SELECT * FROM t) AS subq
< / code > < / pre >
< p > are invalid in those dialects. This transformation can be used to ensure all CTEs are
moved to the top level so that the final SQL code is valid from a syntax standpoint.< / p >
< p > TODO: handle name clashes whilst moving CTEs (it can get quite tricky & costly).< / p >
< / div >
2025-02-13 15:56:32 +01:00
2025-02-13 21:16:46 +01:00
< / section >
< section id = "ensure_bools" >
< input id = "ensure_bools-view-source" class = "view-source-toggle-state" type = "checkbox" aria-hidden = "true" tabindex = "-1" >
< div class = "attr function" >
< span class = "def" > def< / span >
< span class = "name" > ensure_bools< / span > < span class = "signature pdoc-code multiline" > (< span class = "param" > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > < / span > < span class = "return-annotation" > ) -> < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > :< / span > < / span >
< label class = "view-source-button" for = "ensure_bools-view-source" > < span > View Source< / span > < / label >
< / div >
< a class = "headerlink" href = "#ensure_bools" > < / a >
< div class = "pdoc-code codehilite" > < pre > < span > < / span > < span id = "ensure_bools-443" > < a href = "#ensure_bools-443" > < span class = "linenos" > 443< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > ensure_bools< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "ensure_bools-444" > < a href = "#ensure_bools-444" > < span class = "linenos" > 444< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " Converts numeric values used in conditions into explicit boolean expressions." " " < / span >
< / span > < span id = "ensure_bools-445" > < a href = "#ensure_bools-445" > < span class = "linenos" > 445< / span > < / a > < span class = "kn" > from< / span > < span class = "nn" > sqlglot.optimizer.canonicalize< / span > < span class = "kn" > import< / span > < span class = "n" > ensure_bools< / span >
< / span > < span id = "ensure_bools-446" > < a href = "#ensure_bools-446" > < span class = "linenos" > 446< / span > < / a >
< / span > < span id = "ensure_bools-447" > < a href = "#ensure_bools-447" > < span class = "linenos" > 447< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > _ensure_bool< / span > < span class = "p" > (< / span > < span class = "n" > node< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< / span > < span id = "ensure_bools-448" > < a href = "#ensure_bools-448" > < span class = "linenos" > 448< / span > < / a > < span class = "k" > if< / span > < span class = "p" > (< / span >
< / span > < span id = "ensure_bools-449" > < a href = "#ensure_bools-449" > < span class = "linenos" > 449< / span > < / a > < span class = "n" > node< / span > < span class = "o" > .< / span > < span class = "n" > is_number< / span >
< / span > < span id = "ensure_bools-450" > < a href = "#ensure_bools-450" > < span class = "linenos" > 450< / span > < / a > < span class = "ow" > or< / span > < span class = "n" > node< / span > < span class = "o" > .< / span > < span class = "n" > is_type< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > DataType< / span > < span class = "o" > .< / span > < span class = "n" > Type< / span > < span class = "o" > .< / span > < span class = "n" > UNKNOWN< / span > < span class = "p" > ,< / span > < span class = "o" > *< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > DataType< / span > < span class = "o" > .< / span > < span class = "n" > NUMERIC_TYPES< / span > < span class = "p" > )< / span >
< / span > < span id = "ensure_bools-451" > < a href = "#ensure_bools-451" > < span class = "linenos" > 451< / span > < / a > < span class = "ow" > or< / span > < span class = "p" > (< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > node< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Column< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span > < span class = "ow" > not< / span > < span class = "n" > node< / span > < span class = "o" > .< / span > < span class = "n" > type< / span > < span class = "p" > )< / span >
< / span > < span id = "ensure_bools-452" > < a href = "#ensure_bools-452" > < span class = "linenos" > 452< / span > < / a > < span class = "p" > ):< / span >
< / span > < span id = "ensure_bools-453" > < a href = "#ensure_bools-453" > < span class = "linenos" > 453< / span > < / a > < span class = "n" > node< / span > < span class = "o" > .< / span > < span class = "n" > replace< / span > < span class = "p" > (< / span > < span class = "n" > node< / span > < span class = "o" > .< / span > < span class = "n" > neq< / span > < span class = "p" > (< / span > < span class = "mi" > 0< / span > < span class = "p" > ))< / span >
< / span > < span id = "ensure_bools-454" > < a href = "#ensure_bools-454" > < span class = "linenos" > 454< / span > < / a >
< / span > < span id = "ensure_bools-455" > < a href = "#ensure_bools-455" > < span class = "linenos" > 455< / span > < / a > < span class = "k" > for< / span > < span class = "n" > node< / span > < span class = "p" > ,< / span > < span class = "o" > *< / span > < span class = "n" > _< / span > < span class = "ow" > in< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > walk< / span > < span class = "p" > ():< / span >
< / span > < span id = "ensure_bools-456" > < a href = "#ensure_bools-456" > < span class = "linenos" > 456< / span > < / a > < span class = "n" > ensure_bools< / span > < span class = "p" > (< / span > < span class = "n" > node< / span > < span class = "p" > ,< / span > < span class = "n" > _ensure_bool< / span > < span class = "p" > )< / span >
< / span > < span id = "ensure_bools-457" > < a href = "#ensure_bools-457" > < span class = "linenos" > 457< / span > < / a >
< / span > < span id = "ensure_bools-458" > < a href = "#ensure_bools-458" > < span class = "linenos" > 458< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
< / span > < / pre > < / div >
< div class = "docstring" > < p > Converts numeric values used in conditions into explicit boolean expressions.< / p >
< / div >
< / section >
< section id = "unqualify_columns" >
< input id = "unqualify_columns-view-source" class = "view-source-toggle-state" type = "checkbox" aria-hidden = "true" tabindex = "-1" >
< div class = "attr function" >
< span class = "def" > def< / span >
< span class = "name" > unqualify_columns< / span > < span class = "signature pdoc-code multiline" > (< span class = "param" > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > < / span > < span class = "return-annotation" > ) -> < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > :< / span > < / span >
< label class = "view-source-button" for = "unqualify_columns-view-source" > < span > View Source< / span > < / label >
< / div >
< a class = "headerlink" href = "#unqualify_columns" > < / a >
< div class = "pdoc-code codehilite" > < pre > < span > < / span > < span id = "unqualify_columns-461" > < a href = "#unqualify_columns-461" > < span class = "linenos" > 461< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > unqualify_columns< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > :< / span >
< / span > < span id = "unqualify_columns-462" > < a href = "#unqualify_columns-462" > < span class = "linenos" > 462< / span > < / a > < span class = "k" > for< / span > < span class = "n" > column< / span > < span class = "ow" > in< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > find_all< / span > < span class = "p" > (< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Column< / span > < span class = "p" > ):< / span >
< / span > < span id = "unqualify_columns-463" > < a href = "#unqualify_columns-463" > < span class = "linenos" > 463< / span > < / a > < span class = "c1" > # We only wanna pop off the table, db, catalog args< / span >
< / span > < span id = "unqualify_columns-464" > < a href = "#unqualify_columns-464" > < span class = "linenos" > 464< / span > < / a > < span class = "k" > for< / span > < span class = "n" > part< / span > < span class = "ow" > in< / span > < span class = "n" > column< / span > < span class = "o" > .< / span > < span class = "n" > parts< / span > < span class = "p" > [:< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ]:< / span >
< / span > < span id = "unqualify_columns-465" > < a href = "#unqualify_columns-465" > < span class = "linenos" > 465< / span > < / a > < span class = "n" > part< / span > < span class = "o" > .< / span > < span class = "n" > pop< / span > < span class = "p" > ()< / span >
< / span > < span id = "unqualify_columns-466" > < a href = "#unqualify_columns-466" > < span class = "linenos" > 466< / span > < / a >
< / span > < span id = "unqualify_columns-467" > < a href = "#unqualify_columns-467" > < span class = "linenos" > 467< / span > < / a > < span class = "k" > return< / span > < span class = "n" > expression< / span >
< / span > < / pre > < / div >
2025-02-13 15:22:50 +01:00
< / section >
< section id = "preprocess" >
< input id = "preprocess-view-source" class = "view-source-toggle-state" type = "checkbox" aria-hidden = "true" tabindex = "-1" >
< div class = "attr function" >
< span class = "def" > def< / span >
2025-02-13 15:51:35 +01:00
< span class = "name" > preprocess< / span > < span class = "signature pdoc-code multiline" > (< span class = "param" > < span class = "n" > transforms< / span > < span class = "p" > :< / span > < span class = "n" > List< / span > < span class = "p" > [< / span > < span class = "n" > Callable< / span > < span class = "p" > [[< / span > < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > < span class = "p" > ],< / span > < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > < span class = "p" > ]]< / span > < / span > < span class = "return-annotation" > ) -> < span class = "n" > Callable< / span > < span class = "p" > [[< / span > < span class = "n" > < a href = "generator.html#Generator" > sqlglot.generator.Generator< / a > < / span > < span class = "p" > ,< / span > < span class = "n" > < a href = "expressions.html#Expression" > sqlglot.expressions.Expression< / a > < / span > < span class = "p" > ],< / span > < span class = "nb" > str< / span > < span class = "p" > ]< / span > :< / span > < / span >
2025-02-13 15:22:50 +01:00
< label class = "view-source-button" for = "preprocess-view-source" > < span > View Source< / span > < / label >
< / div >
< a class = "headerlink" href = "#preprocess" > < / a >
2025-02-13 21:16:46 +01:00
< div class = "pdoc-code codehilite" > < pre > < span > < / span > < span id = "preprocess-470" > < a href = "#preprocess-470" > < span class = "linenos" > 470< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > preprocess< / span > < span class = "p" > (< / span >
< / span > < span id = "preprocess-471" > < a href = "#preprocess-471" > < span class = "linenos" > 471< / span > < / a > < span class = "n" > transforms< / span > < span class = "p" > :< / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > List< / span > < span class = "p" > [< / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > Callable< / span > < span class = "p" > [[< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > ],< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > ]],< / span >
< / span > < span id = "preprocess-472" > < a href = "#preprocess-472" > < span class = "linenos" > 472< / span > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > Callable< / span > < span class = "p" > [[< / span > < span class = "n" > Generator< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > ],< / span > < span class = "nb" > str< / span > < span class = "p" > ]:< / span >
< / span > < span id = "preprocess-473" > < a href = "#preprocess-473" > < span class = "linenos" > 473< / span > < / a > < span class = "w" > < / span > < span class = "sd" > " " " < / span >
< / span > < span id = "preprocess-474" > < a href = "#preprocess-474" > < span class = "linenos" > 474< / span > < / a > < span class = "sd" > Creates a new transform by chaining a sequence of transformations and converts the resulting< / span >
< / span > < span id = "preprocess-475" > < a href = "#preprocess-475" > < span class = "linenos" > 475< / span > < / a > < span class = "sd" > expression to SQL, using either the " _sql" method corresponding to the resulting expression,< / span >
< / span > < span id = "preprocess-476" > < a href = "#preprocess-476" > < span class = "linenos" > 476< / span > < / a > < span class = "sd" > or the appropriate `Generator.TRANSFORMS` function (when applicable -- see below).< / span >
< / span > < span id = "preprocess-477" > < a href = "#preprocess-477" > < span class = "linenos" > 477< / span > < / a >
< / span > < span id = "preprocess-478" > < a href = "#preprocess-478" > < span class = "linenos" > 478< / span > < / a > < span class = "sd" > Args:< / span >
< / span > < span id = "preprocess-479" > < a href = "#preprocess-479" > < span class = "linenos" > 479< / span > < / a > < span class = "sd" > transforms: sequence of transform functions. These will be called in order.< / span >
< / span > < span id = "preprocess-480" > < a href = "#preprocess-480" > < span class = "linenos" > 480< / span > < / a >
< / span > < span id = "preprocess-481" > < a href = "#preprocess-481" > < span class = "linenos" > 481< / span > < / a > < span class = "sd" > Returns:< / span >
< / span > < span id = "preprocess-482" > < a href = "#preprocess-482" > < span class = "linenos" > 482< / span > < / a > < span class = "sd" > Function that can be used as a generator transform.< / span >
< / span > < span id = "preprocess-483" > < a href = "#preprocess-483" > < span class = "linenos" > 483< / span > < / a > < span class = "sd" > " " " < / span >
< / span > < span id = "preprocess-484" > < a href = "#preprocess-484" > < span class = "linenos" > 484< / span > < / a >
< / span > < span id = "preprocess-485" > < a href = "#preprocess-485" > < span class = "linenos" > 485< / span > < / a > < span class = "k" > def< / span > < span class = "nf" > _to_sql< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > expression< / span > < span class = "p" > :< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Expression< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "nb" > str< / span > < span class = "p" > :< / span >
< / span > < span id = "preprocess-486" > < a href = "#preprocess-486" > < span class = "linenos" > 486< / span > < / a > < span class = "n" > expression_type< / span > < span class = "o" > =< / span > < span class = "nb" > type< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > )< / span >
< / span > < span id = "preprocess-487" > < a href = "#preprocess-487" > < span class = "linenos" > 487< / span > < / a >
< / span > < span id = "preprocess-488" > < a href = "#preprocess-488" > < span class = "linenos" > 488< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > =< / span > < span class = "n" > transforms< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ](< / span > < span class = "n" > expression< / span > < span class = "p" > )< / span >
< / span > < span id = "preprocess-489" > < a href = "#preprocess-489" > < span class = "linenos" > 489< / span > < / a > < span class = "k" > for< / span > < span class = "n" > t< / span > < span class = "ow" > in< / span > < span class = "n" > transforms< / span > < span class = "p" > [< / span > < span class = "mi" > 1< / span > < span class = "p" > :]:< / span >
< / span > < span id = "preprocess-490" > < a href = "#preprocess-490" > < span class = "linenos" > 490< / span > < / a > < span class = "n" > expression< / span > < span class = "o" > =< / span > < span class = "n" > t< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > )< / span >
< / span > < span id = "preprocess-491" > < a href = "#preprocess-491" > < span class = "linenos" > 491< / span > < / a >
< / span > < span id = "preprocess-492" > < a href = "#preprocess-492" > < span class = "linenos" > 492< / span > < / a > < span class = "n" > _sql_handler< / span > < span class = "o" > =< / span > < span class = "nb" > getattr< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "n" > key< / span > < span class = "o" > +< / span > < span class = "s2" > " _sql" < / span > < span class = "p" > ,< / span > < span class = "kc" > None< / span > < span class = "p" > )< / span >
< / span > < span id = "preprocess-493" > < a href = "#preprocess-493" > < span class = "linenos" > 493< / span > < / a > < span class = "k" > if< / span > < span class = "n" > _sql_handler< / span > < span class = "p" > :< / span >
< / span > < span id = "preprocess-494" > < a href = "#preprocess-494" > < span class = "linenos" > 494< / span > < / a > < span class = "k" > return< / span > < span class = "n" > _sql_handler< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > )< / span >
< / span > < span id = "preprocess-495" > < a href = "#preprocess-495" > < span class = "linenos" > 495< / span > < / a >
< / span > < span id = "preprocess-496" > < a href = "#preprocess-496" > < span class = "linenos" > 496< / span > < / a > < span class = "n" > transforms_handler< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > TRANSFORMS< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "nb" > type< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ))< / span >
< / span > < span id = "preprocess-497" > < a href = "#preprocess-497" > < span class = "linenos" > 497< / span > < / a > < span class = "k" > if< / span > < span class = "n" > transforms_handler< / span > < span class = "p" > :< / span >
< / span > < span id = "preprocess-498" > < a href = "#preprocess-498" > < span class = "linenos" > 498< / span > < / a > < span class = "k" > if< / span > < span class = "n" > expression_type< / span > < span class = "ow" > is< / span > < span class = "nb" > type< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ):< / span >
< / span > < span id = "preprocess-499" > < a href = "#preprocess-499" > < span class = "linenos" > 499< / span > < / a > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > ,< / span > < span class = "n" > exp< / span > < span class = "o" > .< / span > < span class = "n" > Func< / span > < span class = "p" > ):< / span >
< / span > < span id = "preprocess-500" > < a href = "#preprocess-500" > < span class = "linenos" > 500< / span > < / a > < span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > function_fallback_sql< / span > < span class = "p" > (< / span > < span class = "n" > expression< / span > < span class = "p" > )< / span >
< / span > < span id = "preprocess-501" > < a href = "#preprocess-501" > < span class = "linenos" > 501< / span > < / a >
< / span > < span id = "preprocess-502" > < a href = "#preprocess-502" > < span class = "linenos" > 502< / span > < / a > < span class = "c1" > # Ensures we don' t enter an infinite loop. This can happen when the original expression< / span >
< / span > < span id = "preprocess-503" > < a href = "#preprocess-503" > < span class = "linenos" > 503< / span > < / a > < span class = "c1" > # has the same type as the final expression and there' s no _sql method available for it,< / span >
< / span > < span id = "preprocess-504" > < a href = "#preprocess-504" > < span class = "linenos" > 504< / span > < / a > < span class = "c1" > # because then it' d re-enter _to_sql.< / span >
< / span > < span id = "preprocess-505" > < a href = "#preprocess-505" > < span class = "linenos" > 505< / span > < / a > < span class = "k" > raise< / span > < span class = "ne" > ValueError< / span > < span class = "p" > (< / span >
< / span > < span id = "preprocess-506" > < a href = "#preprocess-506" > < span class = "linenos" > 506< / span > < / a > < span class = "sa" > f< / span > < span class = "s2" > " Expression type < / span > < span class = "si" > {< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "vm" > __class__< / span > < span class = "o" > .< / span > < span class = "vm" > __name__< / span > < span class = "si" > }< / span > < span class = "s2" > requires a _sql method in order to be transformed." < / span >
< / span > < span id = "preprocess-507" > < a href = "#preprocess-507" > < span class = "linenos" > 507< / span > < / a > < span class = "p" > )< / span >
< / span > < span id = "preprocess-508" > < a href = "#preprocess-508" > < span class = "linenos" > 508< / span > < / a >
< / span > < span id = "preprocess-509" > < a href = "#preprocess-509" > < span class = "linenos" > 509< / span > < / a > < span class = "k" > return< / span > < span class = "n" > transforms_handler< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > expression< / span > < span class = "p" > )< / span >
< / span > < span id = "preprocess-510" > < a href = "#preprocess-510" > < span class = "linenos" > 510< / span > < / a >
< / span > < span id = "preprocess-511" > < a href = "#preprocess-511" > < span class = "linenos" > 511< / span > < / a > < span class = "k" > raise< / span > < span class = "ne" > ValueError< / span > < span class = "p" > (< / span > < span class = "sa" > f< / span > < span class = "s2" > " Unsupported expression type < / span > < span class = "si" > {< / span > < span class = "n" > expression< / span > < span class = "o" > .< / span > < span class = "vm" > __class__< / span > < span class = "o" > .< / span > < span class = "vm" > __name__< / span > < span class = "si" > }< / span > < span class = "s2" > ." < / span > < span class = "p" > )< / span >
< / span > < span id = "preprocess-512" > < a href = "#preprocess-512" > < span class = "linenos" > 512< / span > < / a >
< / span > < span id = "preprocess-513" > < a href = "#preprocess-513" > < span class = "linenos" > 513< / span > < / a > < span class = "k" > return< / span > < span class = "n" > _to_sql< / span >
2025-02-13 15:22:50 +01:00
< / span > < / pre > < / div >
< div class = "docstring" > < p > Creates a new transform by chaining a sequence of transformations and converts the resulting
2025-02-13 15:56:32 +01:00
expression to SQL, using either the "_sql" method corresponding to the resulting expression,
or the appropriate < code > Generator.TRANSFORMS< / code > function (when applicable -- see below).< / p >
2025-02-13 15:22:50 +01:00
< h6 id = "arguments" > Arguments:< / h6 >
< ul >
< li > < strong > transforms:< / strong > sequence of transform functions. These will be called in order.< / li >
< / ul >
< h6 id = "returns" > Returns:< / h6 >
< blockquote >
< p > Function that can be used as a generator transform.< / p >
< / blockquote >
< / div >
< / section >
< / main >
< script >
function escapeHTML(html) {
return document.createElement('div').appendChild(document.createTextNode(html)).parentNode.innerHTML;
}
const originalContent = document.querySelector("main.pdoc");
let currentContent = originalContent;
function setContent(innerHTML) {
let elem;
if (innerHTML) {
elem = document.createElement("main");
elem.classList.add("pdoc");
elem.innerHTML = innerHTML;
} else {
elem = originalContent;
}
if (currentContent !== elem) {
currentContent.replaceWith(elem);
currentContent = elem;
}
}
function getSearchTerm() {
return (new URL(window.location)).searchParams.get("search");
}
const searchBox = document.querySelector(".pdoc input[type=search]");
searchBox.addEventListener("input", function () {
let url = new URL(window.location);
if (searchBox.value.trim()) {
url.hash = "";
url.searchParams.set("search", searchBox.value);
} else {
url.searchParams.delete("search");
}
history.replaceState("", "", url.toString());
onInput();
});
window.addEventListener("popstate", onInput);
let search, searchErr;
async function initialize() {
try {
search = await new Promise((resolve, reject) => {
const script = document.createElement("script");
script.type = "text/javascript";
script.async = true;
script.onload = () => resolve(window.pdocSearch);
script.onerror = (e) => reject(e);
script.src = "../search.js";
document.getElementsByTagName("head")[0].appendChild(script);
});
} catch (e) {
console.error("Cannot fetch pdoc search index");
searchErr = "Cannot fetch search index.";
}
onInput();
document.querySelector("nav.pdoc").addEventListener("click", e => {
if (e.target.hash) {
searchBox.value = "";
searchBox.dispatchEvent(new Event("input"));
}
});
}
function onInput() {
setContent((() => {
const term = getSearchTerm();
if (!term) {
return null
}
if (searchErr) {
return `< h3 > Error: ${searchErr}< / h3 > `
}
if (!search) {
return "< h3 > Searching...< / h3 > "
}
window.scrollTo({top: 0, left: 0, behavior: 'auto'});
const results = search(term);
let html;
if (results.length === 0) {
html = `No search results for '${escapeHTML(term)}'.`
} else {
html = `< h4 > ${results.length} search result${results.length > 1 ? "s" : ""} for '${escapeHTML(term)}'.< / h4 > `;
}
for (let result of results.slice(0, 10)) {
let doc = result.doc;
let url = `../${doc.modulename.replaceAll(".", "/")}.html`;
if (doc.qualname) {
url += `#${doc.qualname}`;
}
let heading;
switch (result.doc.kind) {
case "function":
if (doc.fullname.endsWith(".__init__")) {
heading = `< span class = "name" > ${doc.fullname.replace(/\.__init__$/, "")}< / span > ${doc.signature}`;
} else {
heading = `< span class = "def" > ${doc.funcdef}< / span > < span class = "name" > ${doc.fullname}< / span > ${doc.signature}`;
}
break;
case "class":
heading = `< span class = "def" > class< / span > < span class = "name" > ${doc.fullname}< / span > `;
if (doc.bases)
heading += `< wbr > (< span class = "base" > ${doc.bases}< / span > )`;
heading += `:`;
break;
case "variable":
heading = `< span class = "name" > ${doc.fullname}< / span > `;
if (doc.annotation)
heading += `< span class = "annotation" > ${doc.annotation}< / span > `;
if (doc.default_value)
2025-02-13 15:31:44 +01:00
heading += `< span class = "default_value" > = ${doc.default_value}< / span > `;
2025-02-13 15:22:50 +01:00
break;
default:
heading = `< span class = "name" > ${doc.fullname}< / span > `;
break;
}
html += `
< section class = "search-result" >
< a href = "${url}" class = "attr ${doc.kind}" > ${heading}< / a >
< div class = "docstring" > ${doc.doc}< / div >
< / section >
`;
}
return html;
})());
}
if (getSearchTerm()) {
initialize();
searchBox.value = getSearchTerm();
onInput();
} else {
searchBox.addEventListener("focus", initialize, {once: true});
}
searchBox.addEventListener("keydown", e => {
if (["ArrowDown", "ArrowUp", "Enter"].includes(e.key)) {
let focused = currentContent.querySelector(".search-result.focused");
if (!focused) {
currentContent.querySelector(".search-result").classList.add("focused");
} else if (
e.key === "ArrowDown"
& & focused.nextElementSibling
& & focused.nextElementSibling.classList.contains("search-result")
) {
focused.classList.remove("focused");
focused.nextElementSibling.classList.add("focused");
focused.nextElementSibling.scrollIntoView({
behavior: "smooth",
block: "nearest",
inline: "nearest"
});
} else if (
e.key === "ArrowUp"
& & focused.previousElementSibling
& & focused.previousElementSibling.classList.contains("search-result")
) {
focused.classList.remove("focused");
focused.previousElementSibling.classList.add("focused");
focused.previousElementSibling.scrollIntoView({
behavior: "smooth",
block: "nearest",
inline: "nearest"
});
} else if (
e.key === "Enter"
) {
focused.querySelector("a").click();
}
}
});
< / script > < / body >
< / html >