1
0
Fork 0
sqlglot/docs/sqlglot/dialects/dialect.html
Daniel Baumann 4d9376ba93
Merging upstream version 20.3.0.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-02-13 21:17:51 +01:00

4766 lines
No EOL
660 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="generator" content="pdoc 14.2.0"/>
<title>sqlglot.dialects.dialect API documentation</title>
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
<style>/*! syntax-highlighting.css */pre{line-height:125%;}span.linenos{color:inherit; background-color:transparent; padding-left:5px; padding-right:20px;}.pdoc-code .hll{background-color:#ffffcc}.pdoc-code{background:#f8f8f8;}.pdoc-code .c{color:#3D7B7B; font-style:italic}.pdoc-code .err{border:1px 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>
<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:50px;height:40px;top:1rem;right:1rem;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:2rem 3vw;}header + main{margin-top:-3rem;}.git-button{display:none !important;}nav input[type="search"]{max-width:77%;}nav input[type="search"]:first-child{margin-top:-6px;}nav input[type="search"]:valid ~ *{display:none !important;}}@media (min-width:770px){:root{--sidebar-width:clamp(12.5rem, 28vw, 22rem);}nav{position:fixed;overflow:auto;height:100vh;width:var(--sidebar-width);}main, header{padding:3rem 2rem 3rem calc(var(--sidebar-width) + 3rem);width:calc(54rem + var(--sidebar-width));max-width:100%;}header + main{margin-top:-4rem;}#navtoggle{display:none;}}#togglestate{position:absolute;height:0;opacity:0;}nav.pdoc{--pad:clamp(0.5rem, 2vw, 1.75rem);--indent:1.5rem;background-color:var(--accent);border-right:1px solid var(--accent2);box-shadow:0 0 20px 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:.4rem; }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:1rem;}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:35vh;display:block;margin:0 auto 1rem;transform:translate(calc(-.5 * var(--pad)), 0);}nav.pdoc ul{list-style:none;padding-left:0;}nav.pdoc > div > ul{margin-left:calc(0px - var(--pad));}nav.pdoc li a{padding:.2rem 0 .2rem calc(var(--pad) + var(--indent));}nav.pdoc > div > ul > li > a{padding-left:var(--pad);}nav.pdoc li{transition:all 100ms;}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.5rem;}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) 1px;margin-top:1.5rem;padding-top:.5rem;}nav.pdoc footer{font-size:small;}</style>
<style>/*! content.css */.pdoc{color:var(--text);box-sizing:border-box;line-height:1.5;background:none;}.pdoc .pdoc-button{cursor:pointer;display:inline-block;border:solid black 1px;border-radius:2px;font-size:.75rem;padding:calc(0.5em - 1px) 1em;transition:100ms all;}.pdoc .pdoc-alert{padding:1rem 1rem 1rem calc(1.5rem + 24px);border:1px solid transparent;border-radius:.25rem;background-repeat:no-repeat;background-position:1rem center;margin-bottom:1rem;}.pdoc .pdoc-alert > *:last-child{margin-bottom:0;}.pdoc .pdoc-alert-note {color:#084298;background-color:#cfe2ff;border-color:#b6d4fe;background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22%23084298%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20d%3D%22M8%2016A8%208%200%201%200%208%200a8%208%200%200%200%200%2016zm.93-9.412-1%204.705c-.07.34.029.533.304.533.194%200%20.487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703%200-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381%202.29-.287zM8%205.5a1%201%200%201%201%200-2%201%201%200%200%201%200%202z%22/%3E%3C/svg%3E");}.pdoc .pdoc-alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5;background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22%23664d03%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20d%3D%22M8.982%201.566a1.13%201.13%200%200%200-1.96%200L.165%2013.233c-.457.778.091%201.767.98%201.767h13.713c.889%200%201.438-.99.98-1.767L8.982%201.566zM8%205c.535%200%20.954.462.9.995l-.35%203.507a.552.552%200%200%201-1.1%200L7.1%205.995A.905.905%200%200%201%208%205zm.002%206a1%201%200%201%201%200%202%201%201%200%200%201%200-2z%22/%3E%3C/svg%3E");}.pdoc .pdoc-alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7;background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22%23842029%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20d%3D%22M5.52.359A.5.5%200%200%201%206%200h4a.5.5%200%200%201%20.474.658L8.694%206H12.5a.5.5%200%200%201%20.395.807l-7%209a.5.5%200%200%201-.873-.454L6.823%209.5H3.5a.5.5%200%200%201-.48-.641l2.5-8.5z%22/%3E%3C/svg%3E");}.pdoc .visually-hidden{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important;}.pdoc h1, .pdoc h2, .pdoc h3{font-weight:300;margin:.3em 0;padding:.2em 0;}.pdoc > section:not(.module-info) h1{font-size:1.5rem;font-weight:500;}.pdoc > section:not(.module-info) h2{font-size:1.4rem;font-weight:500;}.pdoc > section:not(.module-info) h3{font-size:1.3rem;font-weight:500;}.pdoc > section:not(.module-info) h4{font-size:1.2rem;}.pdoc > section:not(.module-info) h5{font-size:1.1rem;}.pdoc a{text-decoration:none;color:var(--link);}.pdoc a:hover{color:var(--link-hover);}.pdoc blockquote{margin-left:2rem;}.pdoc pre{border-top:1px solid var(--accent2);border-bottom:1px solid var(--accent2);margin-top:0;margin-bottom:1em;padding:.5rem 0 .5rem .5rem;overflow-x:auto;background-color:var(--code);}.pdoc code{color:var(--text);padding:.2em .4em;margin:0;font-size:85%;background-color:var(--accent);border-radius:6px;}.pdoc a > code{color:inherit;}.pdoc pre > code{display:inline-block;font-size:inherit;background:none;border:none;padding:0;}.pdoc > section:not(.module-info){margin-bottom:1.5rem;}.pdoc .modulename{margin-top:0;font-weight:bold;}.pdoc .modulename a{color:var(--link);transition:100ms all;}.pdoc .git-button{float:right;border:solid var(--link) 1px;}.pdoc .git-button:hover{background-color:var(--link);color:var(--pdoc-background);}.view-source-toggle-state,.view-source-toggle-state ~ .pdoc-code{display:none;}.view-source-toggle-state:checked ~ .pdoc-code{display:block;}.view-source-button{display:inline-block;float:right;font-size:.75rem;line-height:1.5rem;color:var(--muted);padding:0 .4rem 0 1.3rem;cursor:pointer;text-indent:-2px;}.view-source-button > span{visibility:hidden;}.module-info .view-source-button{float:none;display:flex;justify-content:flex-end;margin:-1.2rem .4rem -.2rem 0;}.view-source-button::before{position:absolute;content:"View Source";display:list-item;list-style-type:disclosure-closed;}.view-source-toggle-state:checked ~ .attr .view-source-button::before,.view-source-toggle-state:checked ~ .view-source-button::before{list-style-type:disclosure-open;}.pdoc .docstring{margin-bottom:1.5rem;}.pdoc section:not(.module-info) .docstring{margin-left:clamp(0rem, 5vw - 2rem, 1rem);}.pdoc .docstring .pdoc-code{margin-left:1em;margin-right:1em;}.pdoc h1:target,.pdoc h2:target,.pdoc h3:target,.pdoc h4:target,.pdoc h5:target,.pdoc h6:target,.pdoc .pdoc-code > pre > span:target{background-color:var(--active);box-shadow:-1rem 0 0 0 var(--active);}.pdoc .pdoc-code > pre > span:target{display:block;}.pdoc div:target > .attr,.pdoc section:target > .attr,.pdoc dd:target > a{background-color:var(--active);}.pdoc *{scroll-margin:2rem;}.pdoc .pdoc-code .linenos{user-select:none;}.pdoc .attr:hover{filter:contrast(0.95);}.pdoc section, .pdoc .classattr{position:relative;}.pdoc .headerlink{--width:clamp(1rem, 3vw, 2rem);position:absolute;top:0;left:calc(0rem - var(--width));transition:all 100ms ease-in-out;opacity:0;}.pdoc .headerlink::before{content:"#";display:block;text-align:center;width:var(--width);height:2.3rem;line-height:2.3rem;font-size:1.5rem;}.pdoc .attr:hover ~ .headerlink,.pdoc *:target > .headerlink,.pdoc .headerlink:hover{opacity:1;}.pdoc .attr{display:block;margin:.5rem 0 .5rem;padding:.4rem .4rem .4rem 1rem;background-color:var(--accent);overflow-x:auto;}.pdoc .classattr{margin-left:2rem;}.pdoc .name{color:var(--name);font-weight:bold;}.pdoc .def{color:var(--def);font-weight:bold;}.pdoc .signature{background-color:transparent;}.pdoc .param, .pdoc .return-annotation{white-space:pre;}.pdoc .signature.multiline .param{display:block;}.pdoc .signature.condensed .param{display:inline-block;}.pdoc .annotation{color:var(--annotation);}.pdoc .view-value-toggle-state,.pdoc .view-value-toggle-state ~ .default_value{display:none;}.pdoc .view-value-toggle-state:checked ~ .default_value{display:inherit;}.pdoc .view-value-button{font-size:.5rem;vertical-align:middle;border-style:dashed;margin-top:-0.1rem;}.pdoc .view-value-button:hover{background:white;}.pdoc .view-value-button::before{content:"show";text-align:center;width:2.2em;display:inline-block;}.pdoc .view-value-toggle-state:checked ~ .view-value-button::before{content:"hide";}.pdoc .inherited{margin-left:2rem;}.pdoc .inherited dt{font-weight:700;}.pdoc .inherited dt, .pdoc .inherited dd{display:inline;margin-left:0;margin-bottom:.5rem;}.pdoc .inherited dd:not(:last-child):after{content:", ";}.pdoc .inherited .class:before{content:"class ";}.pdoc .inherited .function a:after{content:"()";}.pdoc .search-result .docstring{overflow:auto;max-height:25vh;}.pdoc .search-result.focused > .attr{background-color:var(--active);}.pdoc .attribution{margin-top:2rem;display:block;opacity:0.5;transition:all 200ms;filter:grayscale(100%);}.pdoc .attribution:hover{opacity:1;filter:grayscale(0%);}.pdoc .attribution img{margin-left:5px;height:35px;vertical-align:middle;width:70px;transition:all 200ms;}.pdoc table{display:block;width:max-content;max-width:100%;overflow:auto;margin-bottom:1rem;}.pdoc table th{font-weight:600;}.pdoc table th, .pdoc table td{padding:6px 13px;border:1px solid var(--accent2);}</style>
<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="../dialects.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> &nbsp;sqlglot.dialects</a>
<input type="search" placeholder="Search..." role="searchbox" aria-label="search"
pattern=".+" required>
<h2>API Documentation</h2>
<ul class="memberlist">
<li>
<a class="variable" href="#DATE_ADD_OR_DIFF">DATE_ADD_OR_DIFF</a>
</li>
<li>
<a class="variable" href="#DATE_ADD_OR_SUB">DATE_ADD_OR_SUB</a>
</li>
<li>
<a class="class" href="#Dialects">Dialects</a>
<ul class="memberlist">
<li>
<a class="variable" href="#Dialects.DIALECT">DIALECT</a>
</li>
<li>
<a class="variable" href="#Dialects.BIGQUERY">BIGQUERY</a>
</li>
<li>
<a class="variable" href="#Dialects.CLICKHOUSE">CLICKHOUSE</a>
</li>
<li>
<a class="variable" href="#Dialects.DATABRICKS">DATABRICKS</a>
</li>
<li>
<a class="variable" href="#Dialects.DRILL">DRILL</a>
</li>
<li>
<a class="variable" href="#Dialects.DUCKDB">DUCKDB</a>
</li>
<li>
<a class="variable" href="#Dialects.HIVE">HIVE</a>
</li>
<li>
<a class="variable" href="#Dialects.MYSQL">MYSQL</a>
</li>
<li>
<a class="variable" href="#Dialects.ORACLE">ORACLE</a>
</li>
<li>
<a class="variable" href="#Dialects.POSTGRES">POSTGRES</a>
</li>
<li>
<a class="variable" href="#Dialects.PRESTO">PRESTO</a>
</li>
<li>
<a class="variable" href="#Dialects.REDSHIFT">REDSHIFT</a>
</li>
<li>
<a class="variable" href="#Dialects.SNOWFLAKE">SNOWFLAKE</a>
</li>
<li>
<a class="variable" href="#Dialects.SPARK">SPARK</a>
</li>
<li>
<a class="variable" href="#Dialects.SPARK2">SPARK2</a>
</li>
<li>
<a class="variable" href="#Dialects.SQLITE">SQLITE</a>
</li>
<li>
<a class="variable" href="#Dialects.STARROCKS">STARROCKS</a>
</li>
<li>
<a class="variable" href="#Dialects.TABLEAU">TABLEAU</a>
</li>
<li>
<a class="variable" href="#Dialects.TERADATA">TERADATA</a>
</li>
<li>
<a class="variable" href="#Dialects.TRINO">TRINO</a>
</li>
<li>
<a class="variable" href="#Dialects.TSQL">TSQL</a>
</li>
<li>
<a class="variable" href="#Dialects.Doris">Doris</a>
</li>
</ul>
</li>
<li>
<a class="class" href="#NormalizationStrategy">NormalizationStrategy</a>
<ul class="memberlist">
<li>
<a class="variable" href="#NormalizationStrategy.LOWERCASE">LOWERCASE</a>
</li>
<li>
<a class="variable" href="#NormalizationStrategy.UPPERCASE">UPPERCASE</a>
</li>
<li>
<a class="variable" href="#NormalizationStrategy.CASE_SENSITIVE">CASE_SENSITIVE</a>
</li>
<li>
<a class="variable" href="#NormalizationStrategy.CASE_INSENSITIVE">CASE_INSENSITIVE</a>
</li>
</ul>
</li>
<li>
<a class="class" href="#Dialect">Dialect</a>
<ul class="memberlist">
<li>
<a class="function" href="#Dialect.__init__">Dialect</a>
</li>
<li>
<a class="variable" href="#Dialect.INDEX_OFFSET">INDEX_OFFSET</a>
</li>
<li>
<a class="variable" href="#Dialect.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a>
</li>
<li>
<a class="variable" href="#Dialect.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a>
</li>
<li>
<a class="variable" href="#Dialect.NORMALIZATION_STRATEGY">NORMALIZATION_STRATEGY</a>
</li>
<li>
<a class="variable" href="#Dialect.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a>
</li>
<li>
<a class="variable" href="#Dialect.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a>
</li>
<li>
<a class="variable" href="#Dialect.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a>
</li>
<li>
<a class="variable" href="#Dialect.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a>
</li>
<li>
<a class="variable" href="#Dialect.SUPPORTS_SEMI_ANTI_JOIN">SUPPORTS_SEMI_ANTI_JOIN</a>
</li>
<li>
<a class="variable" href="#Dialect.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a>
</li>
<li>
<a class="variable" href="#Dialect.LOG_BASE_FIRST">LOG_BASE_FIRST</a>
</li>
<li>
<a class="variable" href="#Dialect.NULL_ORDERING">NULL_ORDERING</a>
</li>
<li>
<a class="variable" href="#Dialect.TYPED_DIVISION">TYPED_DIVISION</a>
</li>
<li>
<a class="variable" href="#Dialect.SAFE_DIVISION">SAFE_DIVISION</a>
</li>
<li>
<a class="variable" href="#Dialect.CONCAT_COALESCE">CONCAT_COALESCE</a>
</li>
<li>
<a class="variable" href="#Dialect.DATE_FORMAT">DATE_FORMAT</a>
</li>
<li>
<a class="variable" href="#Dialect.DATEINT_FORMAT">DATEINT_FORMAT</a>
</li>
<li>
<a class="variable" href="#Dialect.TIME_FORMAT">TIME_FORMAT</a>
</li>
<li>
<a class="variable" href="#Dialect.TIME_MAPPING">TIME_MAPPING</a>
</li>
<li>
<a class="variable" href="#Dialect.FORMAT_MAPPING">FORMAT_MAPPING</a>
</li>
<li>
<a class="variable" href="#Dialect.ESCAPE_SEQUENCES">ESCAPE_SEQUENCES</a>
</li>
<li>
<a class="variable" href="#Dialect.PSEUDOCOLUMNS">PSEUDOCOLUMNS</a>
</li>
<li>
<a class="variable" href="#Dialect.tokenizer_class">tokenizer_class</a>
</li>
<li>
<a class="variable" href="#Dialect.parser_class">parser_class</a>
</li>
<li>
<a class="variable" href="#Dialect.generator_class">generator_class</a>
</li>
<li>
<a class="variable" href="#Dialect.TIME_TRIE">TIME_TRIE</a>
</li>
<li>
<a class="variable" href="#Dialect.FORMAT_TRIE">FORMAT_TRIE</a>
</li>
<li>
<a class="variable" href="#Dialect.INVERSE_TIME_MAPPING">INVERSE_TIME_MAPPING</a>
</li>
<li>
<a class="variable" href="#Dialect.INVERSE_TIME_TRIE">INVERSE_TIME_TRIE</a>
</li>
<li>
<a class="variable" href="#Dialect.INVERSE_ESCAPE_SEQUENCES">INVERSE_ESCAPE_SEQUENCES</a>
</li>
<li>
<a class="variable" href="#Dialect.QUOTE_START">QUOTE_START</a>
</li>
<li>
<a class="variable" href="#Dialect.QUOTE_END">QUOTE_END</a>
</li>
<li>
<a class="variable" href="#Dialect.IDENTIFIER_START">IDENTIFIER_START</a>
</li>
<li>
<a class="variable" href="#Dialect.IDENTIFIER_END">IDENTIFIER_END</a>
</li>
<li>
<a class="variable" href="#Dialect.BIT_START">BIT_START</a>
</li>
<li>
<a class="variable" href="#Dialect.BIT_END">BIT_END</a>
</li>
<li>
<a class="variable" href="#Dialect.HEX_START">HEX_START</a>
</li>
<li>
<a class="variable" href="#Dialect.HEX_END">HEX_END</a>
</li>
<li>
<a class="variable" href="#Dialect.BYTE_START">BYTE_START</a>
</li>
<li>
<a class="variable" href="#Dialect.BYTE_END">BYTE_END</a>
</li>
<li>
<a class="function" href="#Dialect.get_or_raise">get_or_raise</a>
</li>
<li>
<a class="function" href="#Dialect.format_time">format_time</a>
</li>
<li>
<a class="function" href="#Dialect.normalize_identifier">normalize_identifier</a>
</li>
<li>
<a class="function" href="#Dialect.case_sensitive">case_sensitive</a>
</li>
<li>
<a class="function" href="#Dialect.can_identify">can_identify</a>
</li>
<li>
<a class="function" href="#Dialect.quote_identifier">quote_identifier</a>
</li>
<li>
<a class="function" href="#Dialect.parse">parse</a>
</li>
<li>
<a class="function" href="#Dialect.parse_into">parse_into</a>
</li>
<li>
<a class="function" href="#Dialect.generate">generate</a>
</li>
<li>
<a class="function" href="#Dialect.transpile">transpile</a>
</li>
<li>
<a class="function" href="#Dialect.tokenize">tokenize</a>
</li>
<li>
<a class="variable" href="#Dialect.tokenizer">tokenizer</a>
</li>
<li>
<a class="function" href="#Dialect.parser">parser</a>
</li>
<li>
<a class="function" href="#Dialect.generator">generator</a>
</li>
</ul>
</li>
<li>
<a class="variable" href="#DialectType">DialectType</a>
</li>
<li>
<a class="function" href="#rename_func">rename_func</a>
</li>
<li>
<a class="function" href="#approx_count_distinct_sql">approx_count_distinct_sql</a>
</li>
<li>
<a class="function" href="#if_sql">if_sql</a>
</li>
<li>
<a class="function" href="#arrow_json_extract_sql">arrow_json_extract_sql</a>
</li>
<li>
<a class="function" href="#arrow_json_extract_scalar_sql">arrow_json_extract_scalar_sql</a>
</li>
<li>
<a class="function" href="#inline_array_sql">inline_array_sql</a>
</li>
<li>
<a class="function" href="#no_ilike_sql">no_ilike_sql</a>
</li>
<li>
<a class="function" href="#no_paren_current_date_sql">no_paren_current_date_sql</a>
</li>
<li>
<a class="function" href="#no_recursive_cte_sql">no_recursive_cte_sql</a>
</li>
<li>
<a class="function" href="#no_safe_divide_sql">no_safe_divide_sql</a>
</li>
<li>
<a class="function" href="#no_tablesample_sql">no_tablesample_sql</a>
</li>
<li>
<a class="function" href="#no_pivot_sql">no_pivot_sql</a>
</li>
<li>
<a class="function" href="#no_trycast_sql">no_trycast_sql</a>
</li>
<li>
<a class="function" href="#no_properties_sql">no_properties_sql</a>
</li>
<li>
<a class="function" href="#no_comment_column_constraint_sql">no_comment_column_constraint_sql</a>
</li>
<li>
<a class="function" href="#no_map_from_entries_sql">no_map_from_entries_sql</a>
</li>
<li>
<a class="function" href="#str_position_sql">str_position_sql</a>
</li>
<li>
<a class="function" href="#struct_extract_sql">struct_extract_sql</a>
</li>
<li>
<a class="function" href="#var_map_sql">var_map_sql</a>
</li>
<li>
<a class="function" href="#format_time_lambda">format_time_lambda</a>
</li>
<li>
<a class="function" href="#time_format">time_format</a>
</li>
<li>
<a class="function" href="#create_with_partitions_sql">create_with_partitions_sql</a>
</li>
<li>
<a class="function" href="#parse_date_delta">parse_date_delta</a>
</li>
<li>
<a class="function" href="#parse_date_delta_with_interval">parse_date_delta_with_interval</a>
</li>
<li>
<a class="function" href="#date_trunc_to_time">date_trunc_to_time</a>
</li>
<li>
<a class="function" href="#date_add_interval_sql">date_add_interval_sql</a>
</li>
<li>
<a class="function" href="#timestamptrunc_sql">timestamptrunc_sql</a>
</li>
<li>
<a class="function" href="#no_timestamp_sql">no_timestamp_sql</a>
</li>
<li>
<a class="function" href="#locate_to_strposition">locate_to_strposition</a>
</li>
<li>
<a class="function" href="#strposition_to_locate_sql">strposition_to_locate_sql</a>
</li>
<li>
<a class="function" href="#left_to_substring_sql">left_to_substring_sql</a>
</li>
<li>
<a class="function" href="#right_to_substring_sql">right_to_substring_sql</a>
</li>
<li>
<a class="function" href="#timestrtotime_sql">timestrtotime_sql</a>
</li>
<li>
<a class="function" href="#datestrtodate_sql">datestrtodate_sql</a>
</li>
<li>
<a class="function" href="#encode_decode_sql">encode_decode_sql</a>
</li>
<li>
<a class="function" href="#min_or_least">min_or_least</a>
</li>
<li>
<a class="function" href="#max_or_greatest">max_or_greatest</a>
</li>
<li>
<a class="function" href="#count_if_to_sum">count_if_to_sum</a>
</li>
<li>
<a class="function" href="#trim_sql">trim_sql</a>
</li>
<li>
<a class="function" href="#str_to_time_sql">str_to_time_sql</a>
</li>
<li>
<a class="function" href="#ts_or_ds_to_date_sql">ts_or_ds_to_date_sql</a>
</li>
<li>
<a class="function" href="#concat_to_dpipe_sql">concat_to_dpipe_sql</a>
</li>
<li>
<a class="function" href="#concat_ws_to_dpipe_sql">concat_ws_to_dpipe_sql</a>
</li>
<li>
<a class="function" href="#regexp_extract_sql">regexp_extract_sql</a>
</li>
<li>
<a class="function" href="#regexp_replace_sql">regexp_replace_sql</a>
</li>
<li>
<a class="function" href="#pivot_column_names">pivot_column_names</a>
</li>
<li>
<a class="function" href="#binary_from_function">binary_from_function</a>
</li>
<li>
<a class="function" href="#parse_timestamp_trunc">parse_timestamp_trunc</a>
</li>
<li>
<a class="function" href="#any_value_to_max_sql">any_value_to_max_sql</a>
</li>
<li>
<a class="function" href="#bool_xor_sql">bool_xor_sql</a>
</li>
<li>
<a class="function" href="#json_keyvalue_comma_sql">json_keyvalue_comma_sql</a>
</li>
<li>
<a class="function" href="#is_parse_json">is_parse_json</a>
</li>
<li>
<a class="function" href="#isnull_to_is_null">isnull_to_is_null</a>
</li>
<li>
<a class="function" href="#generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a>
</li>
<li>
<a class="function" href="#arg_max_or_min_no_count">arg_max_or_min_no_count</a>
</li>
<li>
<a class="function" href="#ts_or_ds_add_cast">ts_or_ds_add_cast</a>
</li>
<li>
<a class="function" href="#date_delta_sql">date_delta_sql</a>
</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-2.021%201.25-.079.295.021.601.274.837.219.203.415.364.598.501-.667.304-1.243.698-1.311%201.179-.02.144-.022.507.393.787.213.144.395.26.564.365-1.285.521-1.361.96-1.381%201.126-.018.142-.011.496.427.746l.854.489c-.473.389-.971.914-.999%201.429-.018.278.095.532.316.713.675.556%201.231.721%201.653.721.059%200%20.104-.014.158-.02.207.707.641%201.64%201.513%201.64h.013c.8-.008%201.236-.345%201.462-.626.173-.216.268-.457.325-.692.424.195.93.374%201.372.374.151%200%20.294-.021.423-.068.732-.27.944-.704.993-1.021.009-.061.003-.119.002-.179.266.086.538.147.789.147.15%200%20.294-.021.423-.069.542-.2.797-.489.914-.754.237.147.478.258.704.288.106.014.205.021.296.021.356%200%20.595-.101.767-.229.438.435%201.094.992%201.656%201.067.106.014.205.021.296.021a1.56%201.56%200%200%200%20.323-.035c.17.575.453%201.289.866%201.605.358.273.665.362.914.362a.99.99%200%200%200%20.421-.093%201.03%201.03%200%200%200%20.245-.164c.168.428.39.846.68%201.068.358.273.665.362.913.362a.99.99%200%200%200%20.421-.093c.317-.148.512-.448.639-.762.251.157.495.257.726.257.127%200%20.25-.024.37-.071.427-.17.706-.617.841-1.314.022-.015.047-.022.068-.038.067-.051.133-.104.196-.159-.443%201.486-1.107%202.761-2.086%203.257zM8.66%209.925a.5.5%200%201%200-1%200c0%20.653-.818%201.205-1.787%201.205s-1.787-.552-1.787-1.205a.5.5%200%201%200-1%200c0%201.216%201.25%202.205%202.787%202.205s2.787-.989%202.787-2.205zm4.4%2015.965l-.208.097c-2.661%201.258-4.708%201.436-6.086.527-1.542-1.017-1.88-3.19-1.844-4.198a.4.4%200%200%200-.385-.414c-.242-.029-.406.164-.414.385-.046%201.249.367%203.686%202.202%204.896.708.467%201.547.7%202.51.7%201.248%200%202.706-.392%204.362-1.174l.185-.086a.4.4%200%200%200%20.205-.527c-.089-.204-.326-.291-.527-.206zM9.547%202.292c.093.077.205.114.317.114a.5.5%200%200%200%20.318-.886L8.817.397a.5.5%200%200%200-.703.068.5.5%200%200%200%20.069.703l1.364%201.124zm-7.661-.065c.086%200%20.173-.022.253-.068l1.523-.893a.5.5%200%200%200-.506-.863l-1.523.892a.5.5%200%200%200-.179.685c.094.158.261.247.432.247z%22%20transform%3D%22matrix%28-1%200%200%201%2058%200%29%22%20fill%3D%22%233bb300%22/%3E%3Cpath%20d%3D%22M.3%2021.86V10.18q0-.46.02-.68.04-.22.18-.5.28-.54%201.34-.54%201.06%200%201.42.28.38.26.44.78.76-1.04%202.38-1.04%201.64%200%203.1%201.54%201.46%201.54%201.46%203.58%200%202.04-1.46%203.58-1.44%201.54-3.08%201.54-1.64%200-2.38-.92v4.04q0%20.46-.04.68-.02.22-.18.5-.14.3-.5.42-.36.12-.98.12-.62%200-1-.12-.36-.12-.52-.4-.14-.28-.18-.5-.02-.22-.02-.68zm3.96-9.42q-.46.54-.46%201.18%200%20.64.46%201.18.48.52%201.2.52.74%200%201.24-.52.52-.52.52-1.18%200-.66-.48-1.18-.48-.54-1.26-.54-.76%200-1.22.54zm14.741-8.36q.16-.3.54-.42.38-.12%201-.12.64%200%201.02.12.38.12.52.42.16.3.18.54.04.22.04.68v11.94q0%20.46-.04.7-.02.22-.18.5-.3.54-1.7.54-1.38%200-1.54-.98-.84.96-2.34.96-1.8%200-3.28-1.56-1.48-1.58-1.48-3.66%200-2.1%201.48-3.68%201.5-1.58%203.28-1.58%201.48%200%202.3%201v-4.2q0-.46.02-.68.04-.24.18-.52zm-3.24%2010.86q.52.54%201.26.54.74%200%201.22-.54.5-.54.5-1.18%200-.66-.48-1.22-.46-.56-1.26-.56-.8%200-1.28.56-.48.54-.48%201.2%200%20.66.52%201.2zm7.833-1.2q0-2.4%201.68-3.96%201.68-1.56%203.84-1.56%202.16%200%203.82%201.56%201.66%201.54%201.66%203.94%200%201.66-.86%202.96-.86%201.28-2.1%201.9-1.22.6-2.54.6-1.32%200-2.56-.64-1.24-.66-2.1-1.92-.84-1.28-.84-2.88zm4.18%201.44q.64.48%201.3.48.66%200%201.32-.5.66-.5.66-1.48%200-.98-.62-1.46-.62-.48-1.34-.48-.72%200-1.34.5-.62.5-.62%201.48%200%20.96.64%201.46zm11.412-1.44q0%20.84.56%201.32.56.46%201.18.46.64%200%201.18-.36.56-.38.9-.38.6%200%201.46%201.06.46.58.46%201.04%200%20.76-1.1%201.42-1.14.8-2.8.8-1.86%200-3.58-1.34-.82-.64-1.34-1.7-.52-1.08-.52-2.36%200-1.3.52-2.34.52-1.06%201.34-1.7%201.66-1.32%203.54-1.32.76%200%201.48.22.72.2%201.06.4l.32.2q.36.24.56.38.52.4.52.92%200%20.5-.42%201.14-.72%201.1-1.38%201.1-.38%200-1.08-.44-.36-.34-1.04-.34-.66%200-1.24.48-.58.48-.58%201.34z%22%20fill%3D%22green%22/%3E%3C/svg%3E"/>
</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/dialects/dialect.py">Edit on GitHub</a>
<h1 class="modulename">
<a href="./../../sqlglot.html">sqlglot</a><wbr>.<a href="./../dialects.html">dialects</a><wbr>.dialect </h1>
<input id="mod-dialect-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-source-button" for="mod-dialect-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>
</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 class="kn">from</span> <span class="nn">enum</span> <span class="kn">import</span> <span class="n">Enum</span><span class="p">,</span> <span class="n">auto</span>
</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a><span class="kn">from</span> <span class="nn">functools</span> <span class="kn">import</span> <span class="n">reduce</span>
</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a>
</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span>
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a><span class="kn">from</span> <span class="nn">sqlglot._typing</span> <span class="kn">import</span> <span class="n">E</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.errors</span> <span class="kn">import</span> <span class="n">ParseError</span>
</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</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-11"><a href="#L-11"><span class="linenos"> 11</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">AutoName</span><span class="p">,</span> <span class="n">flatten</span><span class="p">,</span> <span class="n">seq_get</span>
</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a><span class="kn">from</span> <span class="nn">sqlglot.parser</span> <span class="kn">import</span> <span class="n">Parser</span>
</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a><span class="kn">from</span> <span class="nn">sqlglot.time</span> <span class="kn">import</span> <span class="n">TIMEZONES</span><span class="p">,</span> <span class="n">format_time</span>
</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a><span class="kn">from</span> <span class="nn">sqlglot.tokens</span> <span class="kn">import</span> <span class="n">Token</span><span class="p">,</span> <span class="n">Tokenizer</span><span class="p">,</span> <span class="n">TokenType</span>
</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a><span class="kn">from</span> <span class="nn">sqlglot.trie</span> <span class="kn">import</span> <span class="n">new_trie</span>
</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a>
</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a><span class="n">B</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">TypeVar</span><span class="p">(</span><span class="s2">&quot;B&quot;</span><span class="p">,</span> <span class="n">bound</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">)</span>
</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a>
</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a><span class="n">DATE_ADD_OR_DIFF</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsDiff</span><span class="p">]</span>
</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a><span class="n">DATE_ADD_OR_SUB</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">]</span>
</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a>
</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a>
</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a><span class="k">class</span> <span class="nc">Dialects</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">Enum</span><span class="p">):</span>
</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a> <span class="n">DIALECT</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a>
</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a> <span class="n">BIGQUERY</span> <span class="o">=</span> <span class="s2">&quot;bigquery&quot;</span>
</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="n">CLICKHOUSE</span> <span class="o">=</span> <span class="s2">&quot;clickhouse&quot;</span>
</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a> <span class="n">DATABRICKS</span> <span class="o">=</span> <span class="s2">&quot;databricks&quot;</span>
</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a> <span class="n">DRILL</span> <span class="o">=</span> <span class="s2">&quot;drill&quot;</span>
</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="n">DUCKDB</span> <span class="o">=</span> <span class="s2">&quot;duckdb&quot;</span>
</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="n">HIVE</span> <span class="o">=</span> <span class="s2">&quot;hive&quot;</span>
</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="n">MYSQL</span> <span class="o">=</span> <span class="s2">&quot;mysql&quot;</span>
</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="n">ORACLE</span> <span class="o">=</span> <span class="s2">&quot;oracle&quot;</span>
</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="n">POSTGRES</span> <span class="o">=</span> <span class="s2">&quot;postgres&quot;</span>
</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a> <span class="n">PRESTO</span> <span class="o">=</span> <span class="s2">&quot;presto&quot;</span>
</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="n">REDSHIFT</span> <span class="o">=</span> <span class="s2">&quot;redshift&quot;</span>
</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="n">SNOWFLAKE</span> <span class="o">=</span> <span class="s2">&quot;snowflake&quot;</span>
</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="n">SPARK</span> <span class="o">=</span> <span class="s2">&quot;spark&quot;</span>
</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="n">SPARK2</span> <span class="o">=</span> <span class="s2">&quot;spark2&quot;</span>
</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="n">SQLITE</span> <span class="o">=</span> <span class="s2">&quot;sqlite&quot;</span>
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="n">STARROCKS</span> <span class="o">=</span> <span class="s2">&quot;starrocks&quot;</span>
</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="n">TABLEAU</span> <span class="o">=</span> <span class="s2">&quot;tableau&quot;</span>
</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="n">TERADATA</span> <span class="o">=</span> <span class="s2">&quot;teradata&quot;</span>
</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="n">TRINO</span> <span class="o">=</span> <span class="s2">&quot;trino&quot;</span>
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="n">TSQL</span> <span class="o">=</span> <span class="s2">&quot;tsql&quot;</span>
</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="n">Doris</span> <span class="o">=</span> <span class="s2">&quot;doris&quot;</span>
</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a>
</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="k">class</span> <span class="nc">NormalizationStrategy</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">AutoName</span><span class="p">):</span>
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Specifies the strategy according to which identifiers should be normalized.&quot;&quot;&quot;</span>
</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a>
</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="n">LOWERCASE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span> <span class="c1"># Unquoted identifiers are lowercased</span>
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="n">UPPERCASE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span> <span class="c1"># Unquoted identifiers are uppercased</span>
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="n">CASE_SENSITIVE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span> <span class="c1"># Always case-sensitive, regardless of quotes</span>
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="n">CASE_INSENSITIVE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span> <span class="c1"># Always case-insensitive, regardless of quotes</span>
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a>
</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a>
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a><span class="k">class</span> <span class="nc">_Dialect</span><span class="p">(</span><span class="nb">type</span><span class="p">):</span>
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="n">classes</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">Dialect</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a>
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="k">def</span> <span class="fm">__eq__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="k">if</span> <span class="bp">cls</span> <span class="ow">is</span> <span class="n">other</span><span class="p">:</span>
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="k">return</span> <span class="bp">cls</span> <span class="ow">is</span> <span class="bp">cls</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Dialect</span><span class="p">):</span>
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="k">return</span> <span class="bp">cls</span> <span class="ow">is</span> <span class="nb">type</span><span class="p">(</span><span class="n">other</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">return</span> <span class="kc">False</span>
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a>
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="k">def</span> <span class="fm">__hash__</span><span class="p">(</span><span class="bp">cls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="k">return</span> <span class="nb">hash</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="vm">__name__</span><span class="o">.</span><span class="n">lower</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="nd">@classmethod</span>
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">key</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">Dialect</span><span class="p">]:</span>
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">classes</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a>
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="nd">@classmethod</span>
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="k">def</span> <span class="nf">get</span><span class="p">(</span>
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="bp">cls</span><span class="p">,</span> <span class="n">key</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">default</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">Dialect</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">Dialect</span><span class="p">]]:</span>
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">classes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">default</span><span class="p">)</span>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="k">def</span> <span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">clsname</span><span class="p">,</span> <span class="n">bases</span><span class="p">,</span> <span class="n">attrs</span><span class="p">):</span>
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">klass</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">clsname</span><span class="p">,</span> <span class="n">bases</span><span class="p">,</span> <span class="n">attrs</span><span class="p">)</span>
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="n">enum</span> <span class="o">=</span> <span class="n">Dialects</span><span class="o">.</span><span class="n">__members__</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">clsname</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">classes</span><span class="p">[</span><span class="n">enum</span><span class="o">.</span><span class="n">value</span> <span class="k">if</span> <span class="n">enum</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">clsname</span><span class="o">.</span><span class="n">lower</span><span class="p">()]</span> <span class="o">=</span> <span class="n">klass</span>
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a>
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">TIME_TRIE</span> <span class="o">=</span> <span class="n">new_trie</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">)</span>
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">FORMAT_TRIE</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="n">new_trie</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span><span class="p">)</span> <span class="k">if</span> <span class="n">klass</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span> <span class="k">else</span> <span class="n">klass</span><span class="o">.</span><span class="n">TIME_TRIE</span>
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="p">)</span>
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">INVERSE_TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span><span class="n">v</span><span class="p">:</span> <span class="n">k</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">INVERSE_TIME_TRIE</span> <span class="o">=</span> <span class="n">new_trie</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">INVERSE_TIME_MAPPING</span><span class="p">)</span>
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a>
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">INVERSE_ESCAPE_SEQUENCES</span> <span class="o">=</span> <span class="p">{</span><span class="n">v</span><span class="p">:</span> <span class="n">k</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">ESCAPE_SEQUENCES</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a>
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">tokenizer_class</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">klass</span><span class="p">,</span> <span class="s2">&quot;Tokenizer&quot;</span><span class="p">,</span> <span class="n">Tokenizer</span><span class="p">)</span>
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">parser_class</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">klass</span><span class="p">,</span> <span class="s2">&quot;Parser&quot;</span><span class="p">,</span> <span class="n">Parser</span><span class="p">)</span>
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">generator_class</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">klass</span><span class="p">,</span> <span class="s2">&quot;Generator&quot;</span><span class="p">,</span> <span class="n">Generator</span><span class="p">)</span>
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a>
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">QUOTE_END</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">_QUOTES</span><span class="o">.</span><span class="n">items</span><span class="p">())[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">IDENTIFIER_START</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">IDENTIFIER_END</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span>
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">_IDENTIFIERS</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="k">def</span> <span class="nf">get_start_end</span><span class="p">(</span><span class="n">token_type</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span>
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="p">(</span>
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span>
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="k">for</span> <span class="n">s</span><span class="p">,</span> <span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="k">if</span> <span class="n">t</span> <span class="o">==</span> <span class="n">token_type</span>
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="p">),</span>
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">),</span>
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="p">)</span>
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a>
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">BIT_START</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">BIT_END</span> <span class="o">=</span> <span class="n">get_start_end</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">)</span>
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">HEX_START</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">HEX_END</span> <span class="o">=</span> <span class="n">get_start_end</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">)</span>
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">BYTE_START</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">BYTE_END</span> <span class="o">=</span> <span class="n">get_start_end</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BYTE_STRING</span><span class="p">)</span>
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a>
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="k">if</span> <span class="n">enum</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;bigquery&quot;</span><span class="p">):</span>
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">generator_class</span><span class="o">.</span><span class="n">SELECT_KINDS</span> <span class="o">=</span> <span class="p">()</span>
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a>
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">klass</span><span class="o">.</span><span class="n">SUPPORTS_SEMI_ANTI_JOIN</span><span class="p">:</span>
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">parser_class</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">klass</span><span class="o">.</span><span class="n">parser_class</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">|</span> <span class="p">{</span>
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="p">}</span>
</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">return</span> <span class="n">klass</span>
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a>
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a>
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a><span class="k">class</span> <span class="nc">Dialect</span><span class="p">(</span><span class="n">metaclass</span><span class="o">=</span><span class="n">_Dialect</span><span class="p">):</span>
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="c1"># Determines the base index offset for arrays</span>
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">0</span>
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a>
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="c1"># If true unnest table aliases are considered only as column aliases</span>
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="n">UNNEST_COLUMN_ONLY</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a>
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="c1"># Determines whether or not the table alias comes after tablesample</span>
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="n">ALIAS_POST_TABLESAMPLE</span> <span class="o">=</span> <span class="kc">False</span>
</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="c1"># Specifies the strategy according to which identifiers should be normalized.</span>
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="n">NORMALIZATION_STRATEGY</span> <span class="o">=</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">LOWERCASE</span>
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a>
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="c1"># Determines whether or not an unquoted identifier can start with a digit</span>
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">False</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="c1"># Determines whether or not the DPIPE token (&#39;||&#39;) is a string concatenation operator</span>
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">DPIPE_IS_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a>
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="c1"># Determines whether or not CONCAT&#39;s arguments must be strings</span>
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">False</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="c1"># Determines whether or not user-defined data types are supported</span>
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a>
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="c1"># Determines whether or not SEMI/ANTI JOINs are supported</span>
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="n">SUPPORTS_SEMI_ANTI_JOIN</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a>
</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="c1"># Determines how function names are going to be normalized</span>
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;upper&quot;</span>
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a>
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="c1"># Determines whether the base comes first in the LOG function</span>
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">True</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 class="c1"># Indicates the default null ordering method to use if not explicitly set</span>
</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="c1"># Options are: &quot;nulls_are_small&quot;, &quot;nulls_are_large&quot;, &quot;nulls_are_last&quot;</span>
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_small&quot;</span>
</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="c1"># Whether the behavior of a / b depends on the types of a and b.</span>
</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="c1"># False means a / b is always float division.</span>
</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="c1"># True means a / b is integer division if both a and b are integers.</span>
</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="n">TYPED_DIVISION</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a>
</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="c1"># False means 1 / 0 throws an error.</span>
</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="c1"># True means 1 / 0 returns null.</span>
</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="n">SAFE_DIVISION</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a>
</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="c1"># A NULL arg in CONCAT yields NULL by default, but in some dialects it yields an empty string</span>
</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="n">CONCAT_COALESCE</span> <span class="o">=</span> <span class="kc">False</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">DATE_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;%Y-%m-</span><span class="si">%d</span><span class="s2">&#39;&quot;</span>
</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="n">DATEINT_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;%Y%m</span><span class="si">%d</span><span class="s2">&#39;&quot;</span>
</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="n">TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&#39;&quot;</span>
</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a>
</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="c1"># Custom time mappings in which the key represents dialect time format</span>
</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="c1"># and the value represents a python time format</span>
</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="n">TIME_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a>
</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/format-elements#format_model_rules_date_time</span>
</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="c1"># https://docs.teradata.com/r/Teradata-Database-SQL-Functions-Operators-Expressions-and-Predicates/March-2017/Data-Type-Conversions/Character-to-DATE-Conversion/Forcing-a-FORMAT-on-CAST-for-Converting-Character-to-DATE</span>
</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="c1"># special syntax cast(x as date format &#39;yyyy&#39;) defaults to time_mapping</span>
</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="n">FORMAT_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a>
</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="c1"># Mapping of an unescaped escape sequence to the corresponding character</span>
</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="n">ESCAPE_SEQUENCES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a>
</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="c1"># Columns that are auto-generated by the engine corresponding to this dialect</span>
</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="c1"># Such columns may be excluded from SELECT * queries, for example</span>
</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="n">PSEUDOCOLUMNS</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="o">=</span> <span class="nb">set</span><span class="p">()</span>
</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a>
</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="c1"># --- Autofilled ---</span>
</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a>
</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="n">tokenizer_class</span> <span class="o">=</span> <span class="n">Tokenizer</span>
</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="n">parser_class</span> <span class="o">=</span> <span class="n">Parser</span>
</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="n">generator_class</span> <span class="o">=</span> <span class="n">Generator</span>
</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a>
</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="c1"># A trie of the time_mapping keys</span>
</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="n">TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="n">FORMAT_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a>
</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="n">INVERSE_TIME_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="n">INVERSE_TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</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="n">INVERSE_ESCAPE_SEQUENCES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a>
</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="c1"># Delimiters for quotes, identifiers and the corresponding escape characters</span>
</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="n">QUOTE_START</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span>
</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="n">QUOTE_END</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span>
</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="n">IDENTIFIER_START</span> <span class="o">=</span> <span class="s1">&#39;&quot;&#39;</span>
</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="n">IDENTIFIER_END</span> <span class="o">=</span> <span class="s1">&#39;&quot;&#39;</span>
</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a>
</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="c1"># Delimiters for bit, hex and byte literals</span>
</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="n">BIT_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="n">BIT_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="n">HEX_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="n">HEX_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="n">BYTE_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="n">BYTE_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a>
</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="nd">@classmethod</span>
</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="k">def</span> <span class="nf">get_or_raise</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dialect</span><span class="p">:</span>
</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a><span class="sd"> Look up a dialect in the global dialect registry and return it if it exists.</span>
</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a>
</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a><span class="sd"> Args:</span>
</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a><span class="sd"> dialect: The target dialect. If this is a string, it can be optionally followed by</span>
</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a><span class="sd"> additional key-value pairs that are separated by commas and are used to specify</span>
</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a><span class="sd"> dialect settings, such as whether the dialect&#39;s identifiers are case-sensitive.</span>
</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a>
</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a><span class="sd"> Example:</span>
</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a><span class="sd"> &gt;&gt;&gt; dialect = dialect_class = get_or_raise(&quot;duckdb&quot;)</span>
</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a><span class="sd"> &gt;&gt;&gt; dialect = get_or_raise(&quot;mysql, normalization_strategy = case_sensitive&quot;)</span>
</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a>
</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a><span class="sd"> Returns:</span>
</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a><span class="sd"> The corresponding Dialect instance.</span>
</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a>
</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">dialect</span><span class="p">:</span>
</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">()</span>
</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="n">_Dialect</span><span class="p">):</span>
</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="k">return</span> <span class="n">dialect</span><span class="p">()</span>
</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="n">Dialect</span><span class="p">):</span>
</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="k">return</span> <span class="n">dialect</span>
</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="n">dialect_name</span><span class="p">,</span> <span class="o">*</span><span class="n">kv_pairs</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">)</span>
</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="n">v</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="p">(</span><span class="n">kv</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;=&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">kv</span> <span class="ow">in</span> <span class="n">kv_pairs</span><span class="p">)}</span>
</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="sa">f</span><span class="s2">&quot;Invalid dialect format: &#39;</span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&#39;. &quot;</span>
</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="s2">&quot;Please use the correct format: &#39;dialect [, k1 = v2 [, ...]]&#39;.&quot;</span>
</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="p">)</span>
</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a>
</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dialect_name</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown dialect &#39;</span><span class="si">{</span><span class="n">dialect_name</span><span class="si">}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a>
</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="n">result</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a>
</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid dialect type for &#39;</span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&#39;: &#39;</span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a>
</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="nd">@classmethod</span>
</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span>
</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</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-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</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-278"><a href="#L-278"><span class="linenos">278</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="nb">str</span><span class="p">):</span>
</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="k">return</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><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="c1"># the time formats are quoted</span>
</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">)</span>
</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="p">)</span>
</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a>
</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="k">return</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="n">format_time</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="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">))</span>
</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a>
</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="k">return</span> <span class="n">expression</span>
</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a>
</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="n">normalization_strategy</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;normalization_strategy&quot;</span><span class="p">)</span>
</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a>
</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="k">if</span> <span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NORMALIZATION_STRATEGY</span>
</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="o">=</span> <span class="n">NormalizationStrategy</span><span class="p">(</span><span class="n">normalization_strategy</span><span class="o">.</span><span class="n">upper</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">def</span> <span class="fm">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="c1"># Does not currently take dialect state into account</span>
</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="k">return</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="n">other</span>
</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a>
</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="k">def</span> <span class="fm">__hash__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="c1"># Does not currently take dialect state into account</span>
</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="k">return</span> <span class="nb">hash</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">))</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 class="k">def</span> <span class="nf">normalize_identifier</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a><span class="sd"> Transforms an identifier in a way that resembles how it&#39;d be resolved by this dialect.</span>
</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="sd"> For example, an identifier like FoO would be resolved as foo in Postgres, because it</span>
</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a><span class="sd"> lowercases all unquoted identifiers. On the other hand, Snowflake uppercases them, so</span>
</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a><span class="sd"> it would resolve it as FOO. If it was quoted, it&#39;d need to be treated as case-sensitive,</span>
</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a><span class="sd"> and so any normalization would be prohibited in order to avoid &quot;breaking&quot; the identifier.</span>
</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a>
</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a><span class="sd"> There are also dialects like Spark, which are case-insensitive even when quotes are</span>
</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a><span class="sd"> present, and dialects like MySQL, whose resolution rules match those employed by the</span>
</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a><span class="sd"> underlying operating system, for example they may always be case-sensitive in Linux.</span>
</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a>
</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a><span class="sd"> Finally, the normalization behavior of some engines can even be controlled through flags,</span>
</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a><span class="sd"> like in Redshift&#39;s case, where users can explicitly set enable_case_sensitive_identifier.</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="sd"> SQLGlot aims to understand and handle all of these different behaviors gracefully, so</span>
</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a><span class="sd"> that it can analyze queries in the optimizer and successfully capture their semantics.</span>
</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="L-325"><a href="#L-325"><span class="linenos">325</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">Identifier</span><span class="p">)</span>
</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_SENSITIVE</span>
</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="ow">and</span> <span class="p">(</span>
</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span>
</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_INSENSITIVE</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="p">):</span>
</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="s2">&quot;this&quot;</span><span class="p">,</span>
</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">UPPERCASE</span>
</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span>
</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="p">)</span>
</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a>
</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="k">return</span> <span class="n">expression</span>
</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a>
</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="k">def</span> <span class="nf">case_sensitive</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text contains any case sensitive characters, based on the dialect&#39;s rules.&quot;&quot;&quot;</span>
</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_INSENSITIVE</span><span class="p">:</span>
</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a>
</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="n">unsafe</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="nb">str</span><span class="o">.</span><span class="n">islower</span>
</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">UPPERCASE</span>
</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="k">else</span> <span class="nb">str</span><span class="o">.</span><span class="n">isupper</span>
</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="p">)</span>
</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="n">unsafe</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">text</span><span class="p">)</span>
</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a>
</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</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 class="sd"> Args:</span>
</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a><span class="sd"> text: The text to check.</span>
</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a><span class="sd"> identify:</span>
</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a>
</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a><span class="sd"> Returns:</span>
</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a><span class="sd"> Whether or not the given text can be identified.</span>
</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="k">return</span> <span class="kc">True</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 class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a>
</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a>
</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="k">def</span> <span class="nf">quote_identifier</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">E</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</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="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">Identifier</span><span class="p">):</span>
</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="s2">&quot;quoted&quot;</span><span class="p">,</span>
</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="n">identify</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="p">)</span>
</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a>
</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="k">return</span> <span class="n">expression</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">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</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">Optional</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-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">),</span> <span class="n">sql</span><span class="p">)</span>
</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">parse_into</span><span class="p">(</span>
</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression_type</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="p">)</span> <span class="o">-&gt;</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">Optional</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-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">parse_into</span><span class="p">(</span><span class="n">expression_type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">),</span> <span class="n">sql</span><span class="p">)</span>
</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a>
</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="k">def</span> <span class="nf">generate</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="n">copy</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">generator</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">)</span>
</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a>
</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="k">def</span> <span class="nf">transpile</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="k">return</span> <span class="p">[</span>
</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</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">opts</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="p">]</span>
</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a>
</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="k">def</span> <span class="nf">tokenize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenizer</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a>
</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="nd">@property</span>
</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a> <span class="k">def</span> <span class="nf">tokenizer</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tokenizer</span><span class="p">:</span>
</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;_tokenizer&quot;</span><span class="p">):</span>
</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_tokenizer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokenizer</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">def</span> <span class="nf">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Parser</span><span class="p">:</span>
</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
</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">generator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Generator</span><span class="p">:</span>
</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">generator_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a>
</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a>
</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a><span class="n">DialectType</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Dialect</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">Dialect</span><span class="p">],</span> <span class="kc">None</span><span class="p">]</span>
</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a>
</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="k">def</span> <span class="nf">rename_func</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">-&gt;</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-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="k">return</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">flatten</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">values</span><span class="p">()))</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><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a><span class="k">def</span> <span class="nf">approx_count_distinct_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">ApproxDistinct</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-424"><a href="#L-424"><span class="linenos">424</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">&quot;accuracy&quot;</span><span class="p">):</span>
</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;APPROX_COUNT_DISTINCT does not support accuracy&quot;</span><span class="p">)</span>
</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a>
</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="k">def</span> <span class="nf">if_sql</span><span class="p">(</span>
</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;IF&quot;</span><span class="p">,</span> <span class="n">false_value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a><span class="p">)</span> <span class="o">-&gt;</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">If</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a> <span class="k">def</span> <span class="nf">_if_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">If</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a> <span class="n">name</span><span class="p">,</span>
</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a> <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">&quot;true&quot;</span><span class="p">),</span>
</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a> <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">&quot;false&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">false_value</span><span class="p">,</span>
</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="p">)</span>
</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a>
</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a> <span class="k">return</span> <span class="n">_if_sql</span>
</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><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a><span class="k">def</span> <span class="nf">arrow_json_extract_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">JSONExtract</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;-&gt;&quot;</span><span class="p">)</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><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a><span class="k">def</span> <span class="nf">arrow_json_extract_scalar_sql</span><span class="p">(</span>
</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">JSONExtractScalar</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span>
</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;-&gt;&gt;&quot;</span><span class="p">)</span>
</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a>
</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a>
</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a><span class="k">def</span> <span class="nf">inline_array_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Array</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;[</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">]&quot;</span>
</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a>
</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">def</span> <span class="nf">no_ilike_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">ILike</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">like_sql</span><span class="p">(</span>
</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Like</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">Lower</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">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">expression</span><span class="p">)</span>
</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a> <span class="p">)</span>
</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a>
</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a>
</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a><span class="k">def</span> <span class="nf">no_paren_current_date_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">CurrentDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a> <span class="n">zone</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CURRENT_DATE AT TIME ZONE </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">zone</span> <span class="k">else</span> <span class="s2">&quot;CURRENT_DATE&quot;</span>
</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a>
</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 class="k">def</span> <span class="nf">no_recursive_cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-469"><a href="#L-469"><span class="linenos">469</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">&quot;recursive&quot;</span><span class="p">):</span>
</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Recursive CTEs are unsupported&quot;</span><span class="p">)</span>
</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;recursive&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">with_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a>
</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a>
</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a><span class="k">def</span> <span class="nf">no_safe_divide_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">SafeDivide</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a> <span class="n">n</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="n">d</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;IF(</span><span class="si">{</span><span class="n">d</span><span class="si">}</span><span class="s2"> &lt;&gt; 0, </span><span class="si">{</span><span class="n">n</span><span class="si">}</span><span class="s2"> / </span><span class="si">{</span><span class="n">d</span><span class="si">}</span><span class="s2">, NULL)&quot;</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><span id="L-481"><a href="#L-481"><span class="linenos">481</span></a><span class="k">def</span> <span class="nf">no_tablesample_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">TableSample</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;TABLESAMPLE unsupported&quot;</span><span class="p">)</span>
</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a>
</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a>
</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a><span class="k">def</span> <span class="nf">no_pivot_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Pivot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;PIVOT unsupported&quot;</span><span class="p">)</span>
</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a>
</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="k">def</span> <span class="nf">no_trycast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">TryCast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a>
</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="k">def</span> <span class="nf">no_properties_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Properties unsupported&quot;</span><span class="p">)</span>
</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a>
</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a>
</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a><span class="k">def</span> <span class="nf">no_comment_column_constraint_sql</span><span class="p">(</span>
</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">CommentColumnConstraint</span>
</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;CommentColumnConstraint unsupported&quot;</span><span class="p">)</span>
</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a>
</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a>
</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a><span class="k">def</span> <span class="nf">no_map_from_entries_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">MapFromEntries</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;MAP_FROM_ENTRIES unsupported&quot;</span><span class="p">)</span>
</span><span id="L-509"><a href="#L-509"><span class="linenos">509</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a>
</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">def</span> <span class="nf">str_position_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">StrPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="L-514"><a href="#L-514"><span class="linenos">514</span></a> <span class="n">substr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;substr&quot;</span><span class="p">)</span>
</span><span id="L-515"><a href="#L-515"><span class="linenos">515</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
</span><span id="L-516"><a href="#L-516"><span class="linenos">516</span></a> <span class="k">if</span> <span class="n">position</span><span class="p">:</span>
</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STRPOS(SUBSTR(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="n">substr</span><span class="si">}</span><span class="s2">) + </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2"> - 1&quot;</span>
</span><span id="L-518"><a href="#L-518"><span class="linenos">518</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STRPOS(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">substr</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a>
</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a>
</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a><span class="k">def</span> <span class="nf">struct_extract_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">StructExtract</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a> <span class="k">return</span> <span class="p">(</span>
</span><span id="L-523"><a href="#L-523"><span class="linenos">523</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</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">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="p">))</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-524"><a href="#L-524"><span class="linenos">524</span></a> <span class="p">)</span>
</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a>
</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a>
</span><span id="L-527"><a href="#L-527"><span class="linenos">527</span></a><span class="k">def</span> <span class="nf">var_map_sql</span><span class="p">(</span>
</span><span id="L-528"><a href="#L-528"><span class="linenos">528</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Map</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">,</span> <span class="n">map_func_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;MAP&quot;</span>
</span><span id="L-529"><a href="#L-529"><span class="linenos">529</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-530"><a href="#L-530"><span class="linenos">530</span></a> <span class="n">keys</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">&quot;keys&quot;</span><span class="p">]</span>
</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a> <span class="n">values</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">&quot;values&quot;</span><span class="p">]</span>
</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a>
</span><span id="L-533"><a href="#L-533"><span class="linenos">533</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">keys</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
</span><span id="L-534"><a href="#L-534"><span class="linenos">534</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Cannot convert array columns into map.&quot;</span><span class="p">)</span>
</span><span id="L-535"><a href="#L-535"><span class="linenos">535</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">map_func_name</span><span class="p">,</span> <span class="n">keys</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span>
</span><span id="L-536"><a href="#L-536"><span class="linenos">536</span></a>
</span><span id="L-537"><a href="#L-537"><span class="linenos">537</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-538"><a href="#L-538"><span class="linenos">538</span></a> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">keys</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">values</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
</span><span id="L-539"><a href="#L-539"><span class="linenos">539</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">key</span><span class="p">))</span>
</span><span id="L-540"><a href="#L-540"><span class="linenos">540</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
</span><span id="L-541"><a href="#L-541"><span class="linenos">541</span></a>
</span><span id="L-542"><a href="#L-542"><span class="linenos">542</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">map_func_name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
</span><span id="L-543"><a href="#L-543"><span class="linenos">543</span></a>
</span><span id="L-544"><a href="#L-544"><span class="linenos">544</span></a>
</span><span id="L-545"><a href="#L-545"><span class="linenos">545</span></a><span class="k">def</span> <span class="nf">format_time_lambda</span><span class="p">(</span>
</span><span id="L-546"><a href="#L-546"><span class="linenos">546</span></a> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">default</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-547"><a href="#L-547"><span class="linenos">547</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</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">E</span><span class="p">]:</span>
</span><span id="L-548"><a href="#L-548"><span class="linenos">548</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Helper used for time expressions.</span>
</span><span id="L-549"><a href="#L-549"><span class="linenos">549</span></a>
</span><span id="L-550"><a href="#L-550"><span class="linenos">550</span></a><span class="sd"> Args:</span>
</span><span id="L-551"><a href="#L-551"><span class="linenos">551</span></a><span class="sd"> exp_class: the expression class to instantiate.</span>
</span><span id="L-552"><a href="#L-552"><span class="linenos">552</span></a><span class="sd"> dialect: target sql dialect.</span>
</span><span id="L-553"><a href="#L-553"><span class="linenos">553</span></a><span class="sd"> default: the default format, True being time.</span>
</span><span id="L-554"><a href="#L-554"><span class="linenos">554</span></a>
</span><span id="L-555"><a href="#L-555"><span class="linenos">555</span></a><span class="sd"> Returns:</span>
</span><span id="L-556"><a href="#L-556"><span class="linenos">556</span></a><span class="sd"> A callable that can be used to return the appropriately formatted time expression.</span>
</span><span id="L-557"><a href="#L-557"><span class="linenos">557</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-558"><a href="#L-558"><span class="linenos">558</span></a>
</span><span id="L-559"><a href="#L-559"><span class="linenos">559</span></a> <span class="k">def</span> <span class="nf">_format_time</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">):</span>
</span><span id="L-560"><a href="#L-560"><span class="linenos">560</span></a> <span class="k">return</span> <span class="n">exp_class</span><span class="p">(</span>
</span><span id="L-561"><a href="#L-561"><span class="linenos">561</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="L-562"><a href="#L-562"><span class="linenos">562</span></a> <span class="nb">format</span><span class="o">=</span><span class="n">Dialect</span><span class="p">[</span><span class="n">dialect</span><span class="p">]</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span>
</span><span id="L-563"><a href="#L-563"><span class="linenos">563</span></a> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-564"><a href="#L-564"><span class="linenos">564</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">Dialect</span><span class="p">[</span><span class="n">dialect</span><span class="p">]</span><span class="o">.</span><span class="n">TIME_FORMAT</span> <span class="k">if</span> <span class="n">default</span> <span class="ow">is</span> <span class="kc">True</span> <span class="k">else</span> <span class="n">default</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
</span><span id="L-565"><a href="#L-565"><span class="linenos">565</span></a> <span class="p">),</span>
</span><span id="L-566"><a href="#L-566"><span class="linenos">566</span></a> <span class="p">)</span>
</span><span id="L-567"><a href="#L-567"><span class="linenos">567</span></a>
</span><span id="L-568"><a href="#L-568"><span class="linenos">568</span></a> <span class="k">return</span> <span class="n">_format_time</span>
</span><span id="L-569"><a href="#L-569"><span class="linenos">569</span></a>
</span><span id="L-570"><a href="#L-570"><span class="linenos">570</span></a>
</span><span id="L-571"><a href="#L-571"><span class="linenos">571</span></a><span class="k">def</span> <span class="nf">time_format</span><span class="p">(</span>
</span><span id="L-572"><a href="#L-572"><span class="linenos">572</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="L-573"><a href="#L-573"><span class="linenos">573</span></a><span class="p">)</span> <span class="o">-&gt;</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">UnixToStr</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
</span><span id="L-574"><a href="#L-574"><span class="linenos">574</span></a> <span class="k">def</span> <span class="nf">_time_format</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">UnixToStr</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
</span><span id="L-575"><a href="#L-575"><span class="linenos">575</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-576"><a href="#L-576"><span class="linenos">576</span></a><span class="sd"> Returns the time format for a given expression, unless it&#39;s equivalent</span>
</span><span id="L-577"><a href="#L-577"><span class="linenos">577</span></a><span class="sd"> to the default time format of the dialect of interest.</span>
</span><span id="L-578"><a href="#L-578"><span class="linenos">578</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-579"><a href="#L-579"><span class="linenos">579</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-580"><a href="#L-580"><span class="linenos">580</span></a> <span class="k">return</span> <span class="n">time_format</span> <span class="k">if</span> <span class="n">time_format</span> <span class="o">!=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">TIME_FORMAT</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-581"><a href="#L-581"><span class="linenos">581</span></a>
</span><span id="L-582"><a href="#L-582"><span class="linenos">582</span></a> <span class="k">return</span> <span class="n">_time_format</span>
</span><span id="L-583"><a href="#L-583"><span class="linenos">583</span></a>
</span><span id="L-584"><a href="#L-584"><span class="linenos">584</span></a>
</span><span id="L-585"><a href="#L-585"><span class="linenos">585</span></a><span class="k">def</span> <span class="nf">create_with_partitions_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-586"><a href="#L-586"><span class="linenos">586</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-587"><a href="#L-587"><span class="linenos">587</span></a><span class="sd"> In Hive and Spark, the PARTITIONED BY property acts as an extension of a table&#39;s schema. When the</span>
</span><span id="L-588"><a href="#L-588"><span class="linenos">588</span></a><span class="sd"> PARTITIONED BY value is an array of column names, they are transformed into a schema. The corresponding</span>
</span><span id="L-589"><a href="#L-589"><span class="linenos">589</span></a><span class="sd"> columns are removed from the create statement.</span>
</span><span id="L-590"><a href="#L-590"><span class="linenos">590</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-591"><a href="#L-591"><span class="linenos">591</span></a> <span class="n">has_schema</span> <span class="o">=</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">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">)</span>
</span><span id="L-592"><a href="#L-592"><span class="linenos">592</span></a> <span class="n">is_partitionable</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">&quot;kind&quot;</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;TABLE&quot;</span><span class="p">,</span> <span class="s2">&quot;VIEW&quot;</span><span class="p">)</span>
</span><span id="L-593"><a href="#L-593"><span class="linenos">593</span></a>
</span><span id="L-594"><a href="#L-594"><span class="linenos">594</span></a> <span class="k">if</span> <span class="n">has_schema</span> <span class="ow">and</span> <span class="n">is_partitionable</span><span class="p">:</span>
</span><span id="L-595"><a href="#L-595"><span class="linenos">595</span></a> <span class="n">prop</span> <span class="o">=</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">PartitionedByProperty</span><span class="p">)</span>
</span><span id="L-596"><a href="#L-596"><span class="linenos">596</span></a> <span class="k">if</span> <span class="n">prop</span> <span class="ow">and</span> <span class="n">prop</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prop</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
</span><span id="L-597"><a href="#L-597"><span class="linenos">597</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-598"><a href="#L-598"><span class="linenos">598</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="p">{</span><span class="n">v</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">prop</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">}</span>
</span><span id="L-599"><a href="#L-599"><span class="linenos">599</span></a> <span class="n">partitions</span> <span class="o">=</span> <span class="p">[</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">]</span>
</span><span id="L-600"><a href="#L-600"><span class="linenos">600</span></a> <span class="n">schema</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</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">schema</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">e</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">partitions</span><span class="p">])</span>
</span><span id="L-601"><a href="#L-601"><span class="linenos">601</span></a> <span class="n">prop</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">PartitionedByProperty</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">Schema</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">partitions</span><span class="p">)))</span>
</span><span id="L-602"><a href="#L-602"><span class="linenos">602</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
</span><span id="L-603"><a href="#L-603"><span class="linenos">603</span></a>
</span><span id="L-604"><a href="#L-604"><span class="linenos">604</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-605"><a href="#L-605"><span class="linenos">605</span></a>
</span><span id="L-606"><a href="#L-606"><span class="linenos">606</span></a>
</span><span id="L-607"><a href="#L-607"><span class="linenos">607</span></a><span class="k">def</span> <span class="nf">parse_date_delta</span><span class="p">(</span>
</span><span id="L-608"><a href="#L-608"><span class="linenos">608</span></a> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">unit_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-609"><a href="#L-609"><span class="linenos">609</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</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">E</span><span class="p">]:</span>
</span><span id="L-610"><a href="#L-610"><span class="linenos">610</span></a> <span class="k">def</span> <span class="nf">inner_func</span><span class="p">(</span><span class="n">args</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="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
</span><span id="L-611"><a href="#L-611"><span class="linenos">611</span></a> <span class="n">unit_based</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span>
</span><span id="L-612"><a href="#L-612"><span class="linenos">612</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="k">if</span> <span class="n">unit_based</span> <span class="k">else</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="L-613"><a href="#L-613"><span class="linenos">613</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">unit_based</span> <span class="k">else</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">&quot;DAY&quot;</span><span class="p">)</span>
</span><span id="L-614"><a href="#L-614"><span class="linenos">614</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">unit_mapping</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">unit</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="n">unit</span><span class="o">.</span><span class="n">name</span><span class="p">))</span> <span class="k">if</span> <span class="n">unit_mapping</span> <span class="k">else</span> <span class="n">unit</span>
</span><span id="L-615"><a href="#L-615"><span class="linenos">615</span></a> <span class="k">return</span> <span class="n">exp_class</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
</span><span id="L-616"><a href="#L-616"><span class="linenos">616</span></a>
</span><span id="L-617"><a href="#L-617"><span class="linenos">617</span></a> <span class="k">return</span> <span class="n">inner_func</span>
</span><span id="L-618"><a href="#L-618"><span class="linenos">618</span></a>
</span><span id="L-619"><a href="#L-619"><span class="linenos">619</span></a>
</span><span id="L-620"><a href="#L-620"><span class="linenos">620</span></a><span class="k">def</span> <span class="nf">parse_date_delta_with_interval</span><span class="p">(</span>
</span><span id="L-621"><a href="#L-621"><span class="linenos">621</span></a> <span class="n">expression_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span>
</span><span id="L-622"><a href="#L-622"><span class="linenos">622</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</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">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]]:</span>
</span><span id="L-623"><a href="#L-623"><span class="linenos">623</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="n">args</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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]:</span>
</span><span id="L-624"><a href="#L-624"><span class="linenos">624</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">2</span><span class="p">:</span>
</span><span id="L-625"><a href="#L-625"><span class="linenos">625</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-626"><a href="#L-626"><span class="linenos">626</span></a>
</span><span id="L-627"><a href="#L-627"><span class="linenos">627</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
</span><span id="L-628"><a href="#L-628"><span class="linenos">628</span></a>
</span><span id="L-629"><a href="#L-629"><span class="linenos">629</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">interval</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">):</span>
</span><span id="L-630"><a href="#L-630"><span class="linenos">630</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;INTERVAL expression expected but got &#39;</span><span class="si">{</span><span class="n">interval</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
</span><span id="L-631"><a href="#L-631"><span class="linenos">631</span></a>
</span><span id="L-632"><a href="#L-632"><span class="linenos">632</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">interval</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-633"><a href="#L-633"><span class="linenos">633</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
</span><span id="L-634"><a href="#L-634"><span class="linenos">634</span></a> <span class="n">expression</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-635"><a href="#L-635"><span class="linenos">635</span></a>
</span><span id="L-636"><a href="#L-636"><span class="linenos">636</span></a> <span class="k">return</span> <span class="n">expression_class</span><span class="p">(</span>
</span><span id="L-637"><a href="#L-637"><span class="linenos">637</span></a> <span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">0</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">unit</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">string</span><span class="p">(</span><span class="n">interval</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">))</span>
</span><span id="L-638"><a href="#L-638"><span class="linenos">638</span></a> <span class="p">)</span>
</span><span id="L-639"><a href="#L-639"><span class="linenos">639</span></a>
</span><span id="L-640"><a href="#L-640"><span class="linenos">640</span></a> <span class="k">return</span> <span class="n">func</span>
</span><span id="L-641"><a href="#L-641"><span class="linenos">641</span></a>
</span><span id="L-642"><a href="#L-642"><span class="linenos">642</span></a>
</span><span id="L-643"><a href="#L-643"><span class="linenos">643</span></a><span class="k">def</span> <span class="nf">date_trunc_to_time</span><span class="p">(</span><span class="n">args</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="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span>
</span><span id="L-644"><a href="#L-644"><span class="linenos">644</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="L-645"><a href="#L-645"><span class="linenos">645</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-646"><a href="#L-646"><span class="linenos">646</span></a>
</span><span id="L-647"><a href="#L-647"><span class="linenos">647</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</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="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;date&quot;</span><span class="p">):</span>
</span><span id="L-648"><a href="#L-648"><span class="linenos">648</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">(</span><span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-649"><a href="#L-649"><span class="linenos">649</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
</span><span id="L-650"><a href="#L-650"><span class="linenos">650</span></a>
</span><span id="L-651"><a href="#L-651"><span class="linenos">651</span></a>
</span><span id="L-652"><a href="#L-652"><span class="linenos">652</span></a><span class="k">def</span> <span class="nf">date_add_interval_sql</span><span class="p">(</span>
</span><span id="L-653"><a href="#L-653"><span class="linenos">653</span></a> <span class="n">data_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="nb">str</span>
</span><span id="L-654"><a href="#L-654"><span class="linenos">654</span></a><span class="p">)</span> <span class="o">-&gt;</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-655"><a href="#L-655"><span class="linenos">655</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-656"><a href="#L-656"><span class="linenos">656</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="L-657"><a href="#L-657"><span class="linenos">657</span></a> <span class="n">unit</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">&quot;unit&quot;</span><span class="p">)</span>
</span><span id="L-658"><a href="#L-658"><span class="linenos">658</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;DAY&quot;</span><span class="p">)</span>
</span><span id="L-659"><a href="#L-659"><span class="linenos">659</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
</span><span id="L-660"><a href="#L-660"><span class="linenos">660</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">data_type</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">interval</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-661"><a href="#L-661"><span class="linenos">661</span></a>
</span><span id="L-662"><a href="#L-662"><span class="linenos">662</span></a> <span class="k">return</span> <span class="n">func</span>
</span><span id="L-663"><a href="#L-663"><span class="linenos">663</span></a>
</span><span id="L-664"><a href="#L-664"><span class="linenos">664</span></a>
</span><span id="L-665"><a href="#L-665"><span class="linenos">665</span></a><span class="k">def</span> <span class="nf">timestamptrunc_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">TimestampTrunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-666"><a href="#L-666"><span class="linenos">666</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="L-667"><a href="#L-667"><span class="linenos">667</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</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="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-668"><a href="#L-668"><span class="linenos">668</span></a> <span class="p">)</span>
</span><span id="L-669"><a href="#L-669"><span class="linenos">669</span></a>
</span><span id="L-670"><a href="#L-670"><span class="linenos">670</span></a>
</span><span id="L-671"><a href="#L-671"><span class="linenos">671</span></a><span class="k">def</span> <span class="nf">no_timestamp_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Timestamp</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-672"><a href="#L-672"><span class="linenos">672</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">:</span>
</span><span id="L-673"><a href="#L-673"><span class="linenos">673</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">to</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">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">))</span>
</span><span id="L-674"><a href="#L-674"><span class="linenos">674</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;expression&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="n">TIMEZONES</span><span class="p">:</span>
</span><span id="L-675"><a href="#L-675"><span class="linenos">675</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
</span><span id="L-676"><a href="#L-676"><span class="linenos">676</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">(</span>
</span><span id="L-677"><a href="#L-677"><span class="linenos">677</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</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">to</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">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">),</span>
</span><span id="L-678"><a href="#L-678"><span class="linenos">678</span></a> <span class="n">zone</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
</span><span id="L-679"><a href="#L-679"><span class="linenos">679</span></a> <span class="p">)</span>
</span><span id="L-680"><a href="#L-680"><span class="linenos">680</span></a> <span class="p">)</span>
</span><span id="L-681"><a href="#L-681"><span class="linenos">681</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-682"><a href="#L-682"><span class="linenos">682</span></a>
</span><span id="L-683"><a href="#L-683"><span class="linenos">683</span></a>
</span><span id="L-684"><a href="#L-684"><span class="linenos">684</span></a><span class="k">def</span> <span class="nf">locate_to_strposition</span><span class="p">(</span><span class="n">args</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="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="L-685"><a href="#L-685"><span class="linenos">685</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
</span><span id="L-686"><a href="#L-686"><span class="linenos">686</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
</span><span id="L-687"><a href="#L-687"><span class="linenos">687</span></a> <span class="p">)</span>
</span><span id="L-688"><a href="#L-688"><span class="linenos">688</span></a>
</span><span id="L-689"><a href="#L-689"><span class="linenos">689</span></a>
</span><span id="L-690"><a href="#L-690"><span class="linenos">690</span></a><span class="k">def</span> <span class="nf">strposition_to_locate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">StrPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-691"><a href="#L-691"><span class="linenos">691</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="L-692"><a href="#L-692"><span class="linenos">692</span></a> <span class="s2">&quot;LOCATE&quot;</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">&quot;substr&quot;</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">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">&quot;position&quot;</span><span class="p">)</span>
</span><span id="L-693"><a href="#L-693"><span class="linenos">693</span></a> <span class="p">)</span>
</span><span id="L-694"><a href="#L-694"><span class="linenos">694</span></a>
</span><span id="L-695"><a href="#L-695"><span class="linenos">695</span></a>
</span><span id="L-696"><a href="#L-696"><span class="linenos">696</span></a><span class="k">def</span> <span class="nf">left_to_substring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Left</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-697"><a href="#L-697"><span class="linenos">697</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
</span><span id="L-698"><a href="#L-698"><span class="linenos">698</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
</span><span id="L-699"><a href="#L-699"><span class="linenos">699</span></a> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</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="mi">1</span><span class="p">),</span> <span class="n">length</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
</span><span id="L-700"><a href="#L-700"><span class="linenos">700</span></a> <span class="p">)</span>
</span><span id="L-701"><a href="#L-701"><span class="linenos">701</span></a> <span class="p">)</span>
</span><span id="L-702"><a href="#L-702"><span class="linenos">702</span></a>
</span><span id="L-703"><a href="#L-703"><span class="linenos">703</span></a>
</span><span id="L-704"><a href="#L-704"><span class="linenos">704</span></a><span class="k">def</span> <span class="nf">right_to_substring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Left</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-705"><a href="#L-705"><span class="linenos">705</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
</span><span id="L-706"><a href="#L-706"><span class="linenos">706</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
</span><span id="L-707"><a href="#L-707"><span class="linenos">707</span></a> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-708"><a href="#L-708"><span class="linenos">708</span></a> <span class="n">start</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="o">-</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</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="mi">1</span><span class="p">),</span>
</span><span id="L-709"><a href="#L-709"><span class="linenos">709</span></a> <span class="p">)</span>
</span><span id="L-710"><a href="#L-710"><span class="linenos">710</span></a> <span class="p">)</span>
</span><span id="L-711"><a href="#L-711"><span class="linenos">711</span></a>
</span><span id="L-712"><a href="#L-712"><span class="linenos">712</span></a>
</span><span id="L-713"><a href="#L-713"><span class="linenos">713</span></a><span class="k">def</span> <span class="nf">timestrtotime_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">TimeStrToTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-714"><a href="#L-714"><span class="linenos">714</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;timestamp&quot;</span><span class="p">))</span>
</span><span id="L-715"><a href="#L-715"><span class="linenos">715</span></a>
</span><span id="L-716"><a href="#L-716"><span class="linenos">716</span></a>
</span><span id="L-717"><a href="#L-717"><span class="linenos">717</span></a><span class="k">def</span> <span class="nf">datestrtodate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">DateStrToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-718"><a href="#L-718"><span class="linenos">718</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;date&quot;</span><span class="p">))</span>
</span><span id="L-719"><a href="#L-719"><span class="linenos">719</span></a>
</span><span id="L-720"><a href="#L-720"><span class="linenos">720</span></a>
</span><span id="L-721"><a href="#L-721"><span class="linenos">721</span></a><span class="c1"># Used for Presto and Duckdb which use functions that don&#39;t support charset, and assume utf-8</span>
</span><span id="L-722"><a href="#L-722"><span class="linenos">722</span></a><span class="k">def</span> <span class="nf">encode_decode_sql</span><span class="p">(</span>
</span><span id="L-723"><a href="#L-723"><span class="linenos">723</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">replace</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-724"><a href="#L-724"><span class="linenos">724</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-725"><a href="#L-725"><span class="linenos">725</span></a> <span class="n">charset</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">&quot;charset&quot;</span><span class="p">)</span>
</span><span id="L-726"><a href="#L-726"><span class="linenos">726</span></a> <span class="k">if</span> <span class="n">charset</span> <span class="ow">and</span> <span class="n">charset</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">&quot;utf-8&quot;</span><span class="p">:</span>
</span><span id="L-727"><a href="#L-727"><span class="linenos">727</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected utf-8 character set, got </span><span class="si">{</span><span class="n">charset</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
</span><span id="L-728"><a href="#L-728"><span class="linenos">728</span></a>
</span><span id="L-729"><a href="#L-729"><span class="linenos">729</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">name</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">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">&quot;replace&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">replace</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
</span><span id="L-730"><a href="#L-730"><span class="linenos">730</span></a>
</span><span id="L-731"><a href="#L-731"><span class="linenos">731</span></a>
</span><span id="L-732"><a href="#L-732"><span class="linenos">732</span></a><span class="k">def</span> <span class="nf">min_or_least</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Min</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-733"><a href="#L-733"><span class="linenos">733</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;LEAST&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;MIN&quot;</span>
</span><span id="L-734"><a href="#L-734"><span class="linenos">734</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</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-735"><a href="#L-735"><span class="linenos">735</span></a>
</span><span id="L-736"><a href="#L-736"><span class="linenos">736</span></a>
</span><span id="L-737"><a href="#L-737"><span class="linenos">737</span></a><span class="k">def</span> <span class="nf">max_or_greatest</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Max</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-738"><a href="#L-738"><span class="linenos">738</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;GREATEST&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;MAX&quot;</span>
</span><span id="L-739"><a href="#L-739"><span class="linenos">739</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</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-740"><a href="#L-740"><span class="linenos">740</span></a>
</span><span id="L-741"><a href="#L-741"><span class="linenos">741</span></a>
</span><span id="L-742"><a href="#L-742"><span class="linenos">742</span></a><span class="k">def</span> <span class="nf">count_if_to_sum</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">CountIf</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-743"><a href="#L-743"><span class="linenos">743</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-744"><a href="#L-744"><span class="linenos">744</span></a>
</span><span id="L-745"><a href="#L-745"><span class="linenos">745</span></a> <span class="k">if</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">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">):</span>
</span><span id="L-746"><a href="#L-746"><span class="linenos">746</span></a> <span class="n">cond</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">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="L-747"><a href="#L-747"><span class="linenos">747</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DISTINCT is not supported when converting COUNT_IF to SUM&quot;</span><span class="p">)</span>
</span><span id="L-748"><a href="#L-748"><span class="linenos">748</span></a>
</span><span id="L-749"><a href="#L-749"><span class="linenos">749</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;sum&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;if&quot;</span><span class="p">,</span> <span class="n">cond</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
</span><span id="L-750"><a href="#L-750"><span class="linenos">750</span></a>
</span><span id="L-751"><a href="#L-751"><span class="linenos">751</span></a>
</span><span id="L-752"><a href="#L-752"><span class="linenos">752</span></a><span class="k">def</span> <span class="nf">trim_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Trim</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-753"><a href="#L-753"><span class="linenos">753</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="L-754"><a href="#L-754"><span class="linenos">754</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
</span><span id="L-755"><a href="#L-755"><span class="linenos">755</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
</span><span id="L-756"><a href="#L-756"><span class="linenos">756</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;collation&quot;</span><span class="p">)</span>
</span><span id="L-757"><a href="#L-757"><span class="linenos">757</span></a>
</span><span id="L-758"><a href="#L-758"><span class="linenos">758</span></a> <span class="c1"># Use TRIM/LTRIM/RTRIM syntax if the expression isn&#39;t database-specific</span>
</span><span id="L-759"><a href="#L-759"><span class="linenos">759</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">remove_chars</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">collation</span><span class="p">:</span>
</span><span id="L-760"><a href="#L-760"><span class="linenos">760</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">trim_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-761"><a href="#L-761"><span class="linenos">761</span></a>
</span><span id="L-762"><a href="#L-762"><span class="linenos">762</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-763"><a href="#L-763"><span class="linenos">763</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">remove_chars</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-764"><a href="#L-764"><span class="linenos">764</span></a> <span class="n">from_part</span> <span class="o">=</span> <span class="s2">&quot;FROM &quot;</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="ow">or</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-765"><a href="#L-765"><span class="linenos">765</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLATE </span><span class="si">{</span><span class="n">collation</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">collation</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-766"><a href="#L-766"><span class="linenos">766</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TRIM(</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}{</span><span class="n">remove_chars</span><span class="si">}{</span><span class="n">from_part</span><span class="si">}{</span><span class="n">target</span><span class="si">}{</span><span class="n">collation</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-767"><a href="#L-767"><span class="linenos">767</span></a>
</span><span id="L-768"><a href="#L-768"><span class="linenos">768</span></a>
</span><span id="L-769"><a href="#L-769"><span class="linenos">769</span></a><span class="k">def</span> <span class="nf">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-770"><a href="#L-770"><span class="linenos">770</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRPTIME&quot;</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="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
</span><span id="L-771"><a href="#L-771"><span class="linenos">771</span></a>
</span><span id="L-772"><a href="#L-772"><span class="linenos">772</span></a>
</span><span id="L-773"><a href="#L-773"><span class="linenos">773</span></a><span class="k">def</span> <span class="nf">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">:</span>
</span><span id="L-774"><a href="#L-774"><span class="linenos">774</span></a> <span class="k">def</span> <span class="nf">_ts_or_ds_to_date_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">TsOrDsToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-775"><a href="#L-775"><span class="linenos">775</span></a> <span class="n">_dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
</span><span id="L-776"><a href="#L-776"><span class="linenos">776</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-777"><a href="#L-777"><span class="linenos">777</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">and</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">_dialect</span><span class="o">.</span><span class="n">TIME_FORMAT</span><span class="p">,</span> <span class="n">_dialect</span><span class="o">.</span><span class="n">DATE_FORMAT</span><span class="p">):</span>
</span><span id="L-778"><a href="#L-778"><span class="linenos">778</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
</span><span id="L-779"><a href="#L-779"><span class="linenos">779</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
</span><span id="L-780"><a href="#L-780"><span class="linenos">780</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</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">&quot;format&quot;</span><span class="p">]),</span>
</span><span id="L-781"><a href="#L-781"><span class="linenos">781</span></a> <span class="s2">&quot;date&quot;</span><span class="p">,</span>
</span><span id="L-782"><a href="#L-782"><span class="linenos">782</span></a> <span class="p">)</span>
</span><span id="L-783"><a href="#L-783"><span class="linenos">783</span></a> <span class="p">)</span>
</span><span id="L-784"><a href="#L-784"><span class="linenos">784</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;date&quot;</span><span class="p">))</span>
</span><span id="L-785"><a href="#L-785"><span class="linenos">785</span></a>
</span><span id="L-786"><a href="#L-786"><span class="linenos">786</span></a> <span class="k">return</span> <span class="n">_ts_or_ds_to_date_sql</span>
</span><span id="L-787"><a href="#L-787"><span class="linenos">787</span></a>
</span><span id="L-788"><a href="#L-788"><span class="linenos">788</span></a>
</span><span id="L-789"><a href="#L-789"><span class="linenos">789</span></a><span class="k">def</span> <span class="nf">concat_to_dpipe_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Concat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-790"><a href="#L-790"><span class="linenos">790</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">reduce</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">x</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">y</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">))</span>
</span><span id="L-791"><a href="#L-791"><span class="linenos">791</span></a>
</span><span id="L-792"><a href="#L-792"><span class="linenos">792</span></a>
</span><span id="L-793"><a href="#L-793"><span class="linenos">793</span></a><span class="k">def</span> <span class="nf">concat_ws_to_dpipe_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">ConcatWs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-794"><a href="#L-794"><span class="linenos">794</span></a> <span class="n">delim</span><span class="p">,</span> <span class="o">*</span><span class="n">rest_args</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
</span><span id="L-795"><a href="#L-795"><span class="linenos">795</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
</span><span id="L-796"><a href="#L-796"><span class="linenos">796</span></a> <span class="n">reduce</span><span class="p">(</span>
</span><span id="L-797"><a href="#L-797"><span class="linenos">797</span></a> <span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">x</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">delim</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">y</span><span class="p">)),</span>
</span><span id="L-798"><a href="#L-798"><span class="linenos">798</span></a> <span class="n">rest_args</span><span class="p">,</span>
</span><span id="L-799"><a href="#L-799"><span class="linenos">799</span></a> <span class="p">)</span>
</span><span id="L-800"><a href="#L-800"><span class="linenos">800</span></a> <span class="p">)</span>
</span><span id="L-801"><a href="#L-801"><span class="linenos">801</span></a>
</span><span id="L-802"><a href="#L-802"><span class="linenos">802</span></a>
</span><span id="L-803"><a href="#L-803"><span class="linenos">803</span></a><span class="k">def</span> <span class="nf">regexp_extract_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">RegexpExtract</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-804"><a href="#L-804"><span class="linenos">804</span></a> <span class="n">bad_args</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">filter</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="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">,</span> <span class="s2">&quot;occurrence&quot;</span><span class="p">,</span> <span class="s2">&quot;parameters&quot;</span><span class="p">)))</span>
</span><span id="L-805"><a href="#L-805"><span class="linenos">805</span></a> <span class="k">if</span> <span class="n">bad_args</span><span class="p">:</span>
</span><span id="L-806"><a href="#L-806"><span class="linenos">806</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;REGEXP_EXTRACT does not support the following arg(s): </span><span class="si">{</span><span class="n">bad_args</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-807"><a href="#L-807"><span class="linenos">807</span></a>
</span><span id="L-808"><a href="#L-808"><span class="linenos">808</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="L-809"><a href="#L-809"><span class="linenos">809</span></a> <span class="s2">&quot;REGEXP_EXTRACT&quot;</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">expression</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">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;group&quot;</span><span class="p">)</span>
</span><span id="L-810"><a href="#L-810"><span class="linenos">810</span></a> <span class="p">)</span>
</span><span id="L-811"><a href="#L-811"><span class="linenos">811</span></a>
</span><span id="L-812"><a href="#L-812"><span class="linenos">812</span></a>
</span><span id="L-813"><a href="#L-813"><span class="linenos">813</span></a><span class="k">def</span> <span class="nf">regexp_replace_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">RegexpReplace</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-814"><a href="#L-814"><span class="linenos">814</span></a> <span class="n">bad_args</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span>
</span><span id="L-815"><a href="#L-815"><span class="linenos">815</span></a> <span class="nb">filter</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="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">,</span> <span class="s2">&quot;occurrence&quot;</span><span class="p">,</span> <span class="s2">&quot;parameters&quot;</span><span class="p">,</span> <span class="s2">&quot;modifiers&quot;</span><span class="p">))</span>
</span><span id="L-816"><a href="#L-816"><span class="linenos">816</span></a> <span class="p">)</span>
</span><span id="L-817"><a href="#L-817"><span class="linenos">817</span></a> <span class="k">if</span> <span class="n">bad_args</span><span class="p">:</span>
</span><span id="L-818"><a href="#L-818"><span class="linenos">818</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;REGEXP_REPLACE does not support the following arg(s): </span><span class="si">{</span><span class="n">bad_args</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-819"><a href="#L-819"><span class="linenos">819</span></a>
</span><span id="L-820"><a href="#L-820"><span class="linenos">820</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="L-821"><a href="#L-821"><span class="linenos">821</span></a> <span class="s2">&quot;REGEXP_REPLACE&quot;</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">expression</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">args</span><span class="p">[</span><span class="s2">&quot;replacement&quot;</span><span class="p">]</span>
</span><span id="L-822"><a href="#L-822"><span class="linenos">822</span></a> <span class="p">)</span>
</span><span id="L-823"><a href="#L-823"><span class="linenos">823</span></a>
</span><span id="L-824"><a href="#L-824"><span class="linenos">824</span></a>
</span><span id="L-825"><a href="#L-825"><span class="linenos">825</span></a><span class="k">def</span> <span class="nf">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</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">Expression</span><span class="p">],</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
</span><span id="L-826"><a href="#L-826"><span class="linenos">826</span></a> <span class="n">names</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-827"><a href="#L-827"><span class="linenos">827</span></a> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">aggregations</span><span class="p">:</span>
</span><span id="L-828"><a href="#L-828"><span class="linenos">828</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">agg</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-829"><a href="#L-829"><span class="linenos">829</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span><span class="p">)</span>
</span><span id="L-830"><a href="#L-830"><span class="linenos">830</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-831"><a href="#L-831"><span class="linenos">831</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-832"><a href="#L-832"><span class="linenos">832</span></a><span class="sd"> This case corresponds to aggregations without aliases being used as suffixes</span>
</span><span id="L-833"><a href="#L-833"><span class="linenos">833</span></a><span class="sd"> (e.g. col_avg(foo)). We need to unquote identifiers because they&#39;re going to</span>
</span><span id="L-834"><a href="#L-834"><span class="linenos">834</span></a><span class="sd"> be quoted in the base parser&#39;s `_parse_pivot` method, due to `to_identifier`.</span>
</span><span id="L-835"><a href="#L-835"><span class="linenos">835</span></a><span class="sd"> Otherwise, we&#39;d end up with `col_avg(`foo`)` (notice the double quotes).</span>
</span><span id="L-836"><a href="#L-836"><span class="linenos">836</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-837"><a href="#L-837"><span class="linenos">837</span></a> <span class="n">agg_all_unquoted</span> <span class="o">=</span> <span class="n">agg</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
</span><span id="L-838"><a href="#L-838"><span class="linenos">838</span></a> <span class="k">lambda</span> <span class="n">node</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-839"><a href="#L-839"><span class="linenos">839</span></a> <span class="k">if</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">Identifier</span><span class="p">)</span>
</span><span id="L-840"><a href="#L-840"><span class="linenos">840</span></a> <span class="k">else</span> <span class="n">node</span>
</span><span id="L-841"><a href="#L-841"><span class="linenos">841</span></a> <span class="p">)</span>
</span><span id="L-842"><a href="#L-842"><span class="linenos">842</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg_all_unquoted</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize_functions</span><span class="o">=</span><span class="s2">&quot;lower&quot;</span><span class="p">))</span>
</span><span id="L-843"><a href="#L-843"><span class="linenos">843</span></a>
</span><span id="L-844"><a href="#L-844"><span class="linenos">844</span></a> <span class="k">return</span> <span class="n">names</span>
</span><span id="L-845"><a href="#L-845"><span class="linenos">845</span></a>
</span><span id="L-846"><a href="#L-846"><span class="linenos">846</span></a>
</span><span id="L-847"><a href="#L-847"><span class="linenos">847</span></a><span class="k">def</span> <span class="nf">binary_from_function</span><span class="p">(</span><span class="n">expr_type</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">B</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</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">B</span><span class="p">]:</span>
</span><span id="L-848"><a href="#L-848"><span class="linenos">848</span></a> <span class="k">return</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">expr_type</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
</span><span id="L-849"><a href="#L-849"><span class="linenos">849</span></a>
</span><span id="L-850"><a href="#L-850"><span class="linenos">850</span></a>
</span><span id="L-851"><a href="#L-851"><span class="linenos">851</span></a><span class="c1"># Used to represent DATE_TRUNC in Doris, Postgres and Starrocks dialects</span>
</span><span id="L-852"><a href="#L-852"><span class="linenos">852</span></a><span class="k">def</span> <span class="nf">parse_timestamp_trunc</span><span class="p">(</span><span class="n">args</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="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span>
</span><span id="L-853"><a href="#L-853"><span class="linenos">853</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
</span><span id="L-854"><a href="#L-854"><span class="linenos">854</span></a>
</span><span id="L-855"><a href="#L-855"><span class="linenos">855</span></a>
</span><span id="L-856"><a href="#L-856"><span class="linenos">856</span></a><span class="k">def</span> <span class="nf">any_value_to_max_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">AnyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-857"><a href="#L-857"><span class="linenos">857</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-858"><a href="#L-858"><span class="linenos">858</span></a>
</span><span id="L-859"><a href="#L-859"><span class="linenos">859</span></a>
</span><span id="L-860"><a href="#L-860"><span class="linenos">860</span></a><span class="k">def</span> <span class="nf">bool_xor_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Xor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-861"><a href="#L-861"><span class="linenos">861</span></a> <span class="n">a</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
</span><span id="L-862"><a href="#L-862"><span class="linenos">862</span></a> <span class="n">b</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
</span><span id="L-863"><a href="#L-863"><span class="linenos">863</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">a</span><span class="si">}</span><span class="s2"> AND (NOT </span><span class="si">{</span><span class="n">b</span><span class="si">}</span><span class="s2">)) OR ((NOT </span><span class="si">{</span><span class="n">a</span><span class="si">}</span><span class="s2">) AND </span><span class="si">{</span><span class="n">b</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-864"><a href="#L-864"><span class="linenos">864</span></a>
</span><span id="L-865"><a href="#L-865"><span class="linenos">865</span></a>
</span><span id="L-866"><a href="#L-866"><span class="linenos">866</span></a><span class="c1"># Used to generate JSON_OBJECT with a comma in BigQuery and MySQL instead of colon</span>
</span><span id="L-867"><a href="#L-867"><span class="linenos">867</span></a><span class="k">def</span> <span class="nf">json_keyvalue_comma_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">JSONKeyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-868"><a href="#L-868"><span class="linenos">868</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-869"><a href="#L-869"><span class="linenos">869</span></a>
</span><span id="L-870"><a href="#L-870"><span class="linenos">870</span></a>
</span><span id="L-871"><a href="#L-871"><span class="linenos">871</span></a><span class="k">def</span> <span class="nf">is_parse_json</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">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="L-872"><a href="#L-872"><span class="linenos">872</span></a> <span class="k">return</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">ParseJSON</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
</span><span id="L-873"><a href="#L-873"><span class="linenos">873</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">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;json&quot;</span><span class="p">)</span>
</span><span id="L-874"><a href="#L-874"><span class="linenos">874</span></a> <span class="p">)</span>
</span><span id="L-875"><a href="#L-875"><span class="linenos">875</span></a>
</span><span id="L-876"><a href="#L-876"><span class="linenos">876</span></a>
</span><span id="L-877"><a href="#L-877"><span class="linenos">877</span></a><span class="k">def</span> <span class="nf">isnull_to_is_null</span><span class="p">(</span><span class="n">args</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="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="L-878"><a href="#L-878"><span class="linenos">878</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</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">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()))</span>
</span><span id="L-879"><a href="#L-879"><span class="linenos">879</span></a>
</span><span id="L-880"><a href="#L-880"><span class="linenos">880</span></a>
</span><span id="L-881"><a href="#L-881"><span class="linenos">881</span></a><span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
</span><span id="L-882"><a href="#L-882"><span class="linenos">882</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">GeneratedAsIdentityColumnConstraint</span>
</span><span id="L-883"><a href="#L-883"><span class="linenos">883</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-884"><a href="#L-884"><span class="linenos">884</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;start&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;1&quot;</span>
</span><span id="L-885"><a href="#L-885"><span class="linenos">885</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;increment&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;1&quot;</span>
</span><span id="L-886"><a href="#L-886"><span class="linenos">886</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;IDENTITY(</span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">increment</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-887"><a href="#L-887"><span class="linenos">887</span></a>
</span><span id="L-888"><a href="#L-888"><span class="linenos">888</span></a>
</span><span id="L-889"><a href="#L-889"><span class="linenos">889</span></a><span class="k">def</span> <span class="nf">arg_max_or_min_no_count</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">-&gt;</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">ArgMax</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMin</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
</span><span id="L-890"><a href="#L-890"><span class="linenos">890</span></a> <span class="k">def</span> <span class="nf">_arg_max_or_min_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">ArgMax</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMin</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-891"><a href="#L-891"><span class="linenos">891</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">&quot;count&quot;</span><span class="p">):</span>
</span><span id="L-892"><a href="#L-892"><span class="linenos">892</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Only two arguments are supported in function </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
</span><span id="L-893"><a href="#L-893"><span class="linenos">893</span></a>
</span><span id="L-894"><a href="#L-894"><span class="linenos">894</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">name</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">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-895"><a href="#L-895"><span class="linenos">895</span></a>
</span><span id="L-896"><a href="#L-896"><span class="linenos">896</span></a> <span class="k">return</span> <span class="n">_arg_max_or_min_sql</span>
</span><span id="L-897"><a href="#L-897"><span class="linenos">897</span></a>
</span><span id="L-898"><a href="#L-898"><span class="linenos">898</span></a>
</span><span id="L-899"><a href="#L-899"><span class="linenos">899</span></a><span class="k">def</span> <span class="nf">ts_or_ds_add_cast</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">TsOrDsAdd</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span>
</span><span id="L-900"><a href="#L-900"><span class="linenos">900</span></a> <span class="n">this</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">copy</span><span class="p">()</span>
</span><span id="L-901"><a href="#L-901"><span class="linenos">901</span></a>
</span><span id="L-902"><a href="#L-902"><span class="linenos">902</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">return_type</span>
</span><span id="L-903"><a href="#L-903"><span class="linenos">903</span></a> <span class="k">if</span> <span class="n">return_type</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">DATE</span><span class="p">):</span>
</span><span id="L-904"><a href="#L-904"><span class="linenos">904</span></a> <span class="c1"># If we need to cast to a DATE, we cast to TIMESTAMP first to make sure we</span>
</span><span id="L-905"><a href="#L-905"><span class="linenos">905</span></a> <span class="c1"># can truncate timestamp strings, because some dialects can&#39;t cast them to DATE</span>
</span><span id="L-906"><a href="#L-906"><span class="linenos">906</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">this</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">TIMESTAMP</span><span class="p">)</span>
</span><span id="L-907"><a href="#L-907"><span class="linenos">907</span></a>
</span><span id="L-908"><a href="#L-908"><span class="linenos">908</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">cast</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">return_type</span><span class="p">))</span>
</span><span id="L-909"><a href="#L-909"><span class="linenos">909</span></a> <span class="k">return</span> <span class="n">expression</span>
</span><span id="L-910"><a href="#L-910"><span class="linenos">910</span></a>
</span><span id="L-911"><a href="#L-911"><span class="linenos">911</span></a>
</span><span id="L-912"><a href="#L-912"><span class="linenos">912</span></a><span class="k">def</span> <span class="nf">date_delta_sql</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="n">cast</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</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">DATE_ADD_OR_DIFF</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
</span><span id="L-913"><a href="#L-913"><span class="linenos">913</span></a> <span class="k">def</span> <span class="nf">_delta_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">DATE_ADD_OR_DIFF</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-914"><a href="#L-914"><span class="linenos">914</span></a> <span class="k">if</span> <span class="n">cast</span> <span class="ow">and</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">TsOrDsAdd</span><span class="p">):</span>
</span><span id="L-915"><a href="#L-915"><span class="linenos">915</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">ts_or_ds_add_cast</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-916"><a href="#L-916"><span class="linenos">916</span></a>
</span><span id="L-917"><a href="#L-917"><span class="linenos">917</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="L-918"><a href="#L-918"><span class="linenos">918</span></a> <span class="n">name</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</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">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-919"><a href="#L-919"><span class="linenos">919</span></a> <span class="p">)</span>
</span><span id="L-920"><a href="#L-920"><span class="linenos">920</span></a>
</span><span id="L-921"><a href="#L-921"><span class="linenos">921</span></a> <span class="k">return</span> <span class="n">_delta_sql</span>
</span></pre></div>
</section>
<section id="DATE_ADD_OR_DIFF">
<div class="attr variable">
<span class="name">DATE_ADD_OR_DIFF</span> =
<input id="DATE_ADD_OR_DIFF-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="DATE_ADD_OR_DIFF-view-value"></label><span class="default_value">typing.Union[<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>, <a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>, <a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>, <a href="../expressions.html#TsOrDsDiff">sqlglot.expressions.TsOrDsDiff</a>]</span>
</div>
<a class="headerlink" href="#DATE_ADD_OR_DIFF"></a>
</section>
<section id="DATE_ADD_OR_SUB">
<div class="attr variable">
<span class="name">DATE_ADD_OR_SUB</span> =
<input id="DATE_ADD_OR_SUB-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="DATE_ADD_OR_SUB-view-value"></label><span class="default_value">typing.Union[<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>, <a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>, <a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>]</span>
</div>
<a class="headerlink" href="#DATE_ADD_OR_SUB"></a>
</section>
<section id="Dialects">
<input id="Dialects-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">Dialects</span><wbr>(<span class="base">builtins.str</span>, <span class="base">enum.Enum</span>):
<label class="view-source-button" for="Dialects-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Dialects"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Dialects-24"><a href="#Dialects-24"><span class="linenos">24</span></a><span class="k">class</span> <span class="nc">Dialects</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">Enum</span><span class="p">):</span>
</span><span id="Dialects-25"><a href="#Dialects-25"><span class="linenos">25</span></a> <span class="n">DIALECT</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span id="Dialects-26"><a href="#Dialects-26"><span class="linenos">26</span></a>
</span><span id="Dialects-27"><a href="#Dialects-27"><span class="linenos">27</span></a> <span class="n">BIGQUERY</span> <span class="o">=</span> <span class="s2">&quot;bigquery&quot;</span>
</span><span id="Dialects-28"><a href="#Dialects-28"><span class="linenos">28</span></a> <span class="n">CLICKHOUSE</span> <span class="o">=</span> <span class="s2">&quot;clickhouse&quot;</span>
</span><span id="Dialects-29"><a href="#Dialects-29"><span class="linenos">29</span></a> <span class="n">DATABRICKS</span> <span class="o">=</span> <span class="s2">&quot;databricks&quot;</span>
</span><span id="Dialects-30"><a href="#Dialects-30"><span class="linenos">30</span></a> <span class="n">DRILL</span> <span class="o">=</span> <span class="s2">&quot;drill&quot;</span>
</span><span id="Dialects-31"><a href="#Dialects-31"><span class="linenos">31</span></a> <span class="n">DUCKDB</span> <span class="o">=</span> <span class="s2">&quot;duckdb&quot;</span>
</span><span id="Dialects-32"><a href="#Dialects-32"><span class="linenos">32</span></a> <span class="n">HIVE</span> <span class="o">=</span> <span class="s2">&quot;hive&quot;</span>
</span><span id="Dialects-33"><a href="#Dialects-33"><span class="linenos">33</span></a> <span class="n">MYSQL</span> <span class="o">=</span> <span class="s2">&quot;mysql&quot;</span>
</span><span id="Dialects-34"><a href="#Dialects-34"><span class="linenos">34</span></a> <span class="n">ORACLE</span> <span class="o">=</span> <span class="s2">&quot;oracle&quot;</span>
</span><span id="Dialects-35"><a href="#Dialects-35"><span class="linenos">35</span></a> <span class="n">POSTGRES</span> <span class="o">=</span> <span class="s2">&quot;postgres&quot;</span>
</span><span id="Dialects-36"><a href="#Dialects-36"><span class="linenos">36</span></a> <span class="n">PRESTO</span> <span class="o">=</span> <span class="s2">&quot;presto&quot;</span>
</span><span id="Dialects-37"><a href="#Dialects-37"><span class="linenos">37</span></a> <span class="n">REDSHIFT</span> <span class="o">=</span> <span class="s2">&quot;redshift&quot;</span>
</span><span id="Dialects-38"><a href="#Dialects-38"><span class="linenos">38</span></a> <span class="n">SNOWFLAKE</span> <span class="o">=</span> <span class="s2">&quot;snowflake&quot;</span>
</span><span id="Dialects-39"><a href="#Dialects-39"><span class="linenos">39</span></a> <span class="n">SPARK</span> <span class="o">=</span> <span class="s2">&quot;spark&quot;</span>
</span><span id="Dialects-40"><a href="#Dialects-40"><span class="linenos">40</span></a> <span class="n">SPARK2</span> <span class="o">=</span> <span class="s2">&quot;spark2&quot;</span>
</span><span id="Dialects-41"><a href="#Dialects-41"><span class="linenos">41</span></a> <span class="n">SQLITE</span> <span class="o">=</span> <span class="s2">&quot;sqlite&quot;</span>
</span><span id="Dialects-42"><a href="#Dialects-42"><span class="linenos">42</span></a> <span class="n">STARROCKS</span> <span class="o">=</span> <span class="s2">&quot;starrocks&quot;</span>
</span><span id="Dialects-43"><a href="#Dialects-43"><span class="linenos">43</span></a> <span class="n">TABLEAU</span> <span class="o">=</span> <span class="s2">&quot;tableau&quot;</span>
</span><span id="Dialects-44"><a href="#Dialects-44"><span class="linenos">44</span></a> <span class="n">TERADATA</span> <span class="o">=</span> <span class="s2">&quot;teradata&quot;</span>
</span><span id="Dialects-45"><a href="#Dialects-45"><span class="linenos">45</span></a> <span class="n">TRINO</span> <span class="o">=</span> <span class="s2">&quot;trino&quot;</span>
</span><span id="Dialects-46"><a href="#Dialects-46"><span class="linenos">46</span></a> <span class="n">TSQL</span> <span class="o">=</span> <span class="s2">&quot;tsql&quot;</span>
</span><span id="Dialects-47"><a href="#Dialects-47"><span class="linenos">47</span></a> <span class="n">Doris</span> <span class="o">=</span> <span class="s2">&quot;doris&quot;</span>
</span></pre></div>
<div class="docstring"><p>An enumeration.</p>
</div>
<div id="Dialects.DIALECT" class="classattr">
<div class="attr variable">
<span class="name">DIALECT</span> =
<span class="default_value">&lt;<a href="#Dialects.DIALECT">Dialects.DIALECT</a>: &#39;&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialects.DIALECT"></a>
</div>
<div id="Dialects.BIGQUERY" class="classattr">
<div class="attr variable">
<span class="name">BIGQUERY</span> =
<span class="default_value">&lt;<a href="#Dialects.BIGQUERY">Dialects.BIGQUERY</a>: &#39;bigquery&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialects.BIGQUERY"></a>
</div>
<div id="Dialects.CLICKHOUSE" class="classattr">
<div class="attr variable">
<span class="name">CLICKHOUSE</span> =
<span class="default_value">&lt;<a href="#Dialects.CLICKHOUSE">Dialects.CLICKHOUSE</a>: &#39;clickhouse&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialects.CLICKHOUSE"></a>
</div>
<div id="Dialects.DATABRICKS" class="classattr">
<div class="attr variable">
<span class="name">DATABRICKS</span> =
<span class="default_value">&lt;<a href="#Dialects.DATABRICKS">Dialects.DATABRICKS</a>: &#39;databricks&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialects.DATABRICKS"></a>
</div>
<div id="Dialects.DRILL" class="classattr">
<div class="attr variable">
<span class="name">DRILL</span> =
<span class="default_value">&lt;<a href="#Dialects.DRILL">Dialects.DRILL</a>: &#39;drill&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialects.DRILL"></a>
</div>
<div id="Dialects.DUCKDB" class="classattr">
<div class="attr variable">
<span class="name">DUCKDB</span> =
<span class="default_value">&lt;<a href="#Dialects.DUCKDB">Dialects.DUCKDB</a>: &#39;duckdb&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialects.DUCKDB"></a>
</div>
<div id="Dialects.HIVE" class="classattr">
<div class="attr variable">
<span class="name">HIVE</span> =
<span class="default_value">&lt;<a href="#Dialects.HIVE">Dialects.HIVE</a>: &#39;hive&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialects.HIVE"></a>
</div>
<div id="Dialects.MYSQL" class="classattr">
<div class="attr variable">
<span class="name">MYSQL</span> =
<span class="default_value">&lt;<a href="#Dialects.MYSQL">Dialects.MYSQL</a>: &#39;mysql&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialects.MYSQL"></a>
</div>
<div id="Dialects.ORACLE" class="classattr">
<div class="attr variable">
<span class="name">ORACLE</span> =
<span class="default_value">&lt;<a href="#Dialects.ORACLE">Dialects.ORACLE</a>: &#39;oracle&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialects.ORACLE"></a>
</div>
<div id="Dialects.POSTGRES" class="classattr">
<div class="attr variable">
<span class="name">POSTGRES</span> =
<span class="default_value">&lt;<a href="#Dialects.POSTGRES">Dialects.POSTGRES</a>: &#39;postgres&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialects.POSTGRES"></a>
</div>
<div id="Dialects.PRESTO" class="classattr">
<div class="attr variable">
<span class="name">PRESTO</span> =
<span class="default_value">&lt;<a href="#Dialects.PRESTO">Dialects.PRESTO</a>: &#39;presto&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialects.PRESTO"></a>
</div>
<div id="Dialects.REDSHIFT" class="classattr">
<div class="attr variable">
<span class="name">REDSHIFT</span> =
<span class="default_value">&lt;<a href="#Dialects.REDSHIFT">Dialects.REDSHIFT</a>: &#39;redshift&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialects.REDSHIFT"></a>
</div>
<div id="Dialects.SNOWFLAKE" class="classattr">
<div class="attr variable">
<span class="name">SNOWFLAKE</span> =
<span class="default_value">&lt;<a href="#Dialects.SNOWFLAKE">Dialects.SNOWFLAKE</a>: &#39;snowflake&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialects.SNOWFLAKE"></a>
</div>
<div id="Dialects.SPARK" class="classattr">
<div class="attr variable">
<span class="name">SPARK</span> =
<span class="default_value">&lt;<a href="#Dialects.SPARK">Dialects.SPARK</a>: &#39;spark&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialects.SPARK"></a>
</div>
<div id="Dialects.SPARK2" class="classattr">
<div class="attr variable">
<span class="name">SPARK2</span> =
<span class="default_value">&lt;<a href="#Dialects.SPARK2">Dialects.SPARK2</a>: &#39;spark2&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialects.SPARK2"></a>
</div>
<div id="Dialects.SQLITE" class="classattr">
<div class="attr variable">
<span class="name">SQLITE</span> =
<span class="default_value">&lt;<a href="#Dialects.SQLITE">Dialects.SQLITE</a>: &#39;sqlite&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialects.SQLITE"></a>
</div>
<div id="Dialects.STARROCKS" class="classattr">
<div class="attr variable">
<span class="name">STARROCKS</span> =
<span class="default_value">&lt;<a href="#Dialects.STARROCKS">Dialects.STARROCKS</a>: &#39;starrocks&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialects.STARROCKS"></a>
</div>
<div id="Dialects.TABLEAU" class="classattr">
<div class="attr variable">
<span class="name">TABLEAU</span> =
<span class="default_value">&lt;<a href="#Dialects.TABLEAU">Dialects.TABLEAU</a>: &#39;tableau&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialects.TABLEAU"></a>
</div>
<div id="Dialects.TERADATA" class="classattr">
<div class="attr variable">
<span class="name">TERADATA</span> =
<span class="default_value">&lt;<a href="#Dialects.TERADATA">Dialects.TERADATA</a>: &#39;teradata&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialects.TERADATA"></a>
</div>
<div id="Dialects.TRINO" class="classattr">
<div class="attr variable">
<span class="name">TRINO</span> =
<span class="default_value">&lt;<a href="#Dialects.TRINO">Dialects.TRINO</a>: &#39;trino&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialects.TRINO"></a>
</div>
<div id="Dialects.TSQL" class="classattr">
<div class="attr variable">
<span class="name">TSQL</span> =
<span class="default_value">&lt;<a href="#Dialects.TSQL">Dialects.TSQL</a>: &#39;tsql&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialects.TSQL"></a>
</div>
<div id="Dialects.Doris" class="classattr">
<div class="attr variable">
<span class="name">Doris</span> =
<span class="default_value">&lt;<a href="#Dialects.Doris">Dialects.Doris</a>: &#39;doris&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialects.Doris"></a>
</div>
<div class="inherited">
<h5>Inherited Members</h5>
<dl>
<div><dt>enum.Enum</dt>
<dd id="Dialects.name" class="variable">name</dd>
<dd id="Dialects.value" class="variable">value</dd>
</div>
<div><dt>builtins.str</dt>
<dd id="Dialects.encode" class="function">encode</dd>
<dd id="Dialects.replace" class="function">replace</dd>
<dd id="Dialects.split" class="function">split</dd>
<dd id="Dialects.rsplit" class="function">rsplit</dd>
<dd id="Dialects.join" class="function">join</dd>
<dd id="Dialects.capitalize" class="function">capitalize</dd>
<dd id="Dialects.casefold" class="function">casefold</dd>
<dd id="Dialects.title" class="function">title</dd>
<dd id="Dialects.center" class="function">center</dd>
<dd id="Dialects.count" class="function">count</dd>
<dd id="Dialects.expandtabs" class="function">expandtabs</dd>
<dd id="Dialects.find" class="function">find</dd>
<dd id="Dialects.partition" class="function">partition</dd>
<dd id="Dialects.index" class="function">index</dd>
<dd id="Dialects.ljust" class="function">ljust</dd>
<dd id="Dialects.lower" class="function">lower</dd>
<dd id="Dialects.lstrip" class="function">lstrip</dd>
<dd id="Dialects.rfind" class="function">rfind</dd>
<dd id="Dialects.rindex" class="function">rindex</dd>
<dd id="Dialects.rjust" class="function">rjust</dd>
<dd id="Dialects.rstrip" class="function">rstrip</dd>
<dd id="Dialects.rpartition" class="function">rpartition</dd>
<dd id="Dialects.splitlines" class="function">splitlines</dd>
<dd id="Dialects.strip" class="function">strip</dd>
<dd id="Dialects.swapcase" class="function">swapcase</dd>
<dd id="Dialects.translate" class="function">translate</dd>
<dd id="Dialects.upper" class="function">upper</dd>
<dd id="Dialects.startswith" class="function">startswith</dd>
<dd id="Dialects.endswith" class="function">endswith</dd>
<dd id="Dialects.removeprefix" class="function">removeprefix</dd>
<dd id="Dialects.removesuffix" class="function">removesuffix</dd>
<dd id="Dialects.isascii" class="function">isascii</dd>
<dd id="Dialects.islower" class="function">islower</dd>
<dd id="Dialects.isupper" class="function">isupper</dd>
<dd id="Dialects.istitle" class="function">istitle</dd>
<dd id="Dialects.isspace" class="function">isspace</dd>
<dd id="Dialects.isdecimal" class="function">isdecimal</dd>
<dd id="Dialects.isdigit" class="function">isdigit</dd>
<dd id="Dialects.isnumeric" class="function">isnumeric</dd>
<dd id="Dialects.isalpha" class="function">isalpha</dd>
<dd id="Dialects.isalnum" class="function">isalnum</dd>
<dd id="Dialects.isidentifier" class="function">isidentifier</dd>
<dd id="Dialects.isprintable" class="function">isprintable</dd>
<dd id="Dialects.zfill" class="function">zfill</dd>
<dd id="Dialects.format" class="function">format</dd>
<dd id="Dialects.format_map" class="function">format_map</dd>
<dd id="Dialects.maketrans" class="function">maketrans</dd>
</div>
</dl>
</div>
</section>
<section id="NormalizationStrategy">
<input id="NormalizationStrategy-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">NormalizationStrategy</span><wbr>(<span class="base">builtins.str</span>, <span class="base"><a href="../helper.html#AutoName">sqlglot.helper.AutoName</a></span>):
<label class="view-source-button" for="NormalizationStrategy-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#NormalizationStrategy"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="NormalizationStrategy-50"><a href="#NormalizationStrategy-50"><span class="linenos">50</span></a><span class="k">class</span> <span class="nc">NormalizationStrategy</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">AutoName</span><span class="p">):</span>
</span><span id="NormalizationStrategy-51"><a href="#NormalizationStrategy-51"><span class="linenos">51</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Specifies the strategy according to which identifiers should be normalized.&quot;&quot;&quot;</span>
</span><span id="NormalizationStrategy-52"><a href="#NormalizationStrategy-52"><span class="linenos">52</span></a>
</span><span id="NormalizationStrategy-53"><a href="#NormalizationStrategy-53"><span class="linenos">53</span></a> <span class="n">LOWERCASE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span> <span class="c1"># Unquoted identifiers are lowercased</span>
</span><span id="NormalizationStrategy-54"><a href="#NormalizationStrategy-54"><span class="linenos">54</span></a> <span class="n">UPPERCASE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span> <span class="c1"># Unquoted identifiers are uppercased</span>
</span><span id="NormalizationStrategy-55"><a href="#NormalizationStrategy-55"><span class="linenos">55</span></a> <span class="n">CASE_SENSITIVE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span> <span class="c1"># Always case-sensitive, regardless of quotes</span>
</span><span id="NormalizationStrategy-56"><a href="#NormalizationStrategy-56"><span class="linenos">56</span></a> <span class="n">CASE_INSENSITIVE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span> <span class="c1"># Always case-insensitive, regardless of quotes</span>
</span></pre></div>
<div class="docstring"><p>Specifies the strategy according to which identifiers should be normalized.</p>
</div>
<div id="NormalizationStrategy.LOWERCASE" class="classattr">
<div class="attr variable">
<span class="name">LOWERCASE</span> =
<span class="default_value">&lt;<a href="#NormalizationStrategy.LOWERCASE">NormalizationStrategy.LOWERCASE</a>: &#39;LOWERCASE&#39;&gt;</span>
</div>
<a class="headerlink" href="#NormalizationStrategy.LOWERCASE"></a>
</div>
<div id="NormalizationStrategy.UPPERCASE" class="classattr">
<div class="attr variable">
<span class="name">UPPERCASE</span> =
<span class="default_value">&lt;<a href="#NormalizationStrategy.UPPERCASE">NormalizationStrategy.UPPERCASE</a>: &#39;UPPERCASE&#39;&gt;</span>
</div>
<a class="headerlink" href="#NormalizationStrategy.UPPERCASE"></a>
</div>
<div id="NormalizationStrategy.CASE_SENSITIVE" class="classattr">
<div class="attr variable">
<span class="name">CASE_SENSITIVE</span> =
<span class="default_value">&lt;<a href="#NormalizationStrategy.CASE_SENSITIVE">NormalizationStrategy.CASE_SENSITIVE</a>: &#39;CASE_SENSITIVE&#39;&gt;</span>
</div>
<a class="headerlink" href="#NormalizationStrategy.CASE_SENSITIVE"></a>
</div>
<div id="NormalizationStrategy.CASE_INSENSITIVE" class="classattr">
<div class="attr variable">
<span class="name">CASE_INSENSITIVE</span> =
<span class="default_value">&lt;<a href="#NormalizationStrategy.CASE_INSENSITIVE">NormalizationStrategy.CASE_INSENSITIVE</a>: &#39;CASE_INSENSITIVE&#39;&gt;</span>
</div>
<a class="headerlink" href="#NormalizationStrategy.CASE_INSENSITIVE"></a>
</div>
<div class="inherited">
<h5>Inherited Members</h5>
<dl>
<div><dt>enum.Enum</dt>
<dd id="NormalizationStrategy.name" class="variable">name</dd>
<dd id="NormalizationStrategy.value" class="variable">value</dd>
</div>
<div><dt>builtins.str</dt>
<dd id="NormalizationStrategy.encode" class="function">encode</dd>
<dd id="NormalizationStrategy.replace" class="function">replace</dd>
<dd id="NormalizationStrategy.split" class="function">split</dd>
<dd id="NormalizationStrategy.rsplit" class="function">rsplit</dd>
<dd id="NormalizationStrategy.join" class="function">join</dd>
<dd id="NormalizationStrategy.capitalize" class="function">capitalize</dd>
<dd id="NormalizationStrategy.casefold" class="function">casefold</dd>
<dd id="NormalizationStrategy.title" class="function">title</dd>
<dd id="NormalizationStrategy.center" class="function">center</dd>
<dd id="NormalizationStrategy.count" class="function">count</dd>
<dd id="NormalizationStrategy.expandtabs" class="function">expandtabs</dd>
<dd id="NormalizationStrategy.find" class="function">find</dd>
<dd id="NormalizationStrategy.partition" class="function">partition</dd>
<dd id="NormalizationStrategy.index" class="function">index</dd>
<dd id="NormalizationStrategy.ljust" class="function">ljust</dd>
<dd id="NormalizationStrategy.lower" class="function">lower</dd>
<dd id="NormalizationStrategy.lstrip" class="function">lstrip</dd>
<dd id="NormalizationStrategy.rfind" class="function">rfind</dd>
<dd id="NormalizationStrategy.rindex" class="function">rindex</dd>
<dd id="NormalizationStrategy.rjust" class="function">rjust</dd>
<dd id="NormalizationStrategy.rstrip" class="function">rstrip</dd>
<dd id="NormalizationStrategy.rpartition" class="function">rpartition</dd>
<dd id="NormalizationStrategy.splitlines" class="function">splitlines</dd>
<dd id="NormalizationStrategy.strip" class="function">strip</dd>
<dd id="NormalizationStrategy.swapcase" class="function">swapcase</dd>
<dd id="NormalizationStrategy.translate" class="function">translate</dd>
<dd id="NormalizationStrategy.upper" class="function">upper</dd>
<dd id="NormalizationStrategy.startswith" class="function">startswith</dd>
<dd id="NormalizationStrategy.endswith" class="function">endswith</dd>
<dd id="NormalizationStrategy.removeprefix" class="function">removeprefix</dd>
<dd id="NormalizationStrategy.removesuffix" class="function">removesuffix</dd>
<dd id="NormalizationStrategy.isascii" class="function">isascii</dd>
<dd id="NormalizationStrategy.islower" class="function">islower</dd>
<dd id="NormalizationStrategy.isupper" class="function">isupper</dd>
<dd id="NormalizationStrategy.istitle" class="function">istitle</dd>
<dd id="NormalizationStrategy.isspace" class="function">isspace</dd>
<dd id="NormalizationStrategy.isdecimal" class="function">isdecimal</dd>
<dd id="NormalizationStrategy.isdigit" class="function">isdigit</dd>
<dd id="NormalizationStrategy.isnumeric" class="function">isnumeric</dd>
<dd id="NormalizationStrategy.isalpha" class="function">isalpha</dd>
<dd id="NormalizationStrategy.isalnum" class="function">isalnum</dd>
<dd id="NormalizationStrategy.isidentifier" class="function">isidentifier</dd>
<dd id="NormalizationStrategy.isprintable" class="function">isprintable</dd>
<dd id="NormalizationStrategy.zfill" class="function">zfill</dd>
<dd id="NormalizationStrategy.format" class="function">format</dd>
<dd id="NormalizationStrategy.format_map" class="function">format_map</dd>
<dd id="NormalizationStrategy.maketrans" class="function">maketrans</dd>
</div>
</dl>
</div>
</section>
<section id="Dialect">
<input id="Dialect-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">Dialect</span>:
<label class="view-source-button" for="Dialect-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Dialect"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Dialect-134"><a href="#Dialect-134"><span class="linenos">134</span></a><span class="k">class</span> <span class="nc">Dialect</span><span class="p">(</span><span class="n">metaclass</span><span class="o">=</span><span class="n">_Dialect</span><span class="p">):</span>
</span><span id="Dialect-135"><a href="#Dialect-135"><span class="linenos">135</span></a> <span class="c1"># Determines the base index offset for arrays</span>
</span><span id="Dialect-136"><a href="#Dialect-136"><span class="linenos">136</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">0</span>
</span><span id="Dialect-137"><a href="#Dialect-137"><span class="linenos">137</span></a>
</span><span id="Dialect-138"><a href="#Dialect-138"><span class="linenos">138</span></a> <span class="c1"># If true unnest table aliases are considered only as column aliases</span>
</span><span id="Dialect-139"><a href="#Dialect-139"><span class="linenos">139</span></a> <span class="n">UNNEST_COLUMN_ONLY</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Dialect-140"><a href="#Dialect-140"><span class="linenos">140</span></a>
</span><span id="Dialect-141"><a href="#Dialect-141"><span class="linenos">141</span></a> <span class="c1"># Determines whether or not the table alias comes after tablesample</span>
</span><span id="Dialect-142"><a href="#Dialect-142"><span class="linenos">142</span></a> <span class="n">ALIAS_POST_TABLESAMPLE</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Dialect-143"><a href="#Dialect-143"><span class="linenos">143</span></a>
</span><span id="Dialect-144"><a href="#Dialect-144"><span class="linenos">144</span></a> <span class="c1"># Specifies the strategy according to which identifiers should be normalized.</span>
</span><span id="Dialect-145"><a href="#Dialect-145"><span class="linenos">145</span></a> <span class="n">NORMALIZATION_STRATEGY</span> <span class="o">=</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">LOWERCASE</span>
</span><span id="Dialect-146"><a href="#Dialect-146"><span class="linenos">146</span></a>
</span><span id="Dialect-147"><a href="#Dialect-147"><span class="linenos">147</span></a> <span class="c1"># Determines whether or not an unquoted identifier can start with a digit</span>
</span><span id="Dialect-148"><a href="#Dialect-148"><span class="linenos">148</span></a> <span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Dialect-149"><a href="#Dialect-149"><span class="linenos">149</span></a>
</span><span id="Dialect-150"><a href="#Dialect-150"><span class="linenos">150</span></a> <span class="c1"># Determines whether or not the DPIPE token (&#39;||&#39;) is a string concatenation operator</span>
</span><span id="Dialect-151"><a href="#Dialect-151"><span class="linenos">151</span></a> <span class="n">DPIPE_IS_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Dialect-152"><a href="#Dialect-152"><span class="linenos">152</span></a>
</span><span id="Dialect-153"><a href="#Dialect-153"><span class="linenos">153</span></a> <span class="c1"># Determines whether or not CONCAT&#39;s arguments must be strings</span>
</span><span id="Dialect-154"><a href="#Dialect-154"><span class="linenos">154</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Dialect-155"><a href="#Dialect-155"><span class="linenos">155</span></a>
</span><span id="Dialect-156"><a href="#Dialect-156"><span class="linenos">156</span></a> <span class="c1"># Determines whether or not user-defined data types are supported</span>
</span><span id="Dialect-157"><a href="#Dialect-157"><span class="linenos">157</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Dialect-158"><a href="#Dialect-158"><span class="linenos">158</span></a>
</span><span id="Dialect-159"><a href="#Dialect-159"><span class="linenos">159</span></a> <span class="c1"># Determines whether or not SEMI/ANTI JOINs are supported</span>
</span><span id="Dialect-160"><a href="#Dialect-160"><span class="linenos">160</span></a> <span class="n">SUPPORTS_SEMI_ANTI_JOIN</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Dialect-161"><a href="#Dialect-161"><span class="linenos">161</span></a>
</span><span id="Dialect-162"><a href="#Dialect-162"><span class="linenos">162</span></a> <span class="c1"># Determines how function names are going to be normalized</span>
</span><span id="Dialect-163"><a href="#Dialect-163"><span class="linenos">163</span></a> <span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;upper&quot;</span>
</span><span id="Dialect-164"><a href="#Dialect-164"><span class="linenos">164</span></a>
</span><span id="Dialect-165"><a href="#Dialect-165"><span class="linenos">165</span></a> <span class="c1"># Determines whether the base comes first in the LOG function</span>
</span><span id="Dialect-166"><a href="#Dialect-166"><span class="linenos">166</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Dialect-167"><a href="#Dialect-167"><span class="linenos">167</span></a>
</span><span id="Dialect-168"><a href="#Dialect-168"><span class="linenos">168</span></a> <span class="c1"># Indicates the default null ordering method to use if not explicitly set</span>
</span><span id="Dialect-169"><a href="#Dialect-169"><span class="linenos">169</span></a> <span class="c1"># Options are: &quot;nulls_are_small&quot;, &quot;nulls_are_large&quot;, &quot;nulls_are_last&quot;</span>
</span><span id="Dialect-170"><a href="#Dialect-170"><span class="linenos">170</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_small&quot;</span>
</span><span id="Dialect-171"><a href="#Dialect-171"><span class="linenos">171</span></a>
</span><span id="Dialect-172"><a href="#Dialect-172"><span class="linenos">172</span></a> <span class="c1"># Whether the behavior of a / b depends on the types of a and b.</span>
</span><span id="Dialect-173"><a href="#Dialect-173"><span class="linenos">173</span></a> <span class="c1"># False means a / b is always float division.</span>
</span><span id="Dialect-174"><a href="#Dialect-174"><span class="linenos">174</span></a> <span class="c1"># True means a / b is integer division if both a and b are integers.</span>
</span><span id="Dialect-175"><a href="#Dialect-175"><span class="linenos">175</span></a> <span class="n">TYPED_DIVISION</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Dialect-176"><a href="#Dialect-176"><span class="linenos">176</span></a>
</span><span id="Dialect-177"><a href="#Dialect-177"><span class="linenos">177</span></a> <span class="c1"># False means 1 / 0 throws an error.</span>
</span><span id="Dialect-178"><a href="#Dialect-178"><span class="linenos">178</span></a> <span class="c1"># True means 1 / 0 returns null.</span>
</span><span id="Dialect-179"><a href="#Dialect-179"><span class="linenos">179</span></a> <span class="n">SAFE_DIVISION</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Dialect-180"><a href="#Dialect-180"><span class="linenos">180</span></a>
</span><span id="Dialect-181"><a href="#Dialect-181"><span class="linenos">181</span></a> <span class="c1"># A NULL arg in CONCAT yields NULL by default, but in some dialects it yields an empty string</span>
</span><span id="Dialect-182"><a href="#Dialect-182"><span class="linenos">182</span></a> <span class="n">CONCAT_COALESCE</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Dialect-183"><a href="#Dialect-183"><span class="linenos">183</span></a>
</span><span id="Dialect-184"><a href="#Dialect-184"><span class="linenos">184</span></a> <span class="n">DATE_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;%Y-%m-</span><span class="si">%d</span><span class="s2">&#39;&quot;</span>
</span><span id="Dialect-185"><a href="#Dialect-185"><span class="linenos">185</span></a> <span class="n">DATEINT_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;%Y%m</span><span class="si">%d</span><span class="s2">&#39;&quot;</span>
</span><span id="Dialect-186"><a href="#Dialect-186"><span class="linenos">186</span></a> <span class="n">TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&#39;&quot;</span>
</span><span id="Dialect-187"><a href="#Dialect-187"><span class="linenos">187</span></a>
</span><span id="Dialect-188"><a href="#Dialect-188"><span class="linenos">188</span></a> <span class="c1"># Custom time mappings in which the key represents dialect time format</span>
</span><span id="Dialect-189"><a href="#Dialect-189"><span class="linenos">189</span></a> <span class="c1"># and the value represents a python time format</span>
</span><span id="Dialect-190"><a href="#Dialect-190"><span class="linenos">190</span></a> <span class="n">TIME_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="Dialect-191"><a href="#Dialect-191"><span class="linenos">191</span></a>
</span><span id="Dialect-192"><a href="#Dialect-192"><span class="linenos">192</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/format-elements#format_model_rules_date_time</span>
</span><span id="Dialect-193"><a href="#Dialect-193"><span class="linenos">193</span></a> <span class="c1"># https://docs.teradata.com/r/Teradata-Database-SQL-Functions-Operators-Expressions-and-Predicates/March-2017/Data-Type-Conversions/Character-to-DATE-Conversion/Forcing-a-FORMAT-on-CAST-for-Converting-Character-to-DATE</span>
</span><span id="Dialect-194"><a href="#Dialect-194"><span class="linenos">194</span></a> <span class="c1"># special syntax cast(x as date format &#39;yyyy&#39;) defaults to time_mapping</span>
</span><span id="Dialect-195"><a href="#Dialect-195"><span class="linenos">195</span></a> <span class="n">FORMAT_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="Dialect-196"><a href="#Dialect-196"><span class="linenos">196</span></a>
</span><span id="Dialect-197"><a href="#Dialect-197"><span class="linenos">197</span></a> <span class="c1"># Mapping of an unescaped escape sequence to the corresponding character</span>
</span><span id="Dialect-198"><a href="#Dialect-198"><span class="linenos">198</span></a> <span class="n">ESCAPE_SEQUENCES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="Dialect-199"><a href="#Dialect-199"><span class="linenos">199</span></a>
</span><span id="Dialect-200"><a href="#Dialect-200"><span class="linenos">200</span></a> <span class="c1"># Columns that are auto-generated by the engine corresponding to this dialect</span>
</span><span id="Dialect-201"><a href="#Dialect-201"><span class="linenos">201</span></a> <span class="c1"># Such columns may be excluded from SELECT * queries, for example</span>
</span><span id="Dialect-202"><a href="#Dialect-202"><span class="linenos">202</span></a> <span class="n">PSEUDOCOLUMNS</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="o">=</span> <span class="nb">set</span><span class="p">()</span>
</span><span id="Dialect-203"><a href="#Dialect-203"><span class="linenos">203</span></a>
</span><span id="Dialect-204"><a href="#Dialect-204"><span class="linenos">204</span></a> <span class="c1"># --- Autofilled ---</span>
</span><span id="Dialect-205"><a href="#Dialect-205"><span class="linenos">205</span></a>
</span><span id="Dialect-206"><a href="#Dialect-206"><span class="linenos">206</span></a> <span class="n">tokenizer_class</span> <span class="o">=</span> <span class="n">Tokenizer</span>
</span><span id="Dialect-207"><a href="#Dialect-207"><span class="linenos">207</span></a> <span class="n">parser_class</span> <span class="o">=</span> <span class="n">Parser</span>
</span><span id="Dialect-208"><a href="#Dialect-208"><span class="linenos">208</span></a> <span class="n">generator_class</span> <span class="o">=</span> <span class="n">Generator</span>
</span><span id="Dialect-209"><a href="#Dialect-209"><span class="linenos">209</span></a>
</span><span id="Dialect-210"><a href="#Dialect-210"><span class="linenos">210</span></a> <span class="c1"># A trie of the time_mapping keys</span>
</span><span id="Dialect-211"><a href="#Dialect-211"><span class="linenos">211</span></a> <span class="n">TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="Dialect-212"><a href="#Dialect-212"><span class="linenos">212</span></a> <span class="n">FORMAT_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="Dialect-213"><a href="#Dialect-213"><span class="linenos">213</span></a>
</span><span id="Dialect-214"><a href="#Dialect-214"><span class="linenos">214</span></a> <span class="n">INVERSE_TIME_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="Dialect-215"><a href="#Dialect-215"><span class="linenos">215</span></a> <span class="n">INVERSE_TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="Dialect-216"><a href="#Dialect-216"><span class="linenos">216</span></a>
</span><span id="Dialect-217"><a href="#Dialect-217"><span class="linenos">217</span></a> <span class="n">INVERSE_ESCAPE_SEQUENCES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="Dialect-218"><a href="#Dialect-218"><span class="linenos">218</span></a>
</span><span id="Dialect-219"><a href="#Dialect-219"><span class="linenos">219</span></a> <span class="c1"># Delimiters for quotes, identifiers and the corresponding escape characters</span>
</span><span id="Dialect-220"><a href="#Dialect-220"><span class="linenos">220</span></a> <span class="n">QUOTE_START</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span>
</span><span id="Dialect-221"><a href="#Dialect-221"><span class="linenos">221</span></a> <span class="n">QUOTE_END</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span>
</span><span id="Dialect-222"><a href="#Dialect-222"><span class="linenos">222</span></a> <span class="n">IDENTIFIER_START</span> <span class="o">=</span> <span class="s1">&#39;&quot;&#39;</span>
</span><span id="Dialect-223"><a href="#Dialect-223"><span class="linenos">223</span></a> <span class="n">IDENTIFIER_END</span> <span class="o">=</span> <span class="s1">&#39;&quot;&#39;</span>
</span><span id="Dialect-224"><a href="#Dialect-224"><span class="linenos">224</span></a>
</span><span id="Dialect-225"><a href="#Dialect-225"><span class="linenos">225</span></a> <span class="c1"># Delimiters for bit, hex and byte literals</span>
</span><span id="Dialect-226"><a href="#Dialect-226"><span class="linenos">226</span></a> <span class="n">BIT_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Dialect-227"><a href="#Dialect-227"><span class="linenos">227</span></a> <span class="n">BIT_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Dialect-228"><a href="#Dialect-228"><span class="linenos">228</span></a> <span class="n">HEX_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Dialect-229"><a href="#Dialect-229"><span class="linenos">229</span></a> <span class="n">HEX_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Dialect-230"><a href="#Dialect-230"><span class="linenos">230</span></a> <span class="n">BYTE_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Dialect-231"><a href="#Dialect-231"><span class="linenos">231</span></a> <span class="n">BYTE_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Dialect-232"><a href="#Dialect-232"><span class="linenos">232</span></a>
</span><span id="Dialect-233"><a href="#Dialect-233"><span class="linenos">233</span></a> <span class="nd">@classmethod</span>
</span><span id="Dialect-234"><a href="#Dialect-234"><span class="linenos">234</span></a> <span class="k">def</span> <span class="nf">get_or_raise</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dialect</span><span class="p">:</span>
</span><span id="Dialect-235"><a href="#Dialect-235"><span class="linenos">235</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Dialect-236"><a href="#Dialect-236"><span class="linenos">236</span></a><span class="sd"> Look up a dialect in the global dialect registry and return it if it exists.</span>
</span><span id="Dialect-237"><a href="#Dialect-237"><span class="linenos">237</span></a>
</span><span id="Dialect-238"><a href="#Dialect-238"><span class="linenos">238</span></a><span class="sd"> Args:</span>
</span><span id="Dialect-239"><a href="#Dialect-239"><span class="linenos">239</span></a><span class="sd"> dialect: The target dialect. If this is a string, it can be optionally followed by</span>
</span><span id="Dialect-240"><a href="#Dialect-240"><span class="linenos">240</span></a><span class="sd"> additional key-value pairs that are separated by commas and are used to specify</span>
</span><span id="Dialect-241"><a href="#Dialect-241"><span class="linenos">241</span></a><span class="sd"> dialect settings, such as whether the dialect&#39;s identifiers are case-sensitive.</span>
</span><span id="Dialect-242"><a href="#Dialect-242"><span class="linenos">242</span></a>
</span><span id="Dialect-243"><a href="#Dialect-243"><span class="linenos">243</span></a><span class="sd"> Example:</span>
</span><span id="Dialect-244"><a href="#Dialect-244"><span class="linenos">244</span></a><span class="sd"> &gt;&gt;&gt; dialect = dialect_class = get_or_raise(&quot;duckdb&quot;)</span>
</span><span id="Dialect-245"><a href="#Dialect-245"><span class="linenos">245</span></a><span class="sd"> &gt;&gt;&gt; dialect = get_or_raise(&quot;mysql, normalization_strategy = case_sensitive&quot;)</span>
</span><span id="Dialect-246"><a href="#Dialect-246"><span class="linenos">246</span></a>
</span><span id="Dialect-247"><a href="#Dialect-247"><span class="linenos">247</span></a><span class="sd"> Returns:</span>
</span><span id="Dialect-248"><a href="#Dialect-248"><span class="linenos">248</span></a><span class="sd"> The corresponding Dialect instance.</span>
</span><span id="Dialect-249"><a href="#Dialect-249"><span class="linenos">249</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Dialect-250"><a href="#Dialect-250"><span class="linenos">250</span></a>
</span><span id="Dialect-251"><a href="#Dialect-251"><span class="linenos">251</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">dialect</span><span class="p">:</span>
</span><span id="Dialect-252"><a href="#Dialect-252"><span class="linenos">252</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">()</span>
</span><span id="Dialect-253"><a href="#Dialect-253"><span class="linenos">253</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="n">_Dialect</span><span class="p">):</span>
</span><span id="Dialect-254"><a href="#Dialect-254"><span class="linenos">254</span></a> <span class="k">return</span> <span class="n">dialect</span><span class="p">()</span>
</span><span id="Dialect-255"><a href="#Dialect-255"><span class="linenos">255</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="n">Dialect</span><span class="p">):</span>
</span><span id="Dialect-256"><a href="#Dialect-256"><span class="linenos">256</span></a> <span class="k">return</span> <span class="n">dialect</span>
</span><span id="Dialect-257"><a href="#Dialect-257"><span class="linenos">257</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="Dialect-258"><a href="#Dialect-258"><span class="linenos">258</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="Dialect-259"><a href="#Dialect-259"><span class="linenos">259</span></a> <span class="n">dialect_name</span><span class="p">,</span> <span class="o">*</span><span class="n">kv_pairs</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">)</span>
</span><span id="Dialect-260"><a href="#Dialect-260"><span class="linenos">260</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="n">v</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="p">(</span><span class="n">kv</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;=&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">kv</span> <span class="ow">in</span> <span class="n">kv_pairs</span><span class="p">)}</span>
</span><span id="Dialect-261"><a href="#Dialect-261"><span class="linenos">261</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
</span><span id="Dialect-262"><a href="#Dialect-262"><span class="linenos">262</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
</span><span id="Dialect-263"><a href="#Dialect-263"><span class="linenos">263</span></a> <span class="sa">f</span><span class="s2">&quot;Invalid dialect format: &#39;</span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&#39;. &quot;</span>
</span><span id="Dialect-264"><a href="#Dialect-264"><span class="linenos">264</span></a> <span class="s2">&quot;Please use the correct format: &#39;dialect [, k1 = v2 [, ...]]&#39;.&quot;</span>
</span><span id="Dialect-265"><a href="#Dialect-265"><span class="linenos">265</span></a> <span class="p">)</span>
</span><span id="Dialect-266"><a href="#Dialect-266"><span class="linenos">266</span></a>
</span><span id="Dialect-267"><a href="#Dialect-267"><span class="linenos">267</span></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dialect_name</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
</span><span id="Dialect-268"><a href="#Dialect-268"><span class="linenos">268</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
</span><span id="Dialect-269"><a href="#Dialect-269"><span class="linenos">269</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown dialect &#39;</span><span class="si">{</span><span class="n">dialect_name</span><span class="si">}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
</span><span id="Dialect-270"><a href="#Dialect-270"><span class="linenos">270</span></a>
</span><span id="Dialect-271"><a href="#Dialect-271"><span class="linenos">271</span></a> <span class="k">return</span> <span class="n">result</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="Dialect-272"><a href="#Dialect-272"><span class="linenos">272</span></a>
</span><span id="Dialect-273"><a href="#Dialect-273"><span class="linenos">273</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid dialect type for &#39;</span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&#39;: &#39;</span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
</span><span id="Dialect-274"><a href="#Dialect-274"><span class="linenos">274</span></a>
</span><span id="Dialect-275"><a href="#Dialect-275"><span class="linenos">275</span></a> <span class="nd">@classmethod</span>
</span><span id="Dialect-276"><a href="#Dialect-276"><span class="linenos">276</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span>
</span><span id="Dialect-277"><a href="#Dialect-277"><span class="linenos">277</span></a> <span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</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="Dialect-278"><a href="#Dialect-278"><span class="linenos">278</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</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="Dialect-279"><a href="#Dialect-279"><span class="linenos">279</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="nb">str</span><span class="p">):</span>
</span><span id="Dialect-280"><a href="#Dialect-280"><span class="linenos">280</span></a> <span class="k">return</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><span id="Dialect-281"><a href="#Dialect-281"><span class="linenos">281</span></a> <span class="c1"># the time formats are quoted</span>
</span><span id="Dialect-282"><a href="#Dialect-282"><span class="linenos">282</span></a> <span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">)</span>
</span><span id="Dialect-283"><a href="#Dialect-283"><span class="linenos">283</span></a> <span class="p">)</span>
</span><span id="Dialect-284"><a href="#Dialect-284"><span class="linenos">284</span></a>
</span><span id="Dialect-285"><a href="#Dialect-285"><span class="linenos">285</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
</span><span id="Dialect-286"><a href="#Dialect-286"><span class="linenos">286</span></a> <span class="k">return</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="n">format_time</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="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">))</span>
</span><span id="Dialect-287"><a href="#Dialect-287"><span class="linenos">287</span></a>
</span><span id="Dialect-288"><a href="#Dialect-288"><span class="linenos">288</span></a> <span class="k">return</span> <span class="n">expression</span>
</span><span id="Dialect-289"><a href="#Dialect-289"><span class="linenos">289</span></a>
</span><span id="Dialect-290"><a href="#Dialect-290"><span class="linenos">290</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Dialect-291"><a href="#Dialect-291"><span class="linenos">291</span></a> <span class="n">normalization_strategy</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;normalization_strategy&quot;</span><span class="p">)</span>
</span><span id="Dialect-292"><a href="#Dialect-292"><span class="linenos">292</span></a>
</span><span id="Dialect-293"><a href="#Dialect-293"><span class="linenos">293</span></a> <span class="k">if</span> <span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Dialect-294"><a href="#Dialect-294"><span class="linenos">294</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NORMALIZATION_STRATEGY</span>
</span><span id="Dialect-295"><a href="#Dialect-295"><span class="linenos">295</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Dialect-296"><a href="#Dialect-296"><span class="linenos">296</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="o">=</span> <span class="n">NormalizationStrategy</span><span class="p">(</span><span class="n">normalization_strategy</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="Dialect-297"><a href="#Dialect-297"><span class="linenos">297</span></a>
</span><span id="Dialect-298"><a href="#Dialect-298"><span class="linenos">298</span></a> <span class="k">def</span> <span class="fm">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="Dialect-299"><a href="#Dialect-299"><span class="linenos">299</span></a> <span class="c1"># Does not currently take dialect state into account</span>
</span><span id="Dialect-300"><a href="#Dialect-300"><span class="linenos">300</span></a> <span class="k">return</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="n">other</span>
</span><span id="Dialect-301"><a href="#Dialect-301"><span class="linenos">301</span></a>
</span><span id="Dialect-302"><a href="#Dialect-302"><span class="linenos">302</span></a> <span class="k">def</span> <span class="fm">__hash__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
</span><span id="Dialect-303"><a href="#Dialect-303"><span class="linenos">303</span></a> <span class="c1"># Does not currently take dialect state into account</span>
</span><span id="Dialect-304"><a href="#Dialect-304"><span class="linenos">304</span></a> <span class="k">return</span> <span class="nb">hash</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
</span><span id="Dialect-305"><a href="#Dialect-305"><span class="linenos">305</span></a>
</span><span id="Dialect-306"><a href="#Dialect-306"><span class="linenos">306</span></a> <span class="k">def</span> <span class="nf">normalize_identifier</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
</span><span id="Dialect-307"><a href="#Dialect-307"><span class="linenos">307</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Dialect-308"><a href="#Dialect-308"><span class="linenos">308</span></a><span class="sd"> Transforms an identifier in a way that resembles how it&#39;d be resolved by this dialect.</span>
</span><span id="Dialect-309"><a href="#Dialect-309"><span class="linenos">309</span></a>
</span><span id="Dialect-310"><a href="#Dialect-310"><span class="linenos">310</span></a><span class="sd"> For example, an identifier like FoO would be resolved as foo in Postgres, because it</span>
</span><span id="Dialect-311"><a href="#Dialect-311"><span class="linenos">311</span></a><span class="sd"> lowercases all unquoted identifiers. On the other hand, Snowflake uppercases them, so</span>
</span><span id="Dialect-312"><a href="#Dialect-312"><span class="linenos">312</span></a><span class="sd"> it would resolve it as FOO. If it was quoted, it&#39;d need to be treated as case-sensitive,</span>
</span><span id="Dialect-313"><a href="#Dialect-313"><span class="linenos">313</span></a><span class="sd"> and so any normalization would be prohibited in order to avoid &quot;breaking&quot; the identifier.</span>
</span><span id="Dialect-314"><a href="#Dialect-314"><span class="linenos">314</span></a>
</span><span id="Dialect-315"><a href="#Dialect-315"><span class="linenos">315</span></a><span class="sd"> There are also dialects like Spark, which are case-insensitive even when quotes are</span>
</span><span id="Dialect-316"><a href="#Dialect-316"><span class="linenos">316</span></a><span class="sd"> present, and dialects like MySQL, whose resolution rules match those employed by the</span>
</span><span id="Dialect-317"><a href="#Dialect-317"><span class="linenos">317</span></a><span class="sd"> underlying operating system, for example they may always be case-sensitive in Linux.</span>
</span><span id="Dialect-318"><a href="#Dialect-318"><span class="linenos">318</span></a>
</span><span id="Dialect-319"><a href="#Dialect-319"><span class="linenos">319</span></a><span class="sd"> Finally, the normalization behavior of some engines can even be controlled through flags,</span>
</span><span id="Dialect-320"><a href="#Dialect-320"><span class="linenos">320</span></a><span class="sd"> like in Redshift&#39;s case, where users can explicitly set enable_case_sensitive_identifier.</span>
</span><span id="Dialect-321"><a href="#Dialect-321"><span class="linenos">321</span></a>
</span><span id="Dialect-322"><a href="#Dialect-322"><span class="linenos">322</span></a><span class="sd"> SQLGlot aims to understand and handle all of these different behaviors gracefully, so</span>
</span><span id="Dialect-323"><a href="#Dialect-323"><span class="linenos">323</span></a><span class="sd"> that it can analyze queries in the optimizer and successfully capture their semantics.</span>
</span><span id="Dialect-324"><a href="#Dialect-324"><span class="linenos">324</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Dialect-325"><a href="#Dialect-325"><span class="linenos">325</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="Dialect-326"><a href="#Dialect-326"><span class="linenos">326</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">Identifier</span><span class="p">)</span>
</span><span id="Dialect-327"><a href="#Dialect-327"><span class="linenos">327</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_SENSITIVE</span>
</span><span id="Dialect-328"><a href="#Dialect-328"><span class="linenos">328</span></a> <span class="ow">and</span> <span class="p">(</span>
</span><span id="Dialect-329"><a href="#Dialect-329"><span class="linenos">329</span></a> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span>
</span><span id="Dialect-330"><a href="#Dialect-330"><span class="linenos">330</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_INSENSITIVE</span>
</span><span id="Dialect-331"><a href="#Dialect-331"><span class="linenos">331</span></a> <span class="p">)</span>
</span><span id="Dialect-332"><a href="#Dialect-332"><span class="linenos">332</span></a> <span class="p">):</span>
</span><span id="Dialect-333"><a href="#Dialect-333"><span class="linenos">333</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
</span><span id="Dialect-334"><a href="#Dialect-334"><span class="linenos">334</span></a> <span class="s2">&quot;this&quot;</span><span class="p">,</span>
</span><span id="Dialect-335"><a href="#Dialect-335"><span class="linenos">335</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Dialect-336"><a href="#Dialect-336"><span class="linenos">336</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">UPPERCASE</span>
</span><span id="Dialect-337"><a href="#Dialect-337"><span class="linenos">337</span></a> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span>
</span><span id="Dialect-338"><a href="#Dialect-338"><span class="linenos">338</span></a> <span class="p">)</span>
</span><span id="Dialect-339"><a href="#Dialect-339"><span class="linenos">339</span></a>
</span><span id="Dialect-340"><a href="#Dialect-340"><span class="linenos">340</span></a> <span class="k">return</span> <span class="n">expression</span>
</span><span id="Dialect-341"><a href="#Dialect-341"><span class="linenos">341</span></a>
</span><span id="Dialect-342"><a href="#Dialect-342"><span class="linenos">342</span></a> <span class="k">def</span> <span class="nf">case_sensitive</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="Dialect-343"><a href="#Dialect-343"><span class="linenos">343</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text contains any case sensitive characters, based on the dialect&#39;s rules.&quot;&quot;&quot;</span>
</span><span id="Dialect-344"><a href="#Dialect-344"><span class="linenos">344</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_INSENSITIVE</span><span class="p">:</span>
</span><span id="Dialect-345"><a href="#Dialect-345"><span class="linenos">345</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="Dialect-346"><a href="#Dialect-346"><span class="linenos">346</span></a>
</span><span id="Dialect-347"><a href="#Dialect-347"><span class="linenos">347</span></a> <span class="n">unsafe</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Dialect-348"><a href="#Dialect-348"><span class="linenos">348</span></a> <span class="nb">str</span><span class="o">.</span><span class="n">islower</span>
</span><span id="Dialect-349"><a href="#Dialect-349"><span class="linenos">349</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">UPPERCASE</span>
</span><span id="Dialect-350"><a href="#Dialect-350"><span class="linenos">350</span></a> <span class="k">else</span> <span class="nb">str</span><span class="o">.</span><span class="n">isupper</span>
</span><span id="Dialect-351"><a href="#Dialect-351"><span class="linenos">351</span></a> <span class="p">)</span>
</span><span id="Dialect-352"><a href="#Dialect-352"><span class="linenos">352</span></a> <span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="n">unsafe</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">text</span><span class="p">)</span>
</span><span id="Dialect-353"><a href="#Dialect-353"><span class="linenos">353</span></a>
</span><span id="Dialect-354"><a href="#Dialect-354"><span class="linenos">354</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="Dialect-355"><a href="#Dialect-355"><span class="linenos">355</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
</span><span id="Dialect-356"><a href="#Dialect-356"><span class="linenos">356</span></a>
</span><span id="Dialect-357"><a href="#Dialect-357"><span class="linenos">357</span></a><span class="sd"> Args:</span>
</span><span id="Dialect-358"><a href="#Dialect-358"><span class="linenos">358</span></a><span class="sd"> text: The text to check.</span>
</span><span id="Dialect-359"><a href="#Dialect-359"><span class="linenos">359</span></a><span class="sd"> identify:</span>
</span><span id="Dialect-360"><a href="#Dialect-360"><span class="linenos">360</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
</span><span id="Dialect-361"><a href="#Dialect-361"><span class="linenos">361</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
</span><span id="Dialect-362"><a href="#Dialect-362"><span class="linenos">362</span></a>
</span><span id="Dialect-363"><a href="#Dialect-363"><span class="linenos">363</span></a><span class="sd"> Returns:</span>
</span><span id="Dialect-364"><a href="#Dialect-364"><span class="linenos">364</span></a><span class="sd"> Whether or not the given text can be identified.</span>
</span><span id="Dialect-365"><a href="#Dialect-365"><span class="linenos">365</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Dialect-366"><a href="#Dialect-366"><span class="linenos">366</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
</span><span id="Dialect-367"><a href="#Dialect-367"><span class="linenos">367</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Dialect-368"><a href="#Dialect-368"><span class="linenos">368</span></a>
</span><span id="Dialect-369"><a href="#Dialect-369"><span class="linenos">369</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
</span><span id="Dialect-370"><a href="#Dialect-370"><span class="linenos">370</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
</span><span id="Dialect-371"><a href="#Dialect-371"><span class="linenos">371</span></a>
</span><span id="Dialect-372"><a href="#Dialect-372"><span class="linenos">372</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="Dialect-373"><a href="#Dialect-373"><span class="linenos">373</span></a>
</span><span id="Dialect-374"><a href="#Dialect-374"><span class="linenos">374</span></a> <span class="k">def</span> <span class="nf">quote_identifier</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">E</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
</span><span id="Dialect-375"><a href="#Dialect-375"><span class="linenos">375</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">Identifier</span><span class="p">):</span>
</span><span id="Dialect-376"><a href="#Dialect-376"><span class="linenos">376</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="Dialect-377"><a href="#Dialect-377"><span class="linenos">377</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
</span><span id="Dialect-378"><a href="#Dialect-378"><span class="linenos">378</span></a> <span class="s2">&quot;quoted&quot;</span><span class="p">,</span>
</span><span id="Dialect-379"><a href="#Dialect-379"><span class="linenos">379</span></a> <span class="n">identify</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
</span><span id="Dialect-380"><a href="#Dialect-380"><span class="linenos">380</span></a> <span class="p">)</span>
</span><span id="Dialect-381"><a href="#Dialect-381"><span class="linenos">381</span></a>
</span><span id="Dialect-382"><a href="#Dialect-382"><span class="linenos">382</span></a> <span class="k">return</span> <span class="n">expression</span>
</span><span id="Dialect-383"><a href="#Dialect-383"><span class="linenos">383</span></a>
</span><span id="Dialect-384"><a href="#Dialect-384"><span class="linenos">384</span></a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</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">Optional</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="Dialect-385"><a href="#Dialect-385"><span class="linenos">385</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">),</span> <span class="n">sql</span><span class="p">)</span>
</span><span id="Dialect-386"><a href="#Dialect-386"><span class="linenos">386</span></a>
</span><span id="Dialect-387"><a href="#Dialect-387"><span class="linenos">387</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
</span><span id="Dialect-388"><a href="#Dialect-388"><span class="linenos">388</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression_type</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
</span><span id="Dialect-389"><a href="#Dialect-389"><span class="linenos">389</span></a> <span class="p">)</span> <span class="o">-&gt;</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">Optional</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="Dialect-390"><a href="#Dialect-390"><span class="linenos">390</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">parse_into</span><span class="p">(</span><span class="n">expression_type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">),</span> <span class="n">sql</span><span class="p">)</span>
</span><span id="Dialect-391"><a href="#Dialect-391"><span class="linenos">391</span></a>
</span><span id="Dialect-392"><a href="#Dialect-392"><span class="linenos">392</span></a> <span class="k">def</span> <span class="nf">generate</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="n">copy</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Dialect-393"><a href="#Dialect-393"><span class="linenos">393</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">generator</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">)</span>
</span><span id="Dialect-394"><a href="#Dialect-394"><span class="linenos">394</span></a>
</span><span id="Dialect-395"><a href="#Dialect-395"><span class="linenos">395</span></a> <span class="k">def</span> <span class="nf">transpile</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
</span><span id="Dialect-396"><a href="#Dialect-396"><span class="linenos">396</span></a> <span class="k">return</span> <span class="p">[</span>
</span><span id="Dialect-397"><a href="#Dialect-397"><span class="linenos">397</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</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">opts</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Dialect-398"><a href="#Dialect-398"><span class="linenos">398</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
</span><span id="Dialect-399"><a href="#Dialect-399"><span class="linenos">399</span></a> <span class="p">]</span>
</span><span id="Dialect-400"><a href="#Dialect-400"><span class="linenos">400</span></a>
</span><span id="Dialect-401"><a href="#Dialect-401"><span class="linenos">401</span></a> <span class="k">def</span> <span class="nf">tokenize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
</span><span id="Dialect-402"><a href="#Dialect-402"><span class="linenos">402</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenizer</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
</span><span id="Dialect-403"><a href="#Dialect-403"><span class="linenos">403</span></a>
</span><span id="Dialect-404"><a href="#Dialect-404"><span class="linenos">404</span></a> <span class="nd">@property</span>
</span><span id="Dialect-405"><a href="#Dialect-405"><span class="linenos">405</span></a> <span class="k">def</span> <span class="nf">tokenizer</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tokenizer</span><span class="p">:</span>
</span><span id="Dialect-406"><a href="#Dialect-406"><span class="linenos">406</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;_tokenizer&quot;</span><span class="p">):</span>
</span><span id="Dialect-407"><a href="#Dialect-407"><span class="linenos">407</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_tokenizer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
</span><span id="Dialect-408"><a href="#Dialect-408"><span class="linenos">408</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokenizer</span>
</span><span id="Dialect-409"><a href="#Dialect-409"><span class="linenos">409</span></a>
</span><span id="Dialect-410"><a href="#Dialect-410"><span class="linenos">410</span></a> <span class="k">def</span> <span class="nf">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Parser</span><span class="p">:</span>
</span><span id="Dialect-411"><a href="#Dialect-411"><span class="linenos">411</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
</span><span id="Dialect-412"><a href="#Dialect-412"><span class="linenos">412</span></a>
</span><span id="Dialect-413"><a href="#Dialect-413"><span class="linenos">413</span></a> <span class="k">def</span> <span class="nf">generator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Generator</span><span class="p">:</span>
</span><span id="Dialect-414"><a href="#Dialect-414"><span class="linenos">414</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">generator_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
</span></pre></div>
<div id="Dialect.__init__" class="classattr">
<input id="Dialect.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="name">Dialect</span><span class="signature pdoc-code condensed">(<span class="param"><span class="o">**</span><span class="n">kwargs</span></span>)</span>
<label class="view-source-button" for="Dialect.__init__-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Dialect.__init__"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.__init__-290"><a href="#Dialect.__init__-290"><span class="linenos">290</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Dialect.__init__-291"><a href="#Dialect.__init__-291"><span class="linenos">291</span></a> <span class="n">normalization_strategy</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;normalization_strategy&quot;</span><span class="p">)</span>
</span><span id="Dialect.__init__-292"><a href="#Dialect.__init__-292"><span class="linenos">292</span></a>
</span><span id="Dialect.__init__-293"><a href="#Dialect.__init__-293"><span class="linenos">293</span></a> <span class="k">if</span> <span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Dialect.__init__-294"><a href="#Dialect.__init__-294"><span class="linenos">294</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NORMALIZATION_STRATEGY</span>
</span><span id="Dialect.__init__-295"><a href="#Dialect.__init__-295"><span class="linenos">295</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Dialect.__init__-296"><a href="#Dialect.__init__-296"><span class="linenos">296</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="o">=</span> <span class="n">NormalizationStrategy</span><span class="p">(</span><span class="n">normalization_strategy</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span></pre></div>
</div>
<div id="Dialect.INDEX_OFFSET" class="classattr">
<div class="attr variable">
<span class="name">INDEX_OFFSET</span> =
<span class="default_value">0</span>
</div>
<a class="headerlink" href="#Dialect.INDEX_OFFSET"></a>
</div>
<div id="Dialect.UNNEST_COLUMN_ONLY" class="classattr">
<div class="attr variable">
<span class="name">UNNEST_COLUMN_ONLY</span> =
<span class="default_value">False</span>
</div>
<a class="headerlink" href="#Dialect.UNNEST_COLUMN_ONLY"></a>
</div>
<div id="Dialect.ALIAS_POST_TABLESAMPLE" class="classattr">
<div class="attr variable">
<span class="name">ALIAS_POST_TABLESAMPLE</span> =
<span class="default_value">False</span>
</div>
<a class="headerlink" href="#Dialect.ALIAS_POST_TABLESAMPLE"></a>
</div>
<div id="Dialect.NORMALIZATION_STRATEGY" class="classattr">
<div class="attr variable">
<span class="name">NORMALIZATION_STRATEGY</span> =
<span class="default_value">&lt;<a href="#NormalizationStrategy.LOWERCASE">NormalizationStrategy.LOWERCASE</a>: &#39;LOWERCASE&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialect.NORMALIZATION_STRATEGY"></a>
</div>
<div id="Dialect.IDENTIFIERS_CAN_START_WITH_DIGIT" class="classattr">
<div class="attr variable">
<span class="name">IDENTIFIERS_CAN_START_WITH_DIGIT</span> =
<span class="default_value">False</span>
</div>
<a class="headerlink" href="#Dialect.IDENTIFIERS_CAN_START_WITH_DIGIT"></a>
</div>
<div id="Dialect.DPIPE_IS_STRING_CONCAT" class="classattr">
<div class="attr variable">
<span class="name">DPIPE_IS_STRING_CONCAT</span> =
<span class="default_value">True</span>
</div>
<a class="headerlink" href="#Dialect.DPIPE_IS_STRING_CONCAT"></a>
</div>
<div id="Dialect.STRICT_STRING_CONCAT" class="classattr">
<div class="attr variable">
<span class="name">STRICT_STRING_CONCAT</span> =
<span class="default_value">False</span>
</div>
<a class="headerlink" href="#Dialect.STRICT_STRING_CONCAT"></a>
</div>
<div id="Dialect.SUPPORTS_USER_DEFINED_TYPES" class="classattr">
<div class="attr variable">
<span class="name">SUPPORTS_USER_DEFINED_TYPES</span> =
<span class="default_value">True</span>
</div>
<a class="headerlink" href="#Dialect.SUPPORTS_USER_DEFINED_TYPES"></a>
</div>
<div id="Dialect.SUPPORTS_SEMI_ANTI_JOIN" class="classattr">
<div class="attr variable">
<span class="name">SUPPORTS_SEMI_ANTI_JOIN</span> =
<span class="default_value">True</span>
</div>
<a class="headerlink" href="#Dialect.SUPPORTS_SEMI_ANTI_JOIN"></a>
</div>
<div id="Dialect.NORMALIZE_FUNCTIONS" class="classattr">
<div class="attr variable">
<span class="name">NORMALIZE_FUNCTIONS</span><span class="annotation">: bool | str</span> =
<span class="default_value">&#39;upper&#39;</span>
</div>
<a class="headerlink" href="#Dialect.NORMALIZE_FUNCTIONS"></a>
</div>
<div id="Dialect.LOG_BASE_FIRST" class="classattr">
<div class="attr variable">
<span class="name">LOG_BASE_FIRST</span> =
<span class="default_value">True</span>
</div>
<a class="headerlink" href="#Dialect.LOG_BASE_FIRST"></a>
</div>
<div id="Dialect.NULL_ORDERING" class="classattr">
<div class="attr variable">
<span class="name">NULL_ORDERING</span> =
<span class="default_value">&#39;nulls_are_small&#39;</span>
</div>
<a class="headerlink" href="#Dialect.NULL_ORDERING"></a>
</div>
<div id="Dialect.TYPED_DIVISION" class="classattr">
<div class="attr variable">
<span class="name">TYPED_DIVISION</span> =
<span class="default_value">False</span>
</div>
<a class="headerlink" href="#Dialect.TYPED_DIVISION"></a>
</div>
<div id="Dialect.SAFE_DIVISION" class="classattr">
<div class="attr variable">
<span class="name">SAFE_DIVISION</span> =
<span class="default_value">False</span>
</div>
<a class="headerlink" href="#Dialect.SAFE_DIVISION"></a>
</div>
<div id="Dialect.CONCAT_COALESCE" class="classattr">
<div class="attr variable">
<span class="name">CONCAT_COALESCE</span> =
<span class="default_value">False</span>
</div>
<a class="headerlink" href="#Dialect.CONCAT_COALESCE"></a>
</div>
<div id="Dialect.DATE_FORMAT" class="classattr">
<div class="attr variable">
<span class="name">DATE_FORMAT</span> =
<span class="default_value">&#34;&#39;%Y-%m-%d&#39;&#34;</span>
</div>
<a class="headerlink" href="#Dialect.DATE_FORMAT"></a>
</div>
<div id="Dialect.DATEINT_FORMAT" class="classattr">
<div class="attr variable">
<span class="name">DATEINT_FORMAT</span> =
<span class="default_value">&#34;&#39;%Y%m%d&#39;&#34;</span>
</div>
<a class="headerlink" href="#Dialect.DATEINT_FORMAT"></a>
</div>
<div id="Dialect.TIME_FORMAT" class="classattr">
<div class="attr variable">
<span class="name">TIME_FORMAT</span> =
<span class="default_value">&#34;&#39;%Y-%m-%d %H:%M:%S&#39;&#34;</span>
</div>
<a class="headerlink" href="#Dialect.TIME_FORMAT"></a>
</div>
<div id="Dialect.TIME_MAPPING" class="classattr">
<div class="attr variable">
<span class="name">TIME_MAPPING</span><span class="annotation">: Dict[str, str]</span> =
<span class="default_value">{}</span>
</div>
<a class="headerlink" href="#Dialect.TIME_MAPPING"></a>
</div>
<div id="Dialect.FORMAT_MAPPING" class="classattr">
<div class="attr variable">
<span class="name">FORMAT_MAPPING</span><span class="annotation">: Dict[str, str]</span> =
<span class="default_value">{}</span>
</div>
<a class="headerlink" href="#Dialect.FORMAT_MAPPING"></a>
</div>
<div id="Dialect.ESCAPE_SEQUENCES" class="classattr">
<div class="attr variable">
<span class="name">ESCAPE_SEQUENCES</span><span class="annotation">: Dict[str, str]</span> =
<span class="default_value">{}</span>
</div>
<a class="headerlink" href="#Dialect.ESCAPE_SEQUENCES"></a>
</div>
<div id="Dialect.PSEUDOCOLUMNS" class="classattr">
<div class="attr variable">
<span class="name">PSEUDOCOLUMNS</span><span class="annotation">: Set[str]</span> =
<span class="default_value">set()</span>
</div>
<a class="headerlink" href="#Dialect.PSEUDOCOLUMNS"></a>
</div>
<div id="Dialect.tokenizer_class" class="classattr">
<div class="attr variable">
<span class="name">tokenizer_class</span> =
<span class="default_value">&lt;class &#39;<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialect.tokenizer_class"></a>
</div>
<div id="Dialect.parser_class" class="classattr">
<div class="attr variable">
<span class="name">parser_class</span> =
<span class="default_value">&lt;class &#39;<a href="../parser.html#Parser">sqlglot.parser.Parser</a>&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialect.parser_class"></a>
</div>
<div id="Dialect.generator_class" class="classattr">
<div class="attr variable">
<span class="name">generator_class</span> =
<span class="default_value">&lt;class &#39;<a href="../generator.html#Generator">sqlglot.generator.Generator</a>&#39;&gt;</span>
</div>
<a class="headerlink" href="#Dialect.generator_class"></a>
</div>
<div id="Dialect.TIME_TRIE" class="classattr">
<div class="attr variable">
<span class="name">TIME_TRIE</span><span class="annotation">: Dict</span> =
<span class="default_value">{}</span>
</div>
<a class="headerlink" href="#Dialect.TIME_TRIE"></a>
</div>
<div id="Dialect.FORMAT_TRIE" class="classattr">
<div class="attr variable">
<span class="name">FORMAT_TRIE</span><span class="annotation">: Dict</span> =
<span class="default_value">{}</span>
</div>
<a class="headerlink" href="#Dialect.FORMAT_TRIE"></a>
</div>
<div id="Dialect.INVERSE_TIME_MAPPING" class="classattr">
<div class="attr variable">
<span class="name">INVERSE_TIME_MAPPING</span><span class="annotation">: Dict[str, str]</span> =
<span class="default_value">{}</span>
</div>
<a class="headerlink" href="#Dialect.INVERSE_TIME_MAPPING"></a>
</div>
<div id="Dialect.INVERSE_TIME_TRIE" class="classattr">
<div class="attr variable">
<span class="name">INVERSE_TIME_TRIE</span><span class="annotation">: Dict</span> =
<span class="default_value">{}</span>
</div>
<a class="headerlink" href="#Dialect.INVERSE_TIME_TRIE"></a>
</div>
<div id="Dialect.INVERSE_ESCAPE_SEQUENCES" class="classattr">
<div class="attr variable">
<span class="name">INVERSE_ESCAPE_SEQUENCES</span><span class="annotation">: Dict[str, str]</span> =
<span class="default_value">{}</span>
</div>
<a class="headerlink" href="#Dialect.INVERSE_ESCAPE_SEQUENCES"></a>
</div>
<div id="Dialect.QUOTE_START" class="classattr">
<div class="attr variable">
<span class="name">QUOTE_START</span> =
<span class="default_value">&#34;&#39;&#34;</span>
</div>
<a class="headerlink" href="#Dialect.QUOTE_START"></a>
</div>
<div id="Dialect.QUOTE_END" class="classattr">
<div class="attr variable">
<span class="name">QUOTE_END</span> =
<span class="default_value">&#34;&#39;&#34;</span>
</div>
<a class="headerlink" href="#Dialect.QUOTE_END"></a>
</div>
<div id="Dialect.IDENTIFIER_START" class="classattr">
<div class="attr variable">
<span class="name">IDENTIFIER_START</span> =
<span class="default_value">&#39;&#34;&#39;</span>
</div>
<a class="headerlink" href="#Dialect.IDENTIFIER_START"></a>
</div>
<div id="Dialect.IDENTIFIER_END" class="classattr">
<div class="attr variable">
<span class="name">IDENTIFIER_END</span> =
<span class="default_value">&#39;&#34;&#39;</span>
</div>
<a class="headerlink" href="#Dialect.IDENTIFIER_END"></a>
</div>
<div id="Dialect.BIT_START" class="classattr">
<div class="attr variable">
<span class="name">BIT_START</span><span class="annotation">: Optional[str]</span> =
<span class="default_value">None</span>
</div>
<a class="headerlink" href="#Dialect.BIT_START"></a>
</div>
<div id="Dialect.BIT_END" class="classattr">
<div class="attr variable">
<span class="name">BIT_END</span><span class="annotation">: Optional[str]</span> =
<span class="default_value">None</span>
</div>
<a class="headerlink" href="#Dialect.BIT_END"></a>
</div>
<div id="Dialect.HEX_START" class="classattr">
<div class="attr variable">
<span class="name">HEX_START</span><span class="annotation">: Optional[str]</span> =
<span class="default_value">None</span>
</div>
<a class="headerlink" href="#Dialect.HEX_START"></a>
</div>
<div id="Dialect.HEX_END" class="classattr">
<div class="attr variable">
<span class="name">HEX_END</span><span class="annotation">: Optional[str]</span> =
<span class="default_value">None</span>
</div>
<a class="headerlink" href="#Dialect.HEX_END"></a>
</div>
<div id="Dialect.BYTE_START" class="classattr">
<div class="attr variable">
<span class="name">BYTE_START</span><span class="annotation">: Optional[str]</span> =
<span class="default_value">None</span>
</div>
<a class="headerlink" href="#Dialect.BYTE_START"></a>
</div>
<div id="Dialect.BYTE_END" class="classattr">
<div class="attr variable">
<span class="name">BYTE_END</span><span class="annotation">: Optional[str]</span> =
<span class="default_value">None</span>
</div>
<a class="headerlink" href="#Dialect.BYTE_END"></a>
</div>
<div id="Dialect.get_or_raise" class="classattr">
<input id="Dialect.get_or_raise-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<div class="decorator">@classmethod</div>
<span class="def">def</span>
<span class="name">get_or_raise</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="n">dialect</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n"><a href="#Dialect">Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="#Dialect">Dialect</a></span><span class="p">],</span> <span class="n">NoneType</span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n"><a href="#Dialect">Dialect</a></span>:</span></span>
<label class="view-source-button" for="Dialect.get_or_raise-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Dialect.get_or_raise"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.get_or_raise-233"><a href="#Dialect.get_or_raise-233"><span class="linenos">233</span></a> <span class="nd">@classmethod</span>
</span><span id="Dialect.get_or_raise-234"><a href="#Dialect.get_or_raise-234"><span class="linenos">234</span></a> <span class="k">def</span> <span class="nf">get_or_raise</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dialect</span><span class="p">:</span>
</span><span id="Dialect.get_or_raise-235"><a href="#Dialect.get_or_raise-235"><span class="linenos">235</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Dialect.get_or_raise-236"><a href="#Dialect.get_or_raise-236"><span class="linenos">236</span></a><span class="sd"> Look up a dialect in the global dialect registry and return it if it exists.</span>
</span><span id="Dialect.get_or_raise-237"><a href="#Dialect.get_or_raise-237"><span class="linenos">237</span></a>
</span><span id="Dialect.get_or_raise-238"><a href="#Dialect.get_or_raise-238"><span class="linenos">238</span></a><span class="sd"> Args:</span>
</span><span id="Dialect.get_or_raise-239"><a href="#Dialect.get_or_raise-239"><span class="linenos">239</span></a><span class="sd"> dialect: The target dialect. If this is a string, it can be optionally followed by</span>
</span><span id="Dialect.get_or_raise-240"><a href="#Dialect.get_or_raise-240"><span class="linenos">240</span></a><span class="sd"> additional key-value pairs that are separated by commas and are used to specify</span>
</span><span id="Dialect.get_or_raise-241"><a href="#Dialect.get_or_raise-241"><span class="linenos">241</span></a><span class="sd"> dialect settings, such as whether the dialect&#39;s identifiers are case-sensitive.</span>
</span><span id="Dialect.get_or_raise-242"><a href="#Dialect.get_or_raise-242"><span class="linenos">242</span></a>
</span><span id="Dialect.get_or_raise-243"><a href="#Dialect.get_or_raise-243"><span class="linenos">243</span></a><span class="sd"> Example:</span>
</span><span id="Dialect.get_or_raise-244"><a href="#Dialect.get_or_raise-244"><span class="linenos">244</span></a><span class="sd"> &gt;&gt;&gt; dialect = dialect_class = get_or_raise(&quot;duckdb&quot;)</span>
</span><span id="Dialect.get_or_raise-245"><a href="#Dialect.get_or_raise-245"><span class="linenos">245</span></a><span class="sd"> &gt;&gt;&gt; dialect = get_or_raise(&quot;mysql, normalization_strategy = case_sensitive&quot;)</span>
</span><span id="Dialect.get_or_raise-246"><a href="#Dialect.get_or_raise-246"><span class="linenos">246</span></a>
</span><span id="Dialect.get_or_raise-247"><a href="#Dialect.get_or_raise-247"><span class="linenos">247</span></a><span class="sd"> Returns:</span>
</span><span id="Dialect.get_or_raise-248"><a href="#Dialect.get_or_raise-248"><span class="linenos">248</span></a><span class="sd"> The corresponding Dialect instance.</span>
</span><span id="Dialect.get_or_raise-249"><a href="#Dialect.get_or_raise-249"><span class="linenos">249</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Dialect.get_or_raise-250"><a href="#Dialect.get_or_raise-250"><span class="linenos">250</span></a>
</span><span id="Dialect.get_or_raise-251"><a href="#Dialect.get_or_raise-251"><span class="linenos">251</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">dialect</span><span class="p">:</span>
</span><span id="Dialect.get_or_raise-252"><a href="#Dialect.get_or_raise-252"><span class="linenos">252</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">()</span>
</span><span id="Dialect.get_or_raise-253"><a href="#Dialect.get_or_raise-253"><span class="linenos">253</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="n">_Dialect</span><span class="p">):</span>
</span><span id="Dialect.get_or_raise-254"><a href="#Dialect.get_or_raise-254"><span class="linenos">254</span></a> <span class="k">return</span> <span class="n">dialect</span><span class="p">()</span>
</span><span id="Dialect.get_or_raise-255"><a href="#Dialect.get_or_raise-255"><span class="linenos">255</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="n">Dialect</span><span class="p">):</span>
</span><span id="Dialect.get_or_raise-256"><a href="#Dialect.get_or_raise-256"><span class="linenos">256</span></a> <span class="k">return</span> <span class="n">dialect</span>
</span><span id="Dialect.get_or_raise-257"><a href="#Dialect.get_or_raise-257"><span class="linenos">257</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="Dialect.get_or_raise-258"><a href="#Dialect.get_or_raise-258"><span class="linenos">258</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="Dialect.get_or_raise-259"><a href="#Dialect.get_or_raise-259"><span class="linenos">259</span></a> <span class="n">dialect_name</span><span class="p">,</span> <span class="o">*</span><span class="n">kv_pairs</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">)</span>
</span><span id="Dialect.get_or_raise-260"><a href="#Dialect.get_or_raise-260"><span class="linenos">260</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="n">v</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="p">(</span><span class="n">kv</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;=&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">kv</span> <span class="ow">in</span> <span class="n">kv_pairs</span><span class="p">)}</span>
</span><span id="Dialect.get_or_raise-261"><a href="#Dialect.get_or_raise-261"><span class="linenos">261</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
</span><span id="Dialect.get_or_raise-262"><a href="#Dialect.get_or_raise-262"><span class="linenos">262</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
</span><span id="Dialect.get_or_raise-263"><a href="#Dialect.get_or_raise-263"><span class="linenos">263</span></a> <span class="sa">f</span><span class="s2">&quot;Invalid dialect format: &#39;</span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&#39;. &quot;</span>
</span><span id="Dialect.get_or_raise-264"><a href="#Dialect.get_or_raise-264"><span class="linenos">264</span></a> <span class="s2">&quot;Please use the correct format: &#39;dialect [, k1 = v2 [, ...]]&#39;.&quot;</span>
</span><span id="Dialect.get_or_raise-265"><a href="#Dialect.get_or_raise-265"><span class="linenos">265</span></a> <span class="p">)</span>
</span><span id="Dialect.get_or_raise-266"><a href="#Dialect.get_or_raise-266"><span class="linenos">266</span></a>
</span><span id="Dialect.get_or_raise-267"><a href="#Dialect.get_or_raise-267"><span class="linenos">267</span></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dialect_name</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
</span><span id="Dialect.get_or_raise-268"><a href="#Dialect.get_or_raise-268"><span class="linenos">268</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
</span><span id="Dialect.get_or_raise-269"><a href="#Dialect.get_or_raise-269"><span class="linenos">269</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown dialect &#39;</span><span class="si">{</span><span class="n">dialect_name</span><span class="si">}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
</span><span id="Dialect.get_or_raise-270"><a href="#Dialect.get_or_raise-270"><span class="linenos">270</span></a>
</span><span id="Dialect.get_or_raise-271"><a href="#Dialect.get_or_raise-271"><span class="linenos">271</span></a> <span class="k">return</span> <span class="n">result</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="Dialect.get_or_raise-272"><a href="#Dialect.get_or_raise-272"><span class="linenos">272</span></a>
</span><span id="Dialect.get_or_raise-273"><a href="#Dialect.get_or_raise-273"><span class="linenos">273</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid dialect type for &#39;</span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&#39;: &#39;</span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Look up a dialect in the global dialect registry and return it if it exists.</p>
<h6 id="arguments">Arguments:</h6>
<ul>
<li><strong>dialect:</strong> The target dialect. If this is a string, it can be optionally followed by
additional key-value pairs that are separated by commas and are used to specify
dialect settings, such as whether the dialect's identifiers are case-sensitive.</li>
</ul>
<h6 id="example">Example:</h6>
<blockquote>
<div class="pdoc-code codehilite">
<pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="n">dialect</span> <span class="o">=</span> <span class="n">dialect_class</span> <span class="o">=</span> <span class="n">get_or_raise</span><span class="p">(</span><span class="s2">&quot;duckdb&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">dialect</span> <span class="o">=</span> <span class="n">get_or_raise</span><span class="p">(</span><span class="s2">&quot;mysql, normalization_strategy = case_sensitive&quot;</span><span class="p">)</span>
</code></pre>
</div>
</blockquote>
<h6 id="returns">Returns:</h6>
<blockquote>
<p>The corresponding Dialect instance.</p>
</blockquote>
</div>
</div>
<div id="Dialect.format_time" class="classattr">
<input id="Dialect.format_time-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<div class="decorator">@classmethod</div>
<span class="def">def</span>
<span class="name">format_time</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</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">NoneType</span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n">Optional</span><span class="p">[</span><span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">]</span>:</span></span>
<label class="view-source-button" for="Dialect.format_time-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Dialect.format_time"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.format_time-275"><a href="#Dialect.format_time-275"><span class="linenos">275</span></a> <span class="nd">@classmethod</span>
</span><span id="Dialect.format_time-276"><a href="#Dialect.format_time-276"><span class="linenos">276</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span>
</span><span id="Dialect.format_time-277"><a href="#Dialect.format_time-277"><span class="linenos">277</span></a> <span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</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="Dialect.format_time-278"><a href="#Dialect.format_time-278"><span class="linenos">278</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</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="Dialect.format_time-279"><a href="#Dialect.format_time-279"><span class="linenos">279</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="nb">str</span><span class="p">):</span>
</span><span id="Dialect.format_time-280"><a href="#Dialect.format_time-280"><span class="linenos">280</span></a> <span class="k">return</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><span id="Dialect.format_time-281"><a href="#Dialect.format_time-281"><span class="linenos">281</span></a> <span class="c1"># the time formats are quoted</span>
</span><span id="Dialect.format_time-282"><a href="#Dialect.format_time-282"><span class="linenos">282</span></a> <span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">)</span>
</span><span id="Dialect.format_time-283"><a href="#Dialect.format_time-283"><span class="linenos">283</span></a> <span class="p">)</span>
</span><span id="Dialect.format_time-284"><a href="#Dialect.format_time-284"><span class="linenos">284</span></a>
</span><span id="Dialect.format_time-285"><a href="#Dialect.format_time-285"><span class="linenos">285</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
</span><span id="Dialect.format_time-286"><a href="#Dialect.format_time-286"><span class="linenos">286</span></a> <span class="k">return</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="n">format_time</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="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">))</span>
</span><span id="Dialect.format_time-287"><a href="#Dialect.format_time-287"><span class="linenos">287</span></a>
</span><span id="Dialect.format_time-288"><a href="#Dialect.format_time-288"><span class="linenos">288</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
</div>
<div id="Dialect.normalize_identifier" class="classattr">
<input id="Dialect.normalize_identifier-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">normalize_identifier</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">expression</span><span class="p">:</span> <span class="o">~</span><span class="n">E</span></span><span class="return-annotation">) -> <span class="o">~</span><span class="n">E</span>:</span></span>
<label class="view-source-button" for="Dialect.normalize_identifier-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Dialect.normalize_identifier"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.normalize_identifier-306"><a href="#Dialect.normalize_identifier-306"><span class="linenos">306</span></a> <span class="k">def</span> <span class="nf">normalize_identifier</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
</span><span id="Dialect.normalize_identifier-307"><a href="#Dialect.normalize_identifier-307"><span class="linenos">307</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Dialect.normalize_identifier-308"><a href="#Dialect.normalize_identifier-308"><span class="linenos">308</span></a><span class="sd"> Transforms an identifier in a way that resembles how it&#39;d be resolved by this dialect.</span>
</span><span id="Dialect.normalize_identifier-309"><a href="#Dialect.normalize_identifier-309"><span class="linenos">309</span></a>
</span><span id="Dialect.normalize_identifier-310"><a href="#Dialect.normalize_identifier-310"><span class="linenos">310</span></a><span class="sd"> For example, an identifier like FoO would be resolved as foo in Postgres, because it</span>
</span><span id="Dialect.normalize_identifier-311"><a href="#Dialect.normalize_identifier-311"><span class="linenos">311</span></a><span class="sd"> lowercases all unquoted identifiers. On the other hand, Snowflake uppercases them, so</span>
</span><span id="Dialect.normalize_identifier-312"><a href="#Dialect.normalize_identifier-312"><span class="linenos">312</span></a><span class="sd"> it would resolve it as FOO. If it was quoted, it&#39;d need to be treated as case-sensitive,</span>
</span><span id="Dialect.normalize_identifier-313"><a href="#Dialect.normalize_identifier-313"><span class="linenos">313</span></a><span class="sd"> and so any normalization would be prohibited in order to avoid &quot;breaking&quot; the identifier.</span>
</span><span id="Dialect.normalize_identifier-314"><a href="#Dialect.normalize_identifier-314"><span class="linenos">314</span></a>
</span><span id="Dialect.normalize_identifier-315"><a href="#Dialect.normalize_identifier-315"><span class="linenos">315</span></a><span class="sd"> There are also dialects like Spark, which are case-insensitive even when quotes are</span>
</span><span id="Dialect.normalize_identifier-316"><a href="#Dialect.normalize_identifier-316"><span class="linenos">316</span></a><span class="sd"> present, and dialects like MySQL, whose resolution rules match those employed by the</span>
</span><span id="Dialect.normalize_identifier-317"><a href="#Dialect.normalize_identifier-317"><span class="linenos">317</span></a><span class="sd"> underlying operating system, for example they may always be case-sensitive in Linux.</span>
</span><span id="Dialect.normalize_identifier-318"><a href="#Dialect.normalize_identifier-318"><span class="linenos">318</span></a>
</span><span id="Dialect.normalize_identifier-319"><a href="#Dialect.normalize_identifier-319"><span class="linenos">319</span></a><span class="sd"> Finally, the normalization behavior of some engines can even be controlled through flags,</span>
</span><span id="Dialect.normalize_identifier-320"><a href="#Dialect.normalize_identifier-320"><span class="linenos">320</span></a><span class="sd"> like in Redshift&#39;s case, where users can explicitly set enable_case_sensitive_identifier.</span>
</span><span id="Dialect.normalize_identifier-321"><a href="#Dialect.normalize_identifier-321"><span class="linenos">321</span></a>
</span><span id="Dialect.normalize_identifier-322"><a href="#Dialect.normalize_identifier-322"><span class="linenos">322</span></a><span class="sd"> SQLGlot aims to understand and handle all of these different behaviors gracefully, so</span>
</span><span id="Dialect.normalize_identifier-323"><a href="#Dialect.normalize_identifier-323"><span class="linenos">323</span></a><span class="sd"> that it can analyze queries in the optimizer and successfully capture their semantics.</span>
</span><span id="Dialect.normalize_identifier-324"><a href="#Dialect.normalize_identifier-324"><span class="linenos">324</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Dialect.normalize_identifier-325"><a href="#Dialect.normalize_identifier-325"><span class="linenos">325</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="Dialect.normalize_identifier-326"><a href="#Dialect.normalize_identifier-326"><span class="linenos">326</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">Identifier</span><span class="p">)</span>
</span><span id="Dialect.normalize_identifier-327"><a href="#Dialect.normalize_identifier-327"><span class="linenos">327</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_SENSITIVE</span>
</span><span id="Dialect.normalize_identifier-328"><a href="#Dialect.normalize_identifier-328"><span class="linenos">328</span></a> <span class="ow">and</span> <span class="p">(</span>
</span><span id="Dialect.normalize_identifier-329"><a href="#Dialect.normalize_identifier-329"><span class="linenos">329</span></a> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span>
</span><span id="Dialect.normalize_identifier-330"><a href="#Dialect.normalize_identifier-330"><span class="linenos">330</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_INSENSITIVE</span>
</span><span id="Dialect.normalize_identifier-331"><a href="#Dialect.normalize_identifier-331"><span class="linenos">331</span></a> <span class="p">)</span>
</span><span id="Dialect.normalize_identifier-332"><a href="#Dialect.normalize_identifier-332"><span class="linenos">332</span></a> <span class="p">):</span>
</span><span id="Dialect.normalize_identifier-333"><a href="#Dialect.normalize_identifier-333"><span class="linenos">333</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
</span><span id="Dialect.normalize_identifier-334"><a href="#Dialect.normalize_identifier-334"><span class="linenos">334</span></a> <span class="s2">&quot;this&quot;</span><span class="p">,</span>
</span><span id="Dialect.normalize_identifier-335"><a href="#Dialect.normalize_identifier-335"><span class="linenos">335</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Dialect.normalize_identifier-336"><a href="#Dialect.normalize_identifier-336"><span class="linenos">336</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">UPPERCASE</span>
</span><span id="Dialect.normalize_identifier-337"><a href="#Dialect.normalize_identifier-337"><span class="linenos">337</span></a> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span>
</span><span id="Dialect.normalize_identifier-338"><a href="#Dialect.normalize_identifier-338"><span class="linenos">338</span></a> <span class="p">)</span>
</span><span id="Dialect.normalize_identifier-339"><a href="#Dialect.normalize_identifier-339"><span class="linenos">339</span></a>
</span><span id="Dialect.normalize_identifier-340"><a href="#Dialect.normalize_identifier-340"><span class="linenos">340</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
<div class="docstring"><p>Transforms an identifier in a way that resembles how it'd be resolved by this dialect.</p>
<p>For example, an identifier like FoO would be resolved as foo in Postgres, because it
lowercases all unquoted identifiers. On the other hand, Snowflake uppercases them, so
it would resolve it as FOO. If it was quoted, it'd need to be treated as case-sensitive,
and so any normalization would be prohibited in order to avoid "breaking" the identifier.</p>
<p>There are also dialects like Spark, which are case-insensitive even when quotes are
present, and dialects like MySQL, whose resolution rules match those employed by the
underlying operating system, for example they may always be case-sensitive in Linux.</p>
<p>Finally, the normalization behavior of some engines can even be controlled through flags,
like in Redshift's case, where users can explicitly set enable_case_sensitive_identifier.</p>
<p>SQLGlot aims to understand and handle all of these different behaviors gracefully, so
that it can analyze queries in the optimizer and successfully capture their semantics.</p>
</div>
</div>
<div id="Dialect.case_sensitive" class="classattr">
<input id="Dialect.case_sensitive-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">case_sensitive</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">text</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">) -> <span class="nb">bool</span>:</span></span>
<label class="view-source-button" for="Dialect.case_sensitive-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Dialect.case_sensitive"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.case_sensitive-342"><a href="#Dialect.case_sensitive-342"><span class="linenos">342</span></a> <span class="k">def</span> <span class="nf">case_sensitive</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="Dialect.case_sensitive-343"><a href="#Dialect.case_sensitive-343"><span class="linenos">343</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text contains any case sensitive characters, based on the dialect&#39;s rules.&quot;&quot;&quot;</span>
</span><span id="Dialect.case_sensitive-344"><a href="#Dialect.case_sensitive-344"><span class="linenos">344</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_INSENSITIVE</span><span class="p">:</span>
</span><span id="Dialect.case_sensitive-345"><a href="#Dialect.case_sensitive-345"><span class="linenos">345</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="Dialect.case_sensitive-346"><a href="#Dialect.case_sensitive-346"><span class="linenos">346</span></a>
</span><span id="Dialect.case_sensitive-347"><a href="#Dialect.case_sensitive-347"><span class="linenos">347</span></a> <span class="n">unsafe</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Dialect.case_sensitive-348"><a href="#Dialect.case_sensitive-348"><span class="linenos">348</span></a> <span class="nb">str</span><span class="o">.</span><span class="n">islower</span>
</span><span id="Dialect.case_sensitive-349"><a href="#Dialect.case_sensitive-349"><span class="linenos">349</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">UPPERCASE</span>
</span><span id="Dialect.case_sensitive-350"><a href="#Dialect.case_sensitive-350"><span class="linenos">350</span></a> <span class="k">else</span> <span class="nb">str</span><span class="o">.</span><span class="n">isupper</span>
</span><span id="Dialect.case_sensitive-351"><a href="#Dialect.case_sensitive-351"><span class="linenos">351</span></a> <span class="p">)</span>
</span><span id="Dialect.case_sensitive-352"><a href="#Dialect.case_sensitive-352"><span class="linenos">352</span></a> <span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="n">unsafe</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">text</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Checks if text contains any case sensitive characters, based on the dialect's rules.</p>
</div>
</div>
<div id="Dialect.can_identify" class="classattr">
<input id="Dialect.can_identify-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">can_identify</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">text</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s1">&#39;safe&#39;</span></span><span class="return-annotation">) -> <span class="nb">bool</span>:</span></span>
<label class="view-source-button" for="Dialect.can_identify-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Dialect.can_identify"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.can_identify-354"><a href="#Dialect.can_identify-354"><span class="linenos">354</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="Dialect.can_identify-355"><a href="#Dialect.can_identify-355"><span class="linenos">355</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
</span><span id="Dialect.can_identify-356"><a href="#Dialect.can_identify-356"><span class="linenos">356</span></a>
</span><span id="Dialect.can_identify-357"><a href="#Dialect.can_identify-357"><span class="linenos">357</span></a><span class="sd"> Args:</span>
</span><span id="Dialect.can_identify-358"><a href="#Dialect.can_identify-358"><span class="linenos">358</span></a><span class="sd"> text: The text to check.</span>
</span><span id="Dialect.can_identify-359"><a href="#Dialect.can_identify-359"><span class="linenos">359</span></a><span class="sd"> identify:</span>
</span><span id="Dialect.can_identify-360"><a href="#Dialect.can_identify-360"><span class="linenos">360</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
</span><span id="Dialect.can_identify-361"><a href="#Dialect.can_identify-361"><span class="linenos">361</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
</span><span id="Dialect.can_identify-362"><a href="#Dialect.can_identify-362"><span class="linenos">362</span></a>
</span><span id="Dialect.can_identify-363"><a href="#Dialect.can_identify-363"><span class="linenos">363</span></a><span class="sd"> Returns:</span>
</span><span id="Dialect.can_identify-364"><a href="#Dialect.can_identify-364"><span class="linenos">364</span></a><span class="sd"> Whether or not the given text can be identified.</span>
</span><span id="Dialect.can_identify-365"><a href="#Dialect.can_identify-365"><span class="linenos">365</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Dialect.can_identify-366"><a href="#Dialect.can_identify-366"><span class="linenos">366</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
</span><span id="Dialect.can_identify-367"><a href="#Dialect.can_identify-367"><span class="linenos">367</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Dialect.can_identify-368"><a href="#Dialect.can_identify-368"><span class="linenos">368</span></a>
</span><span id="Dialect.can_identify-369"><a href="#Dialect.can_identify-369"><span class="linenos">369</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
</span><span id="Dialect.can_identify-370"><a href="#Dialect.can_identify-370"><span class="linenos">370</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
</span><span id="Dialect.can_identify-371"><a href="#Dialect.can_identify-371"><span class="linenos">371</span></a>
</span><span id="Dialect.can_identify-372"><a href="#Dialect.can_identify-372"><span class="linenos">372</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
<div class="docstring"><p>Checks if text can be identified given an identify option.</p>
<h6 id="arguments">Arguments:</h6>
<ul>
<li><strong>text:</strong> The text to check.</li>
<li><strong>identify:</strong> "always" or <code>True</code>: Always returns true.
"safe": True if the identifier is case-insensitive.</li>
</ul>
<h6 id="returns">Returns:</h6>
<blockquote>
<p>Whether or not the given text can be identified.</p>
</blockquote>
</div>
</div>
<div id="Dialect.quote_identifier" class="classattr">
<input id="Dialect.quote_identifier-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">quote_identifier</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">expression</span><span class="p">:</span> <span class="o">~</span><span class="n">E</span>, </span><span class="param"><span class="n">identify</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span></span><span class="return-annotation">) -> <span class="o">~</span><span class="n">E</span>:</span></span>
<label class="view-source-button" for="Dialect.quote_identifier-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Dialect.quote_identifier"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.quote_identifier-374"><a href="#Dialect.quote_identifier-374"><span class="linenos">374</span></a> <span class="k">def</span> <span class="nf">quote_identifier</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">E</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
</span><span id="Dialect.quote_identifier-375"><a href="#Dialect.quote_identifier-375"><span class="linenos">375</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">Identifier</span><span class="p">):</span>
</span><span id="Dialect.quote_identifier-376"><a href="#Dialect.quote_identifier-376"><span class="linenos">376</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="Dialect.quote_identifier-377"><a href="#Dialect.quote_identifier-377"><span class="linenos">377</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
</span><span id="Dialect.quote_identifier-378"><a href="#Dialect.quote_identifier-378"><span class="linenos">378</span></a> <span class="s2">&quot;quoted&quot;</span><span class="p">,</span>
</span><span id="Dialect.quote_identifier-379"><a href="#Dialect.quote_identifier-379"><span class="linenos">379</span></a> <span class="n">identify</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
</span><span id="Dialect.quote_identifier-380"><a href="#Dialect.quote_identifier-380"><span class="linenos">380</span></a> <span class="p">)</span>
</span><span id="Dialect.quote_identifier-381"><a href="#Dialect.quote_identifier-381"><span class="linenos">381</span></a>
</span><span id="Dialect.quote_identifier-382"><a href="#Dialect.quote_identifier-382"><span class="linenos">382</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
</div>
<div id="Dialect.parse" class="classattr">
<input id="Dialect.parse-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">parse</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">sql</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="o">**</span><span class="n">opts</span></span><span class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="n">Optional</span><span class="p">[</span><span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">]]</span>:</span></span>
<label class="view-source-button" for="Dialect.parse-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Dialect.parse"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.parse-384"><a href="#Dialect.parse-384"><span class="linenos">384</span></a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</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">Optional</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="Dialect.parse-385"><a href="#Dialect.parse-385"><span class="linenos">385</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">),</span> <span class="n">sql</span><span class="p">)</span>
</span></pre></div>
</div>
<div id="Dialect.parse_into" class="classattr">
<input id="Dialect.parse_into-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">parse_into</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">expression_type</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Type</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">Collection</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Type</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="param"> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="o">**</span><span class="n">opts</span></span><span class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="n">Optional</span><span class="p">[</span><span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">]]</span>:</span></span>
<label class="view-source-button" for="Dialect.parse_into-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Dialect.parse_into"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.parse_into-387"><a href="#Dialect.parse_into-387"><span class="linenos">387</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
</span><span id="Dialect.parse_into-388"><a href="#Dialect.parse_into-388"><span class="linenos">388</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression_type</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
</span><span id="Dialect.parse_into-389"><a href="#Dialect.parse_into-389"><span class="linenos">389</span></a> <span class="p">)</span> <span class="o">-&gt;</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">Optional</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="Dialect.parse_into-390"><a href="#Dialect.parse_into-390"><span class="linenos">390</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">parse_into</span><span class="p">(</span><span class="n">expression_type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">),</span> <span class="n">sql</span><span class="p">)</span>
</span></pre></div>
</div>
<div id="Dialect.generate" class="classattr">
<input id="Dialect.generate-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">generate</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><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="param"> <span class="n">copy</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="o">**</span><span class="n">opts</span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="Dialect.generate-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Dialect.generate"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.generate-392"><a href="#Dialect.generate-392"><span class="linenos">392</span></a> <span class="k">def</span> <span class="nf">generate</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="n">copy</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Dialect.generate-393"><a href="#Dialect.generate-393"><span class="linenos">393</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">generator</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">)</span>
</span></pre></div>
</div>
<div id="Dialect.transpile" class="classattr">
<input id="Dialect.transpile-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">transpile</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">sql</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="o">**</span><span class="n">opts</span></span><span class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>:</span></span>
<label class="view-source-button" for="Dialect.transpile-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Dialect.transpile"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.transpile-395"><a href="#Dialect.transpile-395"><span class="linenos">395</span></a> <span class="k">def</span> <span class="nf">transpile</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
</span><span id="Dialect.transpile-396"><a href="#Dialect.transpile-396"><span class="linenos">396</span></a> <span class="k">return</span> <span class="p">[</span>
</span><span id="Dialect.transpile-397"><a href="#Dialect.transpile-397"><span class="linenos">397</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</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">opts</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Dialect.transpile-398"><a href="#Dialect.transpile-398"><span class="linenos">398</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
</span><span id="Dialect.transpile-399"><a href="#Dialect.transpile-399"><span class="linenos">399</span></a> <span class="p">]</span>
</span></pre></div>
</div>
<div id="Dialect.tokenize" class="classattr">
<input id="Dialect.tokenize-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">tokenize</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">sql</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="n"><a href="../tokens.html#Token">sqlglot.tokens.Token</a></span><span class="p">]</span>:</span></span>
<label class="view-source-button" for="Dialect.tokenize-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Dialect.tokenize"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.tokenize-401"><a href="#Dialect.tokenize-401"><span class="linenos">401</span></a> <span class="k">def</span> <span class="nf">tokenize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
</span><span id="Dialect.tokenize-402"><a href="#Dialect.tokenize-402"><span class="linenos">402</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenizer</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
</span></pre></div>
</div>
<div id="Dialect.tokenizer" class="classattr">
<div class="attr variable">
<span class="name">tokenizer</span><span class="annotation">: <a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a></span>
</div>
<a class="headerlink" href="#Dialect.tokenizer"></a>
</div>
<div id="Dialect.parser" class="classattr">
<input id="Dialect.parser-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">parser</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="o">**</span><span class="n">opts</span></span><span class="return-annotation">) -> <span class="n"><a href="../parser.html#Parser">sqlglot.parser.Parser</a></span>:</span></span>
<label class="view-source-button" for="Dialect.parser-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Dialect.parser"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.parser-410"><a href="#Dialect.parser-410"><span class="linenos">410</span></a> <span class="k">def</span> <span class="nf">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Parser</span><span class="p">:</span>
</span><span id="Dialect.parser-411"><a href="#Dialect.parser-411"><span class="linenos">411</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
</span></pre></div>
</div>
<div id="Dialect.generator" class="classattr">
<input id="Dialect.generator-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">generator</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="o">**</span><span class="n">opts</span></span><span class="return-annotation">) -> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>:</span></span>
<label class="view-source-button" for="Dialect.generator-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Dialect.generator"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.generator-413"><a href="#Dialect.generator-413"><span class="linenos">413</span></a> <span class="k">def</span> <span class="nf">generator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Generator</span><span class="p">:</span>
</span><span id="Dialect.generator-414"><a href="#Dialect.generator-414"><span class="linenos">414</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">generator_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
</span></pre></div>
</div>
</section>
<section id="DialectType">
<div class="attr variable">
<span class="name">DialectType</span> =
<input id="DialectType-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="DialectType-view-value"></label><span class="default_value">typing.Union[str, <a href="#Dialect">Dialect</a>, typing.Type[<a href="#Dialect">Dialect</a>], NoneType]</span>
</div>
<a class="headerlink" href="#DialectType"></a>
</section>
<section id="rename_func">
<input id="rename_func-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">rename_func</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">name</span><span class="p">:</span> <span class="nb">str</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>
<label class="view-source-button" for="rename_func-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#rename_func"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="rename_func-420"><a href="#rename_func-420"><span class="linenos">420</span></a><span class="k">def</span> <span class="nf">rename_func</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">-&gt;</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="rename_func-421"><a href="#rename_func-421"><span class="linenos">421</span></a> <span class="k">return</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">flatten</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">values</span><span class="p">()))</span>
</span></pre></div>
</section>
<section id="approx_count_distinct_sql">
<input id="approx_count_distinct_sql-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">approx_count_distinct_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="approx_count_distinct_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#approx_count_distinct_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="approx_count_distinct_sql-424"><a href="#approx_count_distinct_sql-424"><span class="linenos">424</span></a><span class="k">def</span> <span class="nf">approx_count_distinct_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">ApproxDistinct</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="approx_count_distinct_sql-425"><a href="#approx_count_distinct_sql-425"><span class="linenos">425</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">&quot;accuracy&quot;</span><span class="p">):</span>
</span><span id="approx_count_distinct_sql-426"><a href="#approx_count_distinct_sql-426"><span class="linenos">426</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;APPROX_COUNT_DISTINCT does not support accuracy&quot;</span><span class="p">)</span>
</span><span id="approx_count_distinct_sql-427"><a href="#approx_count_distinct_sql-427"><span class="linenos">427</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span></pre></div>
</section>
<section id="if_sql">
<input id="if_sql-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">if_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;IF&#39;</span>,</span><span class="param"> <span class="n">false_value</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</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">NoneType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</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#If">sqlglot.expressions.If</a></span><span class="p">],</span> <span class="nb">str</span><span class="p">]</span>:</span></span>
<label class="view-source-button" for="if_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#if_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="if_sql-430"><a href="#if_sql-430"><span class="linenos">430</span></a><span class="k">def</span> <span class="nf">if_sql</span><span class="p">(</span>
</span><span id="if_sql-431"><a href="#if_sql-431"><span class="linenos">431</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;IF&quot;</span><span class="p">,</span> <span class="n">false_value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="if_sql-432"><a href="#if_sql-432"><span class="linenos">432</span></a><span class="p">)</span> <span class="o">-&gt;</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">If</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
</span><span id="if_sql-433"><a href="#if_sql-433"><span class="linenos">433</span></a> <span class="k">def</span> <span class="nf">_if_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">If</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="if_sql-434"><a href="#if_sql-434"><span class="linenos">434</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="if_sql-435"><a href="#if_sql-435"><span class="linenos">435</span></a> <span class="n">name</span><span class="p">,</span>
</span><span id="if_sql-436"><a href="#if_sql-436"><span class="linenos">436</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
</span><span id="if_sql-437"><a href="#if_sql-437"><span class="linenos">437</span></a> <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">&quot;true&quot;</span><span class="p">),</span>
</span><span id="if_sql-438"><a href="#if_sql-438"><span class="linenos">438</span></a> <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">&quot;false&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">false_value</span><span class="p">,</span>
</span><span id="if_sql-439"><a href="#if_sql-439"><span class="linenos">439</span></a> <span class="p">)</span>
</span><span id="if_sql-440"><a href="#if_sql-440"><span class="linenos">440</span></a>
</span><span id="if_sql-441"><a href="#if_sql-441"><span class="linenos">441</span></a> <span class="k">return</span> <span class="n">_if_sql</span>
</span></pre></div>
</section>
<section id="arrow_json_extract_sql">
<input id="arrow_json_extract_sql-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">arrow_json_extract_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a></span> <span class="o">|</span> <span class="n"><a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="arrow_json_extract_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#arrow_json_extract_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="arrow_json_extract_sql-444"><a href="#arrow_json_extract_sql-444"><span class="linenos">444</span></a><span class="k">def</span> <span class="nf">arrow_json_extract_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">JSONExtract</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="arrow_json_extract_sql-445"><a href="#arrow_json_extract_sql-445"><span class="linenos">445</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;-&gt;&quot;</span><span class="p">)</span>
</span></pre></div>
</section>
<section id="arrow_json_extract_scalar_sql">
<input id="arrow_json_extract_scalar_sql-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">arrow_json_extract_scalar_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a></span> <span class="o">|</span> <span class="n"><a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="arrow_json_extract_scalar_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#arrow_json_extract_scalar_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="arrow_json_extract_scalar_sql-448"><a href="#arrow_json_extract_scalar_sql-448"><span class="linenos">448</span></a><span class="k">def</span> <span class="nf">arrow_json_extract_scalar_sql</span><span class="p">(</span>
</span><span id="arrow_json_extract_scalar_sql-449"><a href="#arrow_json_extract_scalar_sql-449"><span class="linenos">449</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">JSONExtractScalar</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span>
</span><span id="arrow_json_extract_scalar_sql-450"><a href="#arrow_json_extract_scalar_sql-450"><span class="linenos">450</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="arrow_json_extract_scalar_sql-451"><a href="#arrow_json_extract_scalar_sql-451"><span class="linenos">451</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;-&gt;&gt;&quot;</span><span class="p">)</span>
</span></pre></div>
</section>
<section id="inline_array_sql">
<input id="inline_array_sql-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">inline_array_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#Array">sqlglot.expressions.Array</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="inline_array_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#inline_array_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="inline_array_sql-454"><a href="#inline_array_sql-454"><span class="linenos">454</span></a><span class="k">def</span> <span class="nf">inline_array_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Array</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="inline_array_sql-455"><a href="#inline_array_sql-455"><span class="linenos">455</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;[</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">]&quot;</span>
</span></pre></div>
</section>
<section id="no_ilike_sql">
<input id="no_ilike_sql-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">no_ilike_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#ILike">sqlglot.expressions.ILike</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="no_ilike_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#no_ilike_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="no_ilike_sql-458"><a href="#no_ilike_sql-458"><span class="linenos">458</span></a><span class="k">def</span> <span class="nf">no_ilike_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">ILike</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="no_ilike_sql-459"><a href="#no_ilike_sql-459"><span class="linenos">459</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">like_sql</span><span class="p">(</span>
</span><span id="no_ilike_sql-460"><a href="#no_ilike_sql-460"><span class="linenos">460</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Like</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">Lower</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">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">expression</span><span class="p">)</span>
</span><span id="no_ilike_sql-461"><a href="#no_ilike_sql-461"><span class="linenos">461</span></a> <span class="p">)</span>
</span></pre></div>
</section>
<section id="no_paren_current_date_sql">
<input id="no_paren_current_date_sql-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">no_paren_current_date_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="no_paren_current_date_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#no_paren_current_date_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="no_paren_current_date_sql-464"><a href="#no_paren_current_date_sql-464"><span class="linenos">464</span></a><span class="k">def</span> <span class="nf">no_paren_current_date_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">CurrentDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="no_paren_current_date_sql-465"><a href="#no_paren_current_date_sql-465"><span class="linenos">465</span></a> <span class="n">zone</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="no_paren_current_date_sql-466"><a href="#no_paren_current_date_sql-466"><span class="linenos">466</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CURRENT_DATE AT TIME ZONE </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">zone</span> <span class="k">else</span> <span class="s2">&quot;CURRENT_DATE&quot;</span>
</span></pre></div>
</section>
<section id="no_recursive_cte_sql">
<input id="no_recursive_cte_sql-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">no_recursive_cte_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#With">sqlglot.expressions.With</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="no_recursive_cte_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#no_recursive_cte_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="no_recursive_cte_sql-469"><a href="#no_recursive_cte_sql-469"><span class="linenos">469</span></a><span class="k">def</span> <span class="nf">no_recursive_cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="no_recursive_cte_sql-470"><a href="#no_recursive_cte_sql-470"><span class="linenos">470</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">&quot;recursive&quot;</span><span class="p">):</span>
</span><span id="no_recursive_cte_sql-471"><a href="#no_recursive_cte_sql-471"><span class="linenos">471</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Recursive CTEs are unsupported&quot;</span><span class="p">)</span>
</span><span id="no_recursive_cte_sql-472"><a href="#no_recursive_cte_sql-472"><span class="linenos">472</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;recursive&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="no_recursive_cte_sql-473"><a href="#no_recursive_cte_sql-473"><span class="linenos">473</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">with_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
</section>
<section id="no_safe_divide_sql">
<input id="no_safe_divide_sql-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">no_safe_divide_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="no_safe_divide_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#no_safe_divide_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="no_safe_divide_sql-476"><a href="#no_safe_divide_sql-476"><span class="linenos">476</span></a><span class="k">def</span> <span class="nf">no_safe_divide_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">SafeDivide</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="no_safe_divide_sql-477"><a href="#no_safe_divide_sql-477"><span class="linenos">477</span></a> <span class="n">n</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="no_safe_divide_sql-478"><a href="#no_safe_divide_sql-478"><span class="linenos">478</span></a> <span class="n">d</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
</span><span id="no_safe_divide_sql-479"><a href="#no_safe_divide_sql-479"><span class="linenos">479</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;IF(</span><span class="si">{</span><span class="n">d</span><span class="si">}</span><span class="s2"> &lt;&gt; 0, </span><span class="si">{</span><span class="n">n</span><span class="si">}</span><span class="s2"> / </span><span class="si">{</span><span class="n">d</span><span class="si">}</span><span class="s2">, NULL)&quot;</span>
</span></pre></div>
</section>
<section id="no_tablesample_sql">
<input id="no_tablesample_sql-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">no_tablesample_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#TableSample">sqlglot.expressions.TableSample</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="no_tablesample_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#no_tablesample_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="no_tablesample_sql-482"><a href="#no_tablesample_sql-482"><span class="linenos">482</span></a><span class="k">def</span> <span class="nf">no_tablesample_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">TableSample</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="no_tablesample_sql-483"><a href="#no_tablesample_sql-483"><span class="linenos">483</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;TABLESAMPLE unsupported&quot;</span><span class="p">)</span>
</span><span id="no_tablesample_sql-484"><a href="#no_tablesample_sql-484"><span class="linenos">484</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span></pre></div>
</section>
<section id="no_pivot_sql">
<input id="no_pivot_sql-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">no_pivot_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="no_pivot_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#no_pivot_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="no_pivot_sql-487"><a href="#no_pivot_sql-487"><span class="linenos">487</span></a><span class="k">def</span> <span class="nf">no_pivot_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Pivot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="no_pivot_sql-488"><a href="#no_pivot_sql-488"><span class="linenos">488</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;PIVOT unsupported&quot;</span><span class="p">)</span>
</span><span id="no_pivot_sql-489"><a href="#no_pivot_sql-489"><span class="linenos">489</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
</section>
<section id="no_trycast_sql">
<input id="no_trycast_sql-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">no_trycast_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="no_trycast_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#no_trycast_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="no_trycast_sql-492"><a href="#no_trycast_sql-492"><span class="linenos">492</span></a><span class="k">def</span> <span class="nf">no_trycast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">TryCast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="no_trycast_sql-493"><a href="#no_trycast_sql-493"><span class="linenos">493</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
</section>
<section id="no_properties_sql">
<input id="no_properties_sql-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">no_properties_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#Properties">sqlglot.expressions.Properties</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="no_properties_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#no_properties_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="no_properties_sql-496"><a href="#no_properties_sql-496"><span class="linenos">496</span></a><span class="k">def</span> <span class="nf">no_properties_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="no_properties_sql-497"><a href="#no_properties_sql-497"><span class="linenos">497</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Properties unsupported&quot;</span><span class="p">)</span>
</span><span id="no_properties_sql-498"><a href="#no_properties_sql-498"><span class="linenos">498</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
</section>
<section id="no_comment_column_constraint_sql">
<input id="no_comment_column_constraint_sql-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">no_comment_column_constraint_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="no_comment_column_constraint_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#no_comment_column_constraint_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="no_comment_column_constraint_sql-501"><a href="#no_comment_column_constraint_sql-501"><span class="linenos">501</span></a><span class="k">def</span> <span class="nf">no_comment_column_constraint_sql</span><span class="p">(</span>
</span><span id="no_comment_column_constraint_sql-502"><a href="#no_comment_column_constraint_sql-502"><span class="linenos">502</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">CommentColumnConstraint</span>
</span><span id="no_comment_column_constraint_sql-503"><a href="#no_comment_column_constraint_sql-503"><span class="linenos">503</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="no_comment_column_constraint_sql-504"><a href="#no_comment_column_constraint_sql-504"><span class="linenos">504</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;CommentColumnConstraint unsupported&quot;</span><span class="p">)</span>
</span><span id="no_comment_column_constraint_sql-505"><a href="#no_comment_column_constraint_sql-505"><span class="linenos">505</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
</section>
<section id="no_map_from_entries_sql">
<input id="no_map_from_entries_sql-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">no_map_from_entries_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="no_map_from_entries_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#no_map_from_entries_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="no_map_from_entries_sql-508"><a href="#no_map_from_entries_sql-508"><span class="linenos">508</span></a><span class="k">def</span> <span class="nf">no_map_from_entries_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">MapFromEntries</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="no_map_from_entries_sql-509"><a href="#no_map_from_entries_sql-509"><span class="linenos">509</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;MAP_FROM_ENTRIES unsupported&quot;</span><span class="p">)</span>
</span><span id="no_map_from_entries_sql-510"><a href="#no_map_from_entries_sql-510"><span class="linenos">510</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
</section>
<section id="str_position_sql">
<input id="str_position_sql-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">str_position_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="str_position_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#str_position_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="str_position_sql-513"><a href="#str_position_sql-513"><span class="linenos">513</span></a><span class="k">def</span> <span class="nf">str_position_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">StrPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="str_position_sql-514"><a href="#str_position_sql-514"><span class="linenos">514</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="str_position_sql-515"><a href="#str_position_sql-515"><span class="linenos">515</span></a> <span class="n">substr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;substr&quot;</span><span class="p">)</span>
</span><span id="str_position_sql-516"><a href="#str_position_sql-516"><span class="linenos">516</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
</span><span id="str_position_sql-517"><a href="#str_position_sql-517"><span class="linenos">517</span></a> <span class="k">if</span> <span class="n">position</span><span class="p">:</span>
</span><span id="str_position_sql-518"><a href="#str_position_sql-518"><span class="linenos">518</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STRPOS(SUBSTR(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="n">substr</span><span class="si">}</span><span class="s2">) + </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2"> - 1&quot;</span>
</span><span id="str_position_sql-519"><a href="#str_position_sql-519"><span class="linenos">519</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STRPOS(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">substr</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
</section>
<section id="struct_extract_sql">
<input id="struct_extract_sql-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">struct_extract_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="struct_extract_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#struct_extract_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="struct_extract_sql-522"><a href="#struct_extract_sql-522"><span class="linenos">522</span></a><span class="k">def</span> <span class="nf">struct_extract_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">StructExtract</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="struct_extract_sql-523"><a href="#struct_extract_sql-523"><span class="linenos">523</span></a> <span class="k">return</span> <span class="p">(</span>
</span><span id="struct_extract_sql-524"><a href="#struct_extract_sql-524"><span class="linenos">524</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</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">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="p">))</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="struct_extract_sql-525"><a href="#struct_extract_sql-525"><span class="linenos">525</span></a> <span class="p">)</span>
</span></pre></div>
</section>
<section id="var_map_sql">
<input id="var_map_sql-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">var_map_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#Map">sqlglot.expressions.Map</a></span> <span class="o">|</span> <span class="n"><a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a></span>,</span><span class="param"> <span class="n">map_func_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;MAP&#39;</span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="var_map_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#var_map_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="var_map_sql-528"><a href="#var_map_sql-528"><span class="linenos">528</span></a><span class="k">def</span> <span class="nf">var_map_sql</span><span class="p">(</span>
</span><span id="var_map_sql-529"><a href="#var_map_sql-529"><span class="linenos">529</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Map</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">,</span> <span class="n">map_func_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;MAP&quot;</span>
</span><span id="var_map_sql-530"><a href="#var_map_sql-530"><span class="linenos">530</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="var_map_sql-531"><a href="#var_map_sql-531"><span class="linenos">531</span></a> <span class="n">keys</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">&quot;keys&quot;</span><span class="p">]</span>
</span><span id="var_map_sql-532"><a href="#var_map_sql-532"><span class="linenos">532</span></a> <span class="n">values</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">&quot;values&quot;</span><span class="p">]</span>
</span><span id="var_map_sql-533"><a href="#var_map_sql-533"><span class="linenos">533</span></a>
</span><span id="var_map_sql-534"><a href="#var_map_sql-534"><span class="linenos">534</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">keys</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
</span><span id="var_map_sql-535"><a href="#var_map_sql-535"><span class="linenos">535</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Cannot convert array columns into map.&quot;</span><span class="p">)</span>
</span><span id="var_map_sql-536"><a href="#var_map_sql-536"><span class="linenos">536</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">map_func_name</span><span class="p">,</span> <span class="n">keys</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span>
</span><span id="var_map_sql-537"><a href="#var_map_sql-537"><span class="linenos">537</span></a>
</span><span id="var_map_sql-538"><a href="#var_map_sql-538"><span class="linenos">538</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="var_map_sql-539"><a href="#var_map_sql-539"><span class="linenos">539</span></a> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">keys</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">values</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
</span><span id="var_map_sql-540"><a href="#var_map_sql-540"><span class="linenos">540</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">key</span><span class="p">))</span>
</span><span id="var_map_sql-541"><a href="#var_map_sql-541"><span class="linenos">541</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
</span><span id="var_map_sql-542"><a href="#var_map_sql-542"><span class="linenos">542</span></a>
</span><span id="var_map_sql-543"><a href="#var_map_sql-543"><span class="linenos">543</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">map_func_name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
</span></pre></div>
</section>
<section id="format_time_lambda">
<input id="format_time_lambda-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">format_time_lambda</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">exp_class</span><span class="p">:</span> <span class="n">Type</span><span class="p">[</span><span class="o">~</span><span class="n">E</span><span class="p">]</span>,</span><span class="param"> <span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">default</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">NoneType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="n">Callable</span><span class="p">[[</span><span class="n">List</span><span class="p">],</span> <span class="o">~</span><span class="n">E</span><span class="p">]</span>:</span></span>
<label class="view-source-button" for="format_time_lambda-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#format_time_lambda"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="format_time_lambda-546"><a href="#format_time_lambda-546"><span class="linenos">546</span></a><span class="k">def</span> <span class="nf">format_time_lambda</span><span class="p">(</span>
</span><span id="format_time_lambda-547"><a href="#format_time_lambda-547"><span class="linenos">547</span></a> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">default</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="format_time_lambda-548"><a href="#format_time_lambda-548"><span class="linenos">548</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</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">E</span><span class="p">]:</span>
</span><span id="format_time_lambda-549"><a href="#format_time_lambda-549"><span class="linenos">549</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Helper used for time expressions.</span>
</span><span id="format_time_lambda-550"><a href="#format_time_lambda-550"><span class="linenos">550</span></a>
</span><span id="format_time_lambda-551"><a href="#format_time_lambda-551"><span class="linenos">551</span></a><span class="sd"> Args:</span>
</span><span id="format_time_lambda-552"><a href="#format_time_lambda-552"><span class="linenos">552</span></a><span class="sd"> exp_class: the expression class to instantiate.</span>
</span><span id="format_time_lambda-553"><a href="#format_time_lambda-553"><span class="linenos">553</span></a><span class="sd"> dialect: target sql dialect.</span>
</span><span id="format_time_lambda-554"><a href="#format_time_lambda-554"><span class="linenos">554</span></a><span class="sd"> default: the default format, True being time.</span>
</span><span id="format_time_lambda-555"><a href="#format_time_lambda-555"><span class="linenos">555</span></a>
</span><span id="format_time_lambda-556"><a href="#format_time_lambda-556"><span class="linenos">556</span></a><span class="sd"> Returns:</span>
</span><span id="format_time_lambda-557"><a href="#format_time_lambda-557"><span class="linenos">557</span></a><span class="sd"> A callable that can be used to return the appropriately formatted time expression.</span>
</span><span id="format_time_lambda-558"><a href="#format_time_lambda-558"><span class="linenos">558</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="format_time_lambda-559"><a href="#format_time_lambda-559"><span class="linenos">559</span></a>
</span><span id="format_time_lambda-560"><a href="#format_time_lambda-560"><span class="linenos">560</span></a> <span class="k">def</span> <span class="nf">_format_time</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">):</span>
</span><span id="format_time_lambda-561"><a href="#format_time_lambda-561"><span class="linenos">561</span></a> <span class="k">return</span> <span class="n">exp_class</span><span class="p">(</span>
</span><span id="format_time_lambda-562"><a href="#format_time_lambda-562"><span class="linenos">562</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="format_time_lambda-563"><a href="#format_time_lambda-563"><span class="linenos">563</span></a> <span class="nb">format</span><span class="o">=</span><span class="n">Dialect</span><span class="p">[</span><span class="n">dialect</span><span class="p">]</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span>
</span><span id="format_time_lambda-564"><a href="#format_time_lambda-564"><span class="linenos">564</span></a> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="format_time_lambda-565"><a href="#format_time_lambda-565"><span class="linenos">565</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">Dialect</span><span class="p">[</span><span class="n">dialect</span><span class="p">]</span><span class="o">.</span><span class="n">TIME_FORMAT</span> <span class="k">if</span> <span class="n">default</span> <span class="ow">is</span> <span class="kc">True</span> <span class="k">else</span> <span class="n">default</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
</span><span id="format_time_lambda-566"><a href="#format_time_lambda-566"><span class="linenos">566</span></a> <span class="p">),</span>
</span><span id="format_time_lambda-567"><a href="#format_time_lambda-567"><span class="linenos">567</span></a> <span class="p">)</span>
</span><span id="format_time_lambda-568"><a href="#format_time_lambda-568"><span class="linenos">568</span></a>
</span><span id="format_time_lambda-569"><a href="#format_time_lambda-569"><span class="linenos">569</span></a> <span class="k">return</span> <span class="n">_format_time</span>
</span></pre></div>
<div class="docstring"><p>Helper used for time expressions.</p>
<h6 id="arguments">Arguments:</h6>
<ul>
<li><strong>exp_class:</strong> the expression class to instantiate.</li>
<li><strong>dialect:</strong> target sql dialect.</li>
<li><strong>default:</strong> the default format, True being time.</li>
</ul>
<h6 id="returns">Returns:</h6>
<blockquote>
<p>A callable that can be used to return the appropriately formatted time expression.</p>
</blockquote>
</div>
</section>
<section id="time_format">
<input id="time_format-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">time_format</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">dialect</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n"><a href="#Dialect">Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="#Dialect">Dialect</a></span><span class="p">],</span> <span class="n">NoneType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</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#UnixToStr">sqlglot.expressions.UnixToStr</a></span> <span class="o">|</span> <span class="n"><a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a></span><span class="p">],</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span>:</span></span>
<label class="view-source-button" for="time_format-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#time_format"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="time_format-572"><a href="#time_format-572"><span class="linenos">572</span></a><span class="k">def</span> <span class="nf">time_format</span><span class="p">(</span>
</span><span id="time_format-573"><a href="#time_format-573"><span class="linenos">573</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="time_format-574"><a href="#time_format-574"><span class="linenos">574</span></a><span class="p">)</span> <span class="o">-&gt;</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">UnixToStr</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
</span><span id="time_format-575"><a href="#time_format-575"><span class="linenos">575</span></a> <span class="k">def</span> <span class="nf">_time_format</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">UnixToStr</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
</span><span id="time_format-576"><a href="#time_format-576"><span class="linenos">576</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="time_format-577"><a href="#time_format-577"><span class="linenos">577</span></a><span class="sd"> Returns the time format for a given expression, unless it&#39;s equivalent</span>
</span><span id="time_format-578"><a href="#time_format-578"><span class="linenos">578</span></a><span class="sd"> to the default time format of the dialect of interest.</span>
</span><span id="time_format-579"><a href="#time_format-579"><span class="linenos">579</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="time_format-580"><a href="#time_format-580"><span class="linenos">580</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="time_format-581"><a href="#time_format-581"><span class="linenos">581</span></a> <span class="k">return</span> <span class="n">time_format</span> <span class="k">if</span> <span class="n">time_format</span> <span class="o">!=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">TIME_FORMAT</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="time_format-582"><a href="#time_format-582"><span class="linenos">582</span></a>
</span><span id="time_format-583"><a href="#time_format-583"><span class="linenos">583</span></a> <span class="k">return</span> <span class="n">_time_format</span>
</span></pre></div>
</section>
<section id="create_with_partitions_sql">
<input id="create_with_partitions_sql-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">create_with_partitions_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#Create">sqlglot.expressions.Create</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="create_with_partitions_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#create_with_partitions_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="create_with_partitions_sql-586"><a href="#create_with_partitions_sql-586"><span class="linenos">586</span></a><span class="k">def</span> <span class="nf">create_with_partitions_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="create_with_partitions_sql-587"><a href="#create_with_partitions_sql-587"><span class="linenos">587</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="create_with_partitions_sql-588"><a href="#create_with_partitions_sql-588"><span class="linenos">588</span></a><span class="sd"> In Hive and Spark, the PARTITIONED BY property acts as an extension of a table&#39;s schema. When the</span>
</span><span id="create_with_partitions_sql-589"><a href="#create_with_partitions_sql-589"><span class="linenos">589</span></a><span class="sd"> PARTITIONED BY value is an array of column names, they are transformed into a schema. The corresponding</span>
</span><span id="create_with_partitions_sql-590"><a href="#create_with_partitions_sql-590"><span class="linenos">590</span></a><span class="sd"> columns are removed from the create statement.</span>
</span><span id="create_with_partitions_sql-591"><a href="#create_with_partitions_sql-591"><span class="linenos">591</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="create_with_partitions_sql-592"><a href="#create_with_partitions_sql-592"><span class="linenos">592</span></a> <span class="n">has_schema</span> <span class="o">=</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">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">)</span>
</span><span id="create_with_partitions_sql-593"><a href="#create_with_partitions_sql-593"><span class="linenos">593</span></a> <span class="n">is_partitionable</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">&quot;kind&quot;</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;TABLE&quot;</span><span class="p">,</span> <span class="s2">&quot;VIEW&quot;</span><span class="p">)</span>
</span><span id="create_with_partitions_sql-594"><a href="#create_with_partitions_sql-594"><span class="linenos">594</span></a>
</span><span id="create_with_partitions_sql-595"><a href="#create_with_partitions_sql-595"><span class="linenos">595</span></a> <span class="k">if</span> <span class="n">has_schema</span> <span class="ow">and</span> <span class="n">is_partitionable</span><span class="p">:</span>
</span><span id="create_with_partitions_sql-596"><a href="#create_with_partitions_sql-596"><span class="linenos">596</span></a> <span class="n">prop</span> <span class="o">=</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">PartitionedByProperty</span><span class="p">)</span>
</span><span id="create_with_partitions_sql-597"><a href="#create_with_partitions_sql-597"><span class="linenos">597</span></a> <span class="k">if</span> <span class="n">prop</span> <span class="ow">and</span> <span class="n">prop</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prop</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
</span><span id="create_with_partitions_sql-598"><a href="#create_with_partitions_sql-598"><span class="linenos">598</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="create_with_partitions_sql-599"><a href="#create_with_partitions_sql-599"><span class="linenos">599</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="p">{</span><span class="n">v</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">prop</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">}</span>
</span><span id="create_with_partitions_sql-600"><a href="#create_with_partitions_sql-600"><span class="linenos">600</span></a> <span class="n">partitions</span> <span class="o">=</span> <span class="p">[</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">]</span>
</span><span id="create_with_partitions_sql-601"><a href="#create_with_partitions_sql-601"><span class="linenos">601</span></a> <span class="n">schema</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</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">schema</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">e</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">partitions</span><span class="p">])</span>
</span><span id="create_with_partitions_sql-602"><a href="#create_with_partitions_sql-602"><span class="linenos">602</span></a> <span class="n">prop</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">PartitionedByProperty</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">Schema</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">partitions</span><span class="p">)))</span>
</span><span id="create_with_partitions_sql-603"><a href="#create_with_partitions_sql-603"><span class="linenos">603</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
</span><span id="create_with_partitions_sql-604"><a href="#create_with_partitions_sql-604"><span class="linenos">604</span></a>
</span><span id="create_with_partitions_sql-605"><a href="#create_with_partitions_sql-605"><span class="linenos">605</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>In Hive and Spark, the PARTITIONED BY property acts as an extension of a table's schema. When the
PARTITIONED BY value is an array of column names, they are transformed into a schema. The corresponding
columns are removed from the create statement.</p>
</div>
</section>
<section id="parse_date_delta">
<input id="parse_date_delta-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">parse_date_delta</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">exp_class</span><span class="p">:</span> <span class="n">Type</span><span class="p">[</span><span class="o">~</span><span class="n">E</span><span class="p">]</span>,</span><span class="param"> <span class="n">unit_mapping</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="n">Callable</span><span class="p">[[</span><span class="n">List</span><span class="p">],</span> <span class="o">~</span><span class="n">E</span><span class="p">]</span>:</span></span>
<label class="view-source-button" for="parse_date_delta-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#parse_date_delta"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="parse_date_delta-608"><a href="#parse_date_delta-608"><span class="linenos">608</span></a><span class="k">def</span> <span class="nf">parse_date_delta</span><span class="p">(</span>
</span><span id="parse_date_delta-609"><a href="#parse_date_delta-609"><span class="linenos">609</span></a> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">unit_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="parse_date_delta-610"><a href="#parse_date_delta-610"><span class="linenos">610</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</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">E</span><span class="p">]:</span>
</span><span id="parse_date_delta-611"><a href="#parse_date_delta-611"><span class="linenos">611</span></a> <span class="k">def</span> <span class="nf">inner_func</span><span class="p">(</span><span class="n">args</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="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
</span><span id="parse_date_delta-612"><a href="#parse_date_delta-612"><span class="linenos">612</span></a> <span class="n">unit_based</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span>
</span><span id="parse_date_delta-613"><a href="#parse_date_delta-613"><span class="linenos">613</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="k">if</span> <span class="n">unit_based</span> <span class="k">else</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="parse_date_delta-614"><a href="#parse_date_delta-614"><span class="linenos">614</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">unit_based</span> <span class="k">else</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">&quot;DAY&quot;</span><span class="p">)</span>
</span><span id="parse_date_delta-615"><a href="#parse_date_delta-615"><span class="linenos">615</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">unit_mapping</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">unit</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="n">unit</span><span class="o">.</span><span class="n">name</span><span class="p">))</span> <span class="k">if</span> <span class="n">unit_mapping</span> <span class="k">else</span> <span class="n">unit</span>
</span><span id="parse_date_delta-616"><a href="#parse_date_delta-616"><span class="linenos">616</span></a> <span class="k">return</span> <span class="n">exp_class</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
</span><span id="parse_date_delta-617"><a href="#parse_date_delta-617"><span class="linenos">617</span></a>
</span><span id="parse_date_delta-618"><a href="#parse_date_delta-618"><span class="linenos">618</span></a> <span class="k">return</span> <span class="n">inner_func</span>
</span></pre></div>
</section>
<section id="parse_date_delta_with_interval">
<input id="parse_date_delta_with_interval-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">parse_date_delta_with_interval</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">expression_class</span><span class="p">:</span> <span class="n">Type</span><span class="p">[</span><span class="o">~</span><span class="n">E</span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n">Callable</span><span class="p">[[</span><span class="n">List</span><span class="p">],</span> <span class="n">Optional</span><span class="p">[</span><span class="o">~</span><span class="n">E</span><span class="p">]]</span>:</span></span>
<label class="view-source-button" for="parse_date_delta_with_interval-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#parse_date_delta_with_interval"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="parse_date_delta_with_interval-621"><a href="#parse_date_delta_with_interval-621"><span class="linenos">621</span></a><span class="k">def</span> <span class="nf">parse_date_delta_with_interval</span><span class="p">(</span>
</span><span id="parse_date_delta_with_interval-622"><a href="#parse_date_delta_with_interval-622"><span class="linenos">622</span></a> <span class="n">expression_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span>
</span><span id="parse_date_delta_with_interval-623"><a href="#parse_date_delta_with_interval-623"><span class="linenos">623</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</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">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]]:</span>
</span><span id="parse_date_delta_with_interval-624"><a href="#parse_date_delta_with_interval-624"><span class="linenos">624</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="n">args</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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]:</span>
</span><span id="parse_date_delta_with_interval-625"><a href="#parse_date_delta_with_interval-625"><span class="linenos">625</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">2</span><span class="p">:</span>
</span><span id="parse_date_delta_with_interval-626"><a href="#parse_date_delta_with_interval-626"><span class="linenos">626</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="parse_date_delta_with_interval-627"><a href="#parse_date_delta_with_interval-627"><span class="linenos">627</span></a>
</span><span id="parse_date_delta_with_interval-628"><a href="#parse_date_delta_with_interval-628"><span class="linenos">628</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
</span><span id="parse_date_delta_with_interval-629"><a href="#parse_date_delta_with_interval-629"><span class="linenos">629</span></a>
</span><span id="parse_date_delta_with_interval-630"><a href="#parse_date_delta_with_interval-630"><span class="linenos">630</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">interval</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">):</span>
</span><span id="parse_date_delta_with_interval-631"><a href="#parse_date_delta_with_interval-631"><span class="linenos">631</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;INTERVAL expression expected but got &#39;</span><span class="si">{</span><span class="n">interval</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
</span><span id="parse_date_delta_with_interval-632"><a href="#parse_date_delta_with_interval-632"><span class="linenos">632</span></a>
</span><span id="parse_date_delta_with_interval-633"><a href="#parse_date_delta_with_interval-633"><span class="linenos">633</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">interval</span><span class="o">.</span><span class="n">this</span>
</span><span id="parse_date_delta_with_interval-634"><a href="#parse_date_delta_with_interval-634"><span class="linenos">634</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
</span><span id="parse_date_delta_with_interval-635"><a href="#parse_date_delta_with_interval-635"><span class="linenos">635</span></a> <span class="n">expression</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="parse_date_delta_with_interval-636"><a href="#parse_date_delta_with_interval-636"><span class="linenos">636</span></a>
</span><span id="parse_date_delta_with_interval-637"><a href="#parse_date_delta_with_interval-637"><span class="linenos">637</span></a> <span class="k">return</span> <span class="n">expression_class</span><span class="p">(</span>
</span><span id="parse_date_delta_with_interval-638"><a href="#parse_date_delta_with_interval-638"><span class="linenos">638</span></a> <span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">0</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">unit</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">string</span><span class="p">(</span><span class="n">interval</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">))</span>
</span><span id="parse_date_delta_with_interval-639"><a href="#parse_date_delta_with_interval-639"><span class="linenos">639</span></a> <span class="p">)</span>
</span><span id="parse_date_delta_with_interval-640"><a href="#parse_date_delta_with_interval-640"><span class="linenos">640</span></a>
</span><span id="parse_date_delta_with_interval-641"><a href="#parse_date_delta_with_interval-641"><span class="linenos">641</span></a> <span class="k">return</span> <span class="n">func</span>
</span></pre></div>
</section>
<section id="date_trunc_to_time">
<input id="date_trunc_to_time-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">date_trunc_to_time</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">args</span><span class="p">:</span> <span class="n">List</span></span><span class="return-annotation">) -> <span class="n"><a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a></span> <span class="o">|</span> <span class="n"><a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a></span>:</span></span>
<label class="view-source-button" for="date_trunc_to_time-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#date_trunc_to_time"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="date_trunc_to_time-644"><a href="#date_trunc_to_time-644"><span class="linenos">644</span></a><span class="k">def</span> <span class="nf">date_trunc_to_time</span><span class="p">(</span><span class="n">args</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="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span>
</span><span id="date_trunc_to_time-645"><a href="#date_trunc_to_time-645"><span class="linenos">645</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="date_trunc_to_time-646"><a href="#date_trunc_to_time-646"><span class="linenos">646</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="date_trunc_to_time-647"><a href="#date_trunc_to_time-647"><span class="linenos">647</span></a>
</span><span id="date_trunc_to_time-648"><a href="#date_trunc_to_time-648"><span class="linenos">648</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</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="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;date&quot;</span><span class="p">):</span>
</span><span id="date_trunc_to_time-649"><a href="#date_trunc_to_time-649"><span class="linenos">649</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">(</span><span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
</span><span id="date_trunc_to_time-650"><a href="#date_trunc_to_time-650"><span class="linenos">650</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
</span></pre></div>
</section>
<section id="date_add_interval_sql">
<input id="date_add_interval_sql-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">date_add_interval_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">data_type</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">kind</span><span class="p">:</span> <span class="nb">str</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>
<label class="view-source-button" for="date_add_interval_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#date_add_interval_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="date_add_interval_sql-653"><a href="#date_add_interval_sql-653"><span class="linenos">653</span></a><span class="k">def</span> <span class="nf">date_add_interval_sql</span><span class="p">(</span>
</span><span id="date_add_interval_sql-654"><a href="#date_add_interval_sql-654"><span class="linenos">654</span></a> <span class="n">data_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="nb">str</span>
</span><span id="date_add_interval_sql-655"><a href="#date_add_interval_sql-655"><span class="linenos">655</span></a><span class="p">)</span> <span class="o">-&gt;</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="date_add_interval_sql-656"><a href="#date_add_interval_sql-656"><span class="linenos">656</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="date_add_interval_sql-657"><a href="#date_add_interval_sql-657"><span class="linenos">657</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="date_add_interval_sql-658"><a href="#date_add_interval_sql-658"><span class="linenos">658</span></a> <span class="n">unit</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">&quot;unit&quot;</span><span class="p">)</span>
</span><span id="date_add_interval_sql-659"><a href="#date_add_interval_sql-659"><span class="linenos">659</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;DAY&quot;</span><span class="p">)</span>
</span><span id="date_add_interval_sql-660"><a href="#date_add_interval_sql-660"><span class="linenos">660</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
</span><span id="date_add_interval_sql-661"><a href="#date_add_interval_sql-661"><span class="linenos">661</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">data_type</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">interval</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="date_add_interval_sql-662"><a href="#date_add_interval_sql-662"><span class="linenos">662</span></a>
</span><span id="date_add_interval_sql-663"><a href="#date_add_interval_sql-663"><span class="linenos">663</span></a> <span class="k">return</span> <span class="n">func</span>
</span></pre></div>
</section>
<section id="timestamptrunc_sql">
<input id="timestamptrunc_sql-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">timestamptrunc_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="timestamptrunc_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#timestamptrunc_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="timestamptrunc_sql-666"><a href="#timestamptrunc_sql-666"><span class="linenos">666</span></a><span class="k">def</span> <span class="nf">timestamptrunc_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">TimestampTrunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="timestamptrunc_sql-667"><a href="#timestamptrunc_sql-667"><span class="linenos">667</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="timestamptrunc_sql-668"><a href="#timestamptrunc_sql-668"><span class="linenos">668</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</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="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="timestamptrunc_sql-669"><a href="#timestamptrunc_sql-669"><span class="linenos">669</span></a> <span class="p">)</span>
</span></pre></div>
</section>
<section id="no_timestamp_sql">
<input id="no_timestamp_sql-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">no_timestamp_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#Timestamp">sqlglot.expressions.Timestamp</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="no_timestamp_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#no_timestamp_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="no_timestamp_sql-672"><a href="#no_timestamp_sql-672"><span class="linenos">672</span></a><span class="k">def</span> <span class="nf">no_timestamp_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Timestamp</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="no_timestamp_sql-673"><a href="#no_timestamp_sql-673"><span class="linenos">673</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">:</span>
</span><span id="no_timestamp_sql-674"><a href="#no_timestamp_sql-674"><span class="linenos">674</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">to</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">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">))</span>
</span><span id="no_timestamp_sql-675"><a href="#no_timestamp_sql-675"><span class="linenos">675</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;expression&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="n">TIMEZONES</span><span class="p">:</span>
</span><span id="no_timestamp_sql-676"><a href="#no_timestamp_sql-676"><span class="linenos">676</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
</span><span id="no_timestamp_sql-677"><a href="#no_timestamp_sql-677"><span class="linenos">677</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">(</span>
</span><span id="no_timestamp_sql-678"><a href="#no_timestamp_sql-678"><span class="linenos">678</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</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">to</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">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">),</span>
</span><span id="no_timestamp_sql-679"><a href="#no_timestamp_sql-679"><span class="linenos">679</span></a> <span class="n">zone</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
</span><span id="no_timestamp_sql-680"><a href="#no_timestamp_sql-680"><span class="linenos">680</span></a> <span class="p">)</span>
</span><span id="no_timestamp_sql-681"><a href="#no_timestamp_sql-681"><span class="linenos">681</span></a> <span class="p">)</span>
</span><span id="no_timestamp_sql-682"><a href="#no_timestamp_sql-682"><span class="linenos">682</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></pre></div>
</section>
<section id="locate_to_strposition">
<input id="locate_to_strposition-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">locate_to_strposition</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">args</span><span class="p">:</span> <span class="n">List</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="locate_to_strposition-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#locate_to_strposition"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="locate_to_strposition-685"><a href="#locate_to_strposition-685"><span class="linenos">685</span></a><span class="k">def</span> <span class="nf">locate_to_strposition</span><span class="p">(</span><span class="n">args</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="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="locate_to_strposition-686"><a href="#locate_to_strposition-686"><span class="linenos">686</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
</span><span id="locate_to_strposition-687"><a href="#locate_to_strposition-687"><span class="linenos">687</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
</span><span id="locate_to_strposition-688"><a href="#locate_to_strposition-688"><span class="linenos">688</span></a> <span class="p">)</span>
</span></pre></div>
</section>
<section id="strposition_to_locate_sql">
<input id="strposition_to_locate_sql-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">strposition_to_locate_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="strposition_to_locate_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#strposition_to_locate_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="strposition_to_locate_sql-691"><a href="#strposition_to_locate_sql-691"><span class="linenos">691</span></a><span class="k">def</span> <span class="nf">strposition_to_locate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">StrPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="strposition_to_locate_sql-692"><a href="#strposition_to_locate_sql-692"><span class="linenos">692</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="strposition_to_locate_sql-693"><a href="#strposition_to_locate_sql-693"><span class="linenos">693</span></a> <span class="s2">&quot;LOCATE&quot;</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">&quot;substr&quot;</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">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">&quot;position&quot;</span><span class="p">)</span>
</span><span id="strposition_to_locate_sql-694"><a href="#strposition_to_locate_sql-694"><span class="linenos">694</span></a> <span class="p">)</span>
</span></pre></div>
</section>
<section id="left_to_substring_sql">
<input id="left_to_substring_sql-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">left_to_substring_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#Left">sqlglot.expressions.Left</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="left_to_substring_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#left_to_substring_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="left_to_substring_sql-697"><a href="#left_to_substring_sql-697"><span class="linenos">697</span></a><span class="k">def</span> <span class="nf">left_to_substring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Left</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="left_to_substring_sql-698"><a href="#left_to_substring_sql-698"><span class="linenos">698</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
</span><span id="left_to_substring_sql-699"><a href="#left_to_substring_sql-699"><span class="linenos">699</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
</span><span id="left_to_substring_sql-700"><a href="#left_to_substring_sql-700"><span class="linenos">700</span></a> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</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="mi">1</span><span class="p">),</span> <span class="n">length</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
</span><span id="left_to_substring_sql-701"><a href="#left_to_substring_sql-701"><span class="linenos">701</span></a> <span class="p">)</span>
</span><span id="left_to_substring_sql-702"><a href="#left_to_substring_sql-702"><span class="linenos">702</span></a> <span class="p">)</span>
</span></pre></div>
</section>
<section id="right_to_substring_sql">
<input id="right_to_substring_sql-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">right_to_substring_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#Left">sqlglot.expressions.Left</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="right_to_substring_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#right_to_substring_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="right_to_substring_sql-705"><a href="#right_to_substring_sql-705"><span class="linenos">705</span></a><span class="k">def</span> <span class="nf">right_to_substring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Left</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="right_to_substring_sql-706"><a href="#right_to_substring_sql-706"><span class="linenos">706</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
</span><span id="right_to_substring_sql-707"><a href="#right_to_substring_sql-707"><span class="linenos">707</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
</span><span id="right_to_substring_sql-708"><a href="#right_to_substring_sql-708"><span class="linenos">708</span></a> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
</span><span id="right_to_substring_sql-709"><a href="#right_to_substring_sql-709"><span class="linenos">709</span></a> <span class="n">start</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="o">-</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</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="mi">1</span><span class="p">),</span>
</span><span id="right_to_substring_sql-710"><a href="#right_to_substring_sql-710"><span class="linenos">710</span></a> <span class="p">)</span>
</span><span id="right_to_substring_sql-711"><a href="#right_to_substring_sql-711"><span class="linenos">711</span></a> <span class="p">)</span>
</span></pre></div>
</section>
<section id="timestrtotime_sql">
<input id="timestrtotime_sql-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">timestrtotime_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="timestrtotime_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#timestrtotime_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="timestrtotime_sql-714"><a href="#timestrtotime_sql-714"><span class="linenos">714</span></a><span class="k">def</span> <span class="nf">timestrtotime_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">TimeStrToTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="timestrtotime_sql-715"><a href="#timestrtotime_sql-715"><span class="linenos">715</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;timestamp&quot;</span><span class="p">))</span>
</span></pre></div>
</section>
<section id="datestrtodate_sql">
<input id="datestrtodate_sql-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">datestrtodate_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="datestrtodate_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#datestrtodate_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="datestrtodate_sql-718"><a href="#datestrtodate_sql-718"><span class="linenos">718</span></a><span class="k">def</span> <span class="nf">datestrtodate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">DateStrToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="datestrtodate_sql-719"><a href="#datestrtodate_sql-719"><span class="linenos">719</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;date&quot;</span><span class="p">))</span>
</span></pre></div>
</section>
<section id="encode_decode_sql">
<input id="encode_decode_sql-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">encode_decode_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><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="param"> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">replace</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="encode_decode_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#encode_decode_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="encode_decode_sql-723"><a href="#encode_decode_sql-723"><span class="linenos">723</span></a><span class="k">def</span> <span class="nf">encode_decode_sql</span><span class="p">(</span>
</span><span id="encode_decode_sql-724"><a href="#encode_decode_sql-724"><span class="linenos">724</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">replace</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="encode_decode_sql-725"><a href="#encode_decode_sql-725"><span class="linenos">725</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="encode_decode_sql-726"><a href="#encode_decode_sql-726"><span class="linenos">726</span></a> <span class="n">charset</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">&quot;charset&quot;</span><span class="p">)</span>
</span><span id="encode_decode_sql-727"><a href="#encode_decode_sql-727"><span class="linenos">727</span></a> <span class="k">if</span> <span class="n">charset</span> <span class="ow">and</span> <span class="n">charset</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">&quot;utf-8&quot;</span><span class="p">:</span>
</span><span id="encode_decode_sql-728"><a href="#encode_decode_sql-728"><span class="linenos">728</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected utf-8 character set, got </span><span class="si">{</span><span class="n">charset</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
</span><span id="encode_decode_sql-729"><a href="#encode_decode_sql-729"><span class="linenos">729</span></a>
</span><span id="encode_decode_sql-730"><a href="#encode_decode_sql-730"><span class="linenos">730</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">name</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">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">&quot;replace&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">replace</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
</span></pre></div>
</section>
<section id="min_or_least">
<input id="min_or_least-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">min_or_least</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#Min">sqlglot.expressions.Min</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="min_or_least-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#min_or_least"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="min_or_least-733"><a href="#min_or_least-733"><span class="linenos">733</span></a><span class="k">def</span> <span class="nf">min_or_least</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Min</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="min_or_least-734"><a href="#min_or_least-734"><span class="linenos">734</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;LEAST&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;MIN&quot;</span>
</span><span id="min_or_least-735"><a href="#min_or_least-735"><span class="linenos">735</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span></pre></div>
</section>
<section id="max_or_greatest">
<input id="max_or_greatest-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">max_or_greatest</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#Max">sqlglot.expressions.Max</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="max_or_greatest-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#max_or_greatest"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="max_or_greatest-738"><a href="#max_or_greatest-738"><span class="linenos">738</span></a><span class="k">def</span> <span class="nf">max_or_greatest</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Max</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="max_or_greatest-739"><a href="#max_or_greatest-739"><span class="linenos">739</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;GREATEST&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;MAX&quot;</span>
</span><span id="max_or_greatest-740"><a href="#max_or_greatest-740"><span class="linenos">740</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span></pre></div>
</section>
<section id="count_if_to_sum">
<input id="count_if_to_sum-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">count_if_to_sum</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="count_if_to_sum-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#count_if_to_sum"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="count_if_to_sum-743"><a href="#count_if_to_sum-743"><span class="linenos">743</span></a><span class="k">def</span> <span class="nf">count_if_to_sum</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">CountIf</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="count_if_to_sum-744"><a href="#count_if_to_sum-744"><span class="linenos">744</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="count_if_to_sum-745"><a href="#count_if_to_sum-745"><span class="linenos">745</span></a>
</span><span id="count_if_to_sum-746"><a href="#count_if_to_sum-746"><span class="linenos">746</span></a> <span class="k">if</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">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">):</span>
</span><span id="count_if_to_sum-747"><a href="#count_if_to_sum-747"><span class="linenos">747</span></a> <span class="n">cond</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">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="count_if_to_sum-748"><a href="#count_if_to_sum-748"><span class="linenos">748</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DISTINCT is not supported when converting COUNT_IF to SUM&quot;</span><span class="p">)</span>
</span><span id="count_if_to_sum-749"><a href="#count_if_to_sum-749"><span class="linenos">749</span></a>
</span><span id="count_if_to_sum-750"><a href="#count_if_to_sum-750"><span class="linenos">750</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;sum&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;if&quot;</span><span class="p">,</span> <span class="n">cond</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
</span></pre></div>
</section>
<section id="trim_sql">
<input id="trim_sql-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">trim_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#Trim">sqlglot.expressions.Trim</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="trim_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#trim_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="trim_sql-753"><a href="#trim_sql-753"><span class="linenos">753</span></a><span class="k">def</span> <span class="nf">trim_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Trim</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="trim_sql-754"><a href="#trim_sql-754"><span class="linenos">754</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="trim_sql-755"><a href="#trim_sql-755"><span class="linenos">755</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
</span><span id="trim_sql-756"><a href="#trim_sql-756"><span class="linenos">756</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
</span><span id="trim_sql-757"><a href="#trim_sql-757"><span class="linenos">757</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;collation&quot;</span><span class="p">)</span>
</span><span id="trim_sql-758"><a href="#trim_sql-758"><span class="linenos">758</span></a>
</span><span id="trim_sql-759"><a href="#trim_sql-759"><span class="linenos">759</span></a> <span class="c1"># Use TRIM/LTRIM/RTRIM syntax if the expression isn&#39;t database-specific</span>
</span><span id="trim_sql-760"><a href="#trim_sql-760"><span class="linenos">760</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">remove_chars</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">collation</span><span class="p">:</span>
</span><span id="trim_sql-761"><a href="#trim_sql-761"><span class="linenos">761</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">trim_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="trim_sql-762"><a href="#trim_sql-762"><span class="linenos">762</span></a>
</span><span id="trim_sql-763"><a href="#trim_sql-763"><span class="linenos">763</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="trim_sql-764"><a href="#trim_sql-764"><span class="linenos">764</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">remove_chars</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="trim_sql-765"><a href="#trim_sql-765"><span class="linenos">765</span></a> <span class="n">from_part</span> <span class="o">=</span> <span class="s2">&quot;FROM &quot;</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="ow">or</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="trim_sql-766"><a href="#trim_sql-766"><span class="linenos">766</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLATE </span><span class="si">{</span><span class="n">collation</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">collation</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="trim_sql-767"><a href="#trim_sql-767"><span class="linenos">767</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TRIM(</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}{</span><span class="n">remove_chars</span><span class="si">}{</span><span class="n">from_part</span><span class="si">}{</span><span class="n">target</span><span class="si">}{</span><span class="n">collation</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
</section>
<section id="str_to_time_sql">
<input id="str_to_time_sql-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">str_to_time_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><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="nb">str</span>:</span></span>
<label class="view-source-button" for="str_to_time_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#str_to_time_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="str_to_time_sql-770"><a href="#str_to_time_sql-770"><span class="linenos">770</span></a><span class="k">def</span> <span class="nf">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="str_to_time_sql-771"><a href="#str_to_time_sql-771"><span class="linenos">771</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRPTIME&quot;</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="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
</span></pre></div>
</section>
<section id="ts_or_ds_to_date_sql">
<input id="ts_or_ds_to_date_sql-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">ts_or_ds_to_date_sql</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">) -> <span class="n">Callable</span>:</span></span>
<label class="view-source-button" for="ts_or_ds_to_date_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#ts_or_ds_to_date_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="ts_or_ds_to_date_sql-774"><a href="#ts_or_ds_to_date_sql-774"><span class="linenos">774</span></a><span class="k">def</span> <span class="nf">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">:</span>
</span><span id="ts_or_ds_to_date_sql-775"><a href="#ts_or_ds_to_date_sql-775"><span class="linenos">775</span></a> <span class="k">def</span> <span class="nf">_ts_or_ds_to_date_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">TsOrDsToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="ts_or_ds_to_date_sql-776"><a href="#ts_or_ds_to_date_sql-776"><span class="linenos">776</span></a> <span class="n">_dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
</span><span id="ts_or_ds_to_date_sql-777"><a href="#ts_or_ds_to_date_sql-777"><span class="linenos">777</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="ts_or_ds_to_date_sql-778"><a href="#ts_or_ds_to_date_sql-778"><span class="linenos">778</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">and</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">_dialect</span><span class="o">.</span><span class="n">TIME_FORMAT</span><span class="p">,</span> <span class="n">_dialect</span><span class="o">.</span><span class="n">DATE_FORMAT</span><span class="p">):</span>
</span><span id="ts_or_ds_to_date_sql-779"><a href="#ts_or_ds_to_date_sql-779"><span class="linenos">779</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
</span><span id="ts_or_ds_to_date_sql-780"><a href="#ts_or_ds_to_date_sql-780"><span class="linenos">780</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
</span><span id="ts_or_ds_to_date_sql-781"><a href="#ts_or_ds_to_date_sql-781"><span class="linenos">781</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</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">&quot;format&quot;</span><span class="p">]),</span>
</span><span id="ts_or_ds_to_date_sql-782"><a href="#ts_or_ds_to_date_sql-782"><span class="linenos">782</span></a> <span class="s2">&quot;date&quot;</span><span class="p">,</span>
</span><span id="ts_or_ds_to_date_sql-783"><a href="#ts_or_ds_to_date_sql-783"><span class="linenos">783</span></a> <span class="p">)</span>
</span><span id="ts_or_ds_to_date_sql-784"><a href="#ts_or_ds_to_date_sql-784"><span class="linenos">784</span></a> <span class="p">)</span>
</span><span id="ts_or_ds_to_date_sql-785"><a href="#ts_or_ds_to_date_sql-785"><span class="linenos">785</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;date&quot;</span><span class="p">))</span>
</span><span id="ts_or_ds_to_date_sql-786"><a href="#ts_or_ds_to_date_sql-786"><span class="linenos">786</span></a>
</span><span id="ts_or_ds_to_date_sql-787"><a href="#ts_or_ds_to_date_sql-787"><span class="linenos">787</span></a> <span class="k">return</span> <span class="n">_ts_or_ds_to_date_sql</span>
</span></pre></div>
</section>
<section id="concat_to_dpipe_sql">
<input id="concat_to_dpipe_sql-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">concat_to_dpipe_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#Concat">sqlglot.expressions.Concat</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="concat_to_dpipe_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#concat_to_dpipe_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="concat_to_dpipe_sql-790"><a href="#concat_to_dpipe_sql-790"><span class="linenos">790</span></a><span class="k">def</span> <span class="nf">concat_to_dpipe_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Concat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="concat_to_dpipe_sql-791"><a href="#concat_to_dpipe_sql-791"><span class="linenos">791</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">reduce</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">x</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">y</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">))</span>
</span></pre></div>
</section>
<section id="concat_ws_to_dpipe_sql">
<input id="concat_ws_to_dpipe_sql-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">concat_ws_to_dpipe_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="concat_ws_to_dpipe_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#concat_ws_to_dpipe_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="concat_ws_to_dpipe_sql-794"><a href="#concat_ws_to_dpipe_sql-794"><span class="linenos">794</span></a><span class="k">def</span> <span class="nf">concat_ws_to_dpipe_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">ConcatWs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="concat_ws_to_dpipe_sql-795"><a href="#concat_ws_to_dpipe_sql-795"><span class="linenos">795</span></a> <span class="n">delim</span><span class="p">,</span> <span class="o">*</span><span class="n">rest_args</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
</span><span id="concat_ws_to_dpipe_sql-796"><a href="#concat_ws_to_dpipe_sql-796"><span class="linenos">796</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
</span><span id="concat_ws_to_dpipe_sql-797"><a href="#concat_ws_to_dpipe_sql-797"><span class="linenos">797</span></a> <span class="n">reduce</span><span class="p">(</span>
</span><span id="concat_ws_to_dpipe_sql-798"><a href="#concat_ws_to_dpipe_sql-798"><span class="linenos">798</span></a> <span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">x</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">delim</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">y</span><span class="p">)),</span>
</span><span id="concat_ws_to_dpipe_sql-799"><a href="#concat_ws_to_dpipe_sql-799"><span class="linenos">799</span></a> <span class="n">rest_args</span><span class="p">,</span>
</span><span id="concat_ws_to_dpipe_sql-800"><a href="#concat_ws_to_dpipe_sql-800"><span class="linenos">800</span></a> <span class="p">)</span>
</span><span id="concat_ws_to_dpipe_sql-801"><a href="#concat_ws_to_dpipe_sql-801"><span class="linenos">801</span></a> <span class="p">)</span>
</span></pre></div>
</section>
<section id="regexp_extract_sql">
<input id="regexp_extract_sql-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">regexp_extract_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="regexp_extract_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#regexp_extract_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="regexp_extract_sql-804"><a href="#regexp_extract_sql-804"><span class="linenos">804</span></a><span class="k">def</span> <span class="nf">regexp_extract_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">RegexpExtract</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="regexp_extract_sql-805"><a href="#regexp_extract_sql-805"><span class="linenos">805</span></a> <span class="n">bad_args</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">filter</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="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">,</span> <span class="s2">&quot;occurrence&quot;</span><span class="p">,</span> <span class="s2">&quot;parameters&quot;</span><span class="p">)))</span>
</span><span id="regexp_extract_sql-806"><a href="#regexp_extract_sql-806"><span class="linenos">806</span></a> <span class="k">if</span> <span class="n">bad_args</span><span class="p">:</span>
</span><span id="regexp_extract_sql-807"><a href="#regexp_extract_sql-807"><span class="linenos">807</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;REGEXP_EXTRACT does not support the following arg(s): </span><span class="si">{</span><span class="n">bad_args</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="regexp_extract_sql-808"><a href="#regexp_extract_sql-808"><span class="linenos">808</span></a>
</span><span id="regexp_extract_sql-809"><a href="#regexp_extract_sql-809"><span class="linenos">809</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="regexp_extract_sql-810"><a href="#regexp_extract_sql-810"><span class="linenos">810</span></a> <span class="s2">&quot;REGEXP_EXTRACT&quot;</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">expression</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">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;group&quot;</span><span class="p">)</span>
</span><span id="regexp_extract_sql-811"><a href="#regexp_extract_sql-811"><span class="linenos">811</span></a> <span class="p">)</span>
</span></pre></div>
</section>
<section id="regexp_replace_sql">
<input id="regexp_replace_sql-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">regexp_replace_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="regexp_replace_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#regexp_replace_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="regexp_replace_sql-814"><a href="#regexp_replace_sql-814"><span class="linenos">814</span></a><span class="k">def</span> <span class="nf">regexp_replace_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">RegexpReplace</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="regexp_replace_sql-815"><a href="#regexp_replace_sql-815"><span class="linenos">815</span></a> <span class="n">bad_args</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span>
</span><span id="regexp_replace_sql-816"><a href="#regexp_replace_sql-816"><span class="linenos">816</span></a> <span class="nb">filter</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="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">,</span> <span class="s2">&quot;occurrence&quot;</span><span class="p">,</span> <span class="s2">&quot;parameters&quot;</span><span class="p">,</span> <span class="s2">&quot;modifiers&quot;</span><span class="p">))</span>
</span><span id="regexp_replace_sql-817"><a href="#regexp_replace_sql-817"><span class="linenos">817</span></a> <span class="p">)</span>
</span><span id="regexp_replace_sql-818"><a href="#regexp_replace_sql-818"><span class="linenos">818</span></a> <span class="k">if</span> <span class="n">bad_args</span><span class="p">:</span>
</span><span id="regexp_replace_sql-819"><a href="#regexp_replace_sql-819"><span class="linenos">819</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;REGEXP_REPLACE does not support the following arg(s): </span><span class="si">{</span><span class="n">bad_args</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="regexp_replace_sql-820"><a href="#regexp_replace_sql-820"><span class="linenos">820</span></a>
</span><span id="regexp_replace_sql-821"><a href="#regexp_replace_sql-821"><span class="linenos">821</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="regexp_replace_sql-822"><a href="#regexp_replace_sql-822"><span class="linenos">822</span></a> <span class="s2">&quot;REGEXP_REPLACE&quot;</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">expression</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">args</span><span class="p">[</span><span class="s2">&quot;replacement&quot;</span><span class="p">]</span>
</span><span id="regexp_replace_sql-823"><a href="#regexp_replace_sql-823"><span class="linenos">823</span></a> <span class="p">)</span>
</span></pre></div>
</section>
<section id="pivot_column_names">
<input id="pivot_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">pivot_column_names</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">aggregations</span><span class="p">:</span> <span class="n">List</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="param"> <span class="n">dialect</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n"><a href="#Dialect">Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="#Dialect">Dialect</a></span><span class="p">],</span> <span class="n">NoneType</span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>:</span></span>
<label class="view-source-button" for="pivot_column_names-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#pivot_column_names"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="pivot_column_names-826"><a href="#pivot_column_names-826"><span class="linenos">826</span></a><span class="k">def</span> <span class="nf">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</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">Expression</span><span class="p">],</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
</span><span id="pivot_column_names-827"><a href="#pivot_column_names-827"><span class="linenos">827</span></a> <span class="n">names</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="pivot_column_names-828"><a href="#pivot_column_names-828"><span class="linenos">828</span></a> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">aggregations</span><span class="p">:</span>
</span><span id="pivot_column_names-829"><a href="#pivot_column_names-829"><span class="linenos">829</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">agg</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="pivot_column_names-830"><a href="#pivot_column_names-830"><span class="linenos">830</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span><span class="p">)</span>
</span><span id="pivot_column_names-831"><a href="#pivot_column_names-831"><span class="linenos">831</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="pivot_column_names-832"><a href="#pivot_column_names-832"><span class="linenos">832</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="pivot_column_names-833"><a href="#pivot_column_names-833"><span class="linenos">833</span></a><span class="sd"> This case corresponds to aggregations without aliases being used as suffixes</span>
</span><span id="pivot_column_names-834"><a href="#pivot_column_names-834"><span class="linenos">834</span></a><span class="sd"> (e.g. col_avg(foo)). We need to unquote identifiers because they&#39;re going to</span>
</span><span id="pivot_column_names-835"><a href="#pivot_column_names-835"><span class="linenos">835</span></a><span class="sd"> be quoted in the base parser&#39;s `_parse_pivot` method, due to `to_identifier`.</span>
</span><span id="pivot_column_names-836"><a href="#pivot_column_names-836"><span class="linenos">836</span></a><span class="sd"> Otherwise, we&#39;d end up with `col_avg(`foo`)` (notice the double quotes).</span>
</span><span id="pivot_column_names-837"><a href="#pivot_column_names-837"><span class="linenos">837</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="pivot_column_names-838"><a href="#pivot_column_names-838"><span class="linenos">838</span></a> <span class="n">agg_all_unquoted</span> <span class="o">=</span> <span class="n">agg</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
</span><span id="pivot_column_names-839"><a href="#pivot_column_names-839"><span class="linenos">839</span></a> <span class="k">lambda</span> <span class="n">node</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="pivot_column_names-840"><a href="#pivot_column_names-840"><span class="linenos">840</span></a> <span class="k">if</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">Identifier</span><span class="p">)</span>
</span><span id="pivot_column_names-841"><a href="#pivot_column_names-841"><span class="linenos">841</span></a> <span class="k">else</span> <span class="n">node</span>
</span><span id="pivot_column_names-842"><a href="#pivot_column_names-842"><span class="linenos">842</span></a> <span class="p">)</span>
</span><span id="pivot_column_names-843"><a href="#pivot_column_names-843"><span class="linenos">843</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg_all_unquoted</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize_functions</span><span class="o">=</span><span class="s2">&quot;lower&quot;</span><span class="p">))</span>
</span><span id="pivot_column_names-844"><a href="#pivot_column_names-844"><span class="linenos">844</span></a>
</span><span id="pivot_column_names-845"><a href="#pivot_column_names-845"><span class="linenos">845</span></a> <span class="k">return</span> <span class="n">names</span>
</span></pre></div>
</section>
<section id="binary_from_function">
<input id="binary_from_function-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">binary_from_function</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">expr_type</span><span class="p">:</span> <span class="n">Type</span><span class="p">[</span><span class="o">~</span><span class="n">B</span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n">Callable</span><span class="p">[[</span><span class="n">List</span><span class="p">],</span> <span class="o">~</span><span class="n">B</span><span class="p">]</span>:</span></span>
<label class="view-source-button" for="binary_from_function-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#binary_from_function"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="binary_from_function-848"><a href="#binary_from_function-848"><span class="linenos">848</span></a><span class="k">def</span> <span class="nf">binary_from_function</span><span class="p">(</span><span class="n">expr_type</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">B</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</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">B</span><span class="p">]:</span>
</span><span id="binary_from_function-849"><a href="#binary_from_function-849"><span class="linenos">849</span></a> <span class="k">return</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">expr_type</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
</span></pre></div>
</section>
<section id="parse_timestamp_trunc">
<input id="parse_timestamp_trunc-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">parse_timestamp_trunc</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">args</span><span class="p">:</span> <span class="n">List</span></span><span class="return-annotation">) -> <span class="n"><a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a></span>:</span></span>
<label class="view-source-button" for="parse_timestamp_trunc-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#parse_timestamp_trunc"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="parse_timestamp_trunc-853"><a href="#parse_timestamp_trunc-853"><span class="linenos">853</span></a><span class="k">def</span> <span class="nf">parse_timestamp_trunc</span><span class="p">(</span><span class="n">args</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="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span>
</span><span id="parse_timestamp_trunc-854"><a href="#parse_timestamp_trunc-854"><span class="linenos">854</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
</span></pre></div>
</section>
<section id="any_value_to_max_sql">
<input id="any_value_to_max_sql-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">any_value_to_max_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="any_value_to_max_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#any_value_to_max_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="any_value_to_max_sql-857"><a href="#any_value_to_max_sql-857"><span class="linenos">857</span></a><span class="k">def</span> <span class="nf">any_value_to_max_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">AnyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="any_value_to_max_sql-858"><a href="#any_value_to_max_sql-858"><span class="linenos">858</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span></pre></div>
</section>
<section id="bool_xor_sql">
<input id="bool_xor_sql-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">bool_xor_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#Xor">sqlglot.expressions.Xor</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="bool_xor_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#bool_xor_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="bool_xor_sql-861"><a href="#bool_xor_sql-861"><span class="linenos">861</span></a><span class="k">def</span> <span class="nf">bool_xor_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">Xor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="bool_xor_sql-862"><a href="#bool_xor_sql-862"><span class="linenos">862</span></a> <span class="n">a</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
</span><span id="bool_xor_sql-863"><a href="#bool_xor_sql-863"><span class="linenos">863</span></a> <span class="n">b</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
</span><span id="bool_xor_sql-864"><a href="#bool_xor_sql-864"><span class="linenos">864</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">a</span><span class="si">}</span><span class="s2"> AND (NOT </span><span class="si">{</span><span class="n">b</span><span class="si">}</span><span class="s2">)) OR ((NOT </span><span class="si">{</span><span class="n">a</span><span class="si">}</span><span class="s2">) AND </span><span class="si">{</span><span class="n">b</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
</section>
<section id="json_keyvalue_comma_sql">
<input id="json_keyvalue_comma_sql-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">json_keyvalue_comma_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#JSONKeyValue">sqlglot.expressions.JSONKeyValue</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="json_keyvalue_comma_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#json_keyvalue_comma_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="json_keyvalue_comma_sql-868"><a href="#json_keyvalue_comma_sql-868"><span class="linenos">868</span></a><span class="k">def</span> <span class="nf">json_keyvalue_comma_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">JSONKeyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="json_keyvalue_comma_sql-869"><a href="#json_keyvalue_comma_sql-869"><span class="linenos">869</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
</section>
<section id="is_parse_json">
<input id="is_parse_json-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">is_parse_json</span><span class="signature pdoc-code condensed">(<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="nb">bool</span>:</span></span>
<label class="view-source-button" for="is_parse_json-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#is_parse_json"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="is_parse_json-872"><a href="#is_parse_json-872"><span class="linenos">872</span></a><span class="k">def</span> <span class="nf">is_parse_json</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">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="is_parse_json-873"><a href="#is_parse_json-873"><span class="linenos">873</span></a> <span class="k">return</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">ParseJSON</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
</span><span id="is_parse_json-874"><a href="#is_parse_json-874"><span class="linenos">874</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">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;json&quot;</span><span class="p">)</span>
</span><span id="is_parse_json-875"><a href="#is_parse_json-875"><span class="linenos">875</span></a> <span class="p">)</span>
</span></pre></div>
</section>
<section id="isnull_to_is_null">
<input id="isnull_to_is_null-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">isnull_to_is_null</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">args</span><span class="p">:</span> <span class="n">List</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="isnull_to_is_null-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#isnull_to_is_null"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="isnull_to_is_null-878"><a href="#isnull_to_is_null-878"><span class="linenos">878</span></a><span class="k">def</span> <span class="nf">isnull_to_is_null</span><span class="p">(</span><span class="n">args</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="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="isnull_to_is_null-879"><a href="#isnull_to_is_null-879"><span class="linenos">879</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</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">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()))</span>
</span></pre></div>
</section>
<section id="generatedasidentitycolumnconstraint_sql">
<input id="generatedasidentitycolumnconstraint_sql-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">generatedasidentitycolumnconstraint_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#GeneratedAsIdentityColumnConstraint">sqlglot.expressions.GeneratedAsIdentityColumnConstraint</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="generatedasidentitycolumnconstraint_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#generatedasidentitycolumnconstraint_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="generatedasidentitycolumnconstraint_sql-882"><a href="#generatedasidentitycolumnconstraint_sql-882"><span class="linenos">882</span></a><span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
</span><span id="generatedasidentitycolumnconstraint_sql-883"><a href="#generatedasidentitycolumnconstraint_sql-883"><span class="linenos">883</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">GeneratedAsIdentityColumnConstraint</span>
</span><span id="generatedasidentitycolumnconstraint_sql-884"><a href="#generatedasidentitycolumnconstraint_sql-884"><span class="linenos">884</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="generatedasidentitycolumnconstraint_sql-885"><a href="#generatedasidentitycolumnconstraint_sql-885"><span class="linenos">885</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;start&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;1&quot;</span>
</span><span id="generatedasidentitycolumnconstraint_sql-886"><a href="#generatedasidentitycolumnconstraint_sql-886"><span class="linenos">886</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;increment&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;1&quot;</span>
</span><span id="generatedasidentitycolumnconstraint_sql-887"><a href="#generatedasidentitycolumnconstraint_sql-887"><span class="linenos">887</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;IDENTITY(</span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">increment</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
</section>
<section id="arg_max_or_min_no_count">
<input id="arg_max_or_min_no_count-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">arg_max_or_min_no_count</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">name</span><span class="p">:</span> <span class="nb">str</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#ArgMax">sqlglot.expressions.ArgMax</a></span> <span class="o">|</span> <span class="n"><a href="../expressions.html#ArgMin">sqlglot.expressions.ArgMin</a></span><span class="p">],</span> <span class="nb">str</span><span class="p">]</span>:</span></span>
<label class="view-source-button" for="arg_max_or_min_no_count-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#arg_max_or_min_no_count"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="arg_max_or_min_no_count-890"><a href="#arg_max_or_min_no_count-890"><span class="linenos">890</span></a><span class="k">def</span> <span class="nf">arg_max_or_min_no_count</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">-&gt;</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">ArgMax</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMin</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
</span><span id="arg_max_or_min_no_count-891"><a href="#arg_max_or_min_no_count-891"><span class="linenos">891</span></a> <span class="k">def</span> <span class="nf">_arg_max_or_min_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</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">ArgMax</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMin</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="arg_max_or_min_no_count-892"><a href="#arg_max_or_min_no_count-892"><span class="linenos">892</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">&quot;count&quot;</span><span class="p">):</span>
</span><span id="arg_max_or_min_no_count-893"><a href="#arg_max_or_min_no_count-893"><span class="linenos">893</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Only two arguments are supported in function </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
</span><span id="arg_max_or_min_no_count-894"><a href="#arg_max_or_min_no_count-894"><span class="linenos">894</span></a>
</span><span id="arg_max_or_min_no_count-895"><a href="#arg_max_or_min_no_count-895"><span class="linenos">895</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">name</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">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
</span><span id="arg_max_or_min_no_count-896"><a href="#arg_max_or_min_no_count-896"><span class="linenos">896</span></a>
</span><span id="arg_max_or_min_no_count-897"><a href="#arg_max_or_min_no_count-897"><span class="linenos">897</span></a> <span class="k">return</span> <span class="n">_arg_max_or_min_sql</span>
</span></pre></div>
</section>
<section id="ts_or_ds_add_cast">
<input id="ts_or_ds_add_cast-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">ts_or_ds_add_cast</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#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a></span></span><span class="return-annotation">) -> <span class="n"><a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a></span>:</span></span>
<label class="view-source-button" for="ts_or_ds_add_cast-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#ts_or_ds_add_cast"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="ts_or_ds_add_cast-900"><a href="#ts_or_ds_add_cast-900"><span class="linenos">900</span></a><span class="k">def</span> <span class="nf">ts_or_ds_add_cast</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">TsOrDsAdd</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span>
</span><span id="ts_or_ds_add_cast-901"><a href="#ts_or_ds_add_cast-901"><span class="linenos">901</span></a> <span class="n">this</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">copy</span><span class="p">()</span>
</span><span id="ts_or_ds_add_cast-902"><a href="#ts_or_ds_add_cast-902"><span class="linenos">902</span></a>
</span><span id="ts_or_ds_add_cast-903"><a href="#ts_or_ds_add_cast-903"><span class="linenos">903</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">return_type</span>
</span><span id="ts_or_ds_add_cast-904"><a href="#ts_or_ds_add_cast-904"><span class="linenos">904</span></a> <span class="k">if</span> <span class="n">return_type</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">DATE</span><span class="p">):</span>
</span><span id="ts_or_ds_add_cast-905"><a href="#ts_or_ds_add_cast-905"><span class="linenos">905</span></a> <span class="c1"># If we need to cast to a DATE, we cast to TIMESTAMP first to make sure we</span>
</span><span id="ts_or_ds_add_cast-906"><a href="#ts_or_ds_add_cast-906"><span class="linenos">906</span></a> <span class="c1"># can truncate timestamp strings, because some dialects can&#39;t cast them to DATE</span>
</span><span id="ts_or_ds_add_cast-907"><a href="#ts_or_ds_add_cast-907"><span class="linenos">907</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">this</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">TIMESTAMP</span><span class="p">)</span>
</span><span id="ts_or_ds_add_cast-908"><a href="#ts_or_ds_add_cast-908"><span class="linenos">908</span></a>
</span><span id="ts_or_ds_add_cast-909"><a href="#ts_or_ds_add_cast-909"><span class="linenos">909</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">cast</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">return_type</span><span class="p">))</span>
</span><span id="ts_or_ds_add_cast-910"><a href="#ts_or_ds_add_cast-910"><span class="linenos">910</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
</section>
<section id="date_delta_sql">
<input id="date_delta_sql-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">date_delta_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">cast</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</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">Union</span><span class="p">[</span><span class="n"><a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a></span><span class="p">,</span> <span class="n"><a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a></span><span class="p">,</span> <span class="n"><a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a></span><span class="p">,</span> <span class="n"><a href="../expressions.html#TsOrDsDiff">sqlglot.expressions.TsOrDsDiff</a></span><span class="p">]],</span> <span class="nb">str</span><span class="p">]</span>:</span></span>
<label class="view-source-button" for="date_delta_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#date_delta_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="date_delta_sql-913"><a href="#date_delta_sql-913"><span class="linenos">913</span></a><span class="k">def</span> <span class="nf">date_delta_sql</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="n">cast</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</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">DATE_ADD_OR_DIFF</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
</span><span id="date_delta_sql-914"><a href="#date_delta_sql-914"><span class="linenos">914</span></a> <span class="k">def</span> <span class="nf">_delta_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">DATE_ADD_OR_DIFF</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="date_delta_sql-915"><a href="#date_delta_sql-915"><span class="linenos">915</span></a> <span class="k">if</span> <span class="n">cast</span> <span class="ow">and</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">TsOrDsAdd</span><span class="p">):</span>
</span><span id="date_delta_sql-916"><a href="#date_delta_sql-916"><span class="linenos">916</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">ts_or_ds_add_cast</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="date_delta_sql-917"><a href="#date_delta_sql-917"><span class="linenos">917</span></a>
</span><span id="date_delta_sql-918"><a href="#date_delta_sql-918"><span class="linenos">918</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="date_delta_sql-919"><a href="#date_delta_sql-919"><span class="linenos">919</span></a> <span class="n">name</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</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">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="date_delta_sql-920"><a href="#date_delta_sql-920"><span class="linenos">920</span></a> <span class="p">)</span>
</span><span id="date_delta_sql-921"><a href="#date_delta_sql-921"><span class="linenos">921</span></a>
</span><span id="date_delta_sql-922"><a href="#date_delta_sql-922"><span class="linenos">922</span></a> <span class="k">return</span> <span class="n">_delta_sql</span>
</span></pre></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)
heading += `<span class="default_value"> = ${doc.default_value}</span>`;
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>